loading
Generated 2020-02-25T13:57:34-08:00

All Files ( 42.47% covered at 0.96 hits/line )

446 files in total.
20724 relevant lines, 8802 lines covered and 11922 lines missed. ( 42.47% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
app/channels/application_cable/channel.rb 100.00 % 4 2 2 0 1.00
app/channels/application_cable/connection.rb 100.00 % 4 2 2 0 1.00
app/controllers/application_controller.rb 90.00 % 15 10 9 1 0.90
app/controllers/concerns/current_user_concern.rb 57.14 % 13 7 4 3 0.57
app/controllers/concerns/route_helper.rb 92.16 % 84 51 47 4 8.22
app/controllers/layouts_controller.rb 100.00 % 5 2 2 0 1.00
app/controllers/schedule_controller.rb 33.33 % 28 9 3 6 0.33
app/controllers/sessions_controller.rb 100.00 % 25 17 17 0 1.41
app/controllers/users_controller.rb 66.67 % 20 12 8 4 0.67
app/helpers/application_helper.rb 100.00 % 2 1 1 0 1.00
app/jobs/application_job.rb 100.00 % 2 1 1 0 1.00
app/mailers/application_mailer.rb 100.00 % 4 3 3 0 1.00
app/models/application_record.rb 100.00 % 3 2 2 0 1.00
app/models/user.rb 100.00 % 6 4 4 0 1.00
app/serializers/user_serializer.rb 100.00 % 3 2 2 0 1.00
lib/logging/logging.rb 57.14 % 176 77 44 33 0.90
lib/props/prop_loader.rb 83.72 % 71 43 36 7 4.65
lib/utilities.rb 0.00 % 116 82 0 82 0.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel.rb 100.00 % 16 10 10 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/base.rb 41.41 % 305 99 41 58 1.02
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/broadcasting.rb 64.29 % 31 14 9 5 0.64
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/callbacks.rb 90.00 % 37 20 18 2 0.95
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/naming.rb 87.50 % 25 8 7 1 0.88
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/periodic_timers.rb 46.88 % 78 32 15 17 0.47
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/streams.rb 39.13 % 176 46 18 28 0.39
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection.rb 100.00 % 21 15 15 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/authorization.rb 71.43 % 15 7 5 2 0.71
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/base.rb 39.05 % 260 105 41 64 0.39
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/identification.rb 57.14 % 47 21 12 9 0.57
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/internal_channel.rb 37.50 % 45 24 9 15 0.38
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server.rb 100.00 % 17 10 10 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/base.rb 61.11 % 89 36 22 14 0.61
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/broadcasting.rb 55.56 % 54 18 10 8 0.56
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/configuration.rb 58.33 % 56 24 14 10 0.58
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/connections.rb 60.00 % 36 15 9 6 0.60
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker.rb 54.05 % 77 37 20 17 0.54
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker/active_record_connection_management.rb 90.00 % 21 10 9 1 0.90
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/base.rb 43.75 % 991 192 84 108 0.45
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/collector.rb 52.38 % 32 21 11 10 0.52
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_job.rb 60.00 % 36 15 9 6 0.60
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_methods.rb 67.65 % 82 34 23 11 0.97
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/inline_preview_interceptor.rb 52.00 % 59 25 13 12 0.52
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/log_subscriber.rb 42.11 % 41 19 8 11 0.42
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/mail_helper.rb 30.43 % 72 23 7 16 0.30
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/message_delivery.rb 42.86 % 144 35 15 20 0.43
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/parameterized.rb 54.29 % 154 35 19 16 0.54
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/preview.rb 55.77 % 126 52 29 23 0.56
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/rescuable.rb 64.29 % 29 14 9 5 0.64
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_case.rb 59.42 % 123 69 41 28 0.74
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_helper.rb 37.50 % 144 24 9 15 0.38
target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api.rb 80.00 % 149 15 12 3 1.67
target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api/api_rendering.rb 75.00 % 16 8 6 2 0.75
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb 88.89 % 36 18 16 2 1.56
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb 33.33 % 205 105 35 70 0.41
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/exception_wrapper.rb 37.10 % 147 62 23 39 0.37
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/executor.rb 100.00 % 21 11 11 0 2.18
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/public_exceptions.rb 40.00 % 57 25 10 15 0.40
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/remote_ip.rb 83.67 % 183 49 41 8 2.02
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/request_id.rb 94.44 % 43 18 17 1 1.78
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/abstract_store.rb 76.47 % 92 51 39 12 1.04
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cookie_store.rb 85.37 % 118 41 35 6 1.32
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/show_exceptions.rb 50.00 % 62 28 14 14 0.64
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/static.rb 58.33 % 130 60 35 25 0.80
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/session.rb 73.91 % 234 115 85 30 1.70
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/utils.rb 63.89 % 78 36 23 13 2.92
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/inspector.rb 37.27 % 225 110 41 69 0.37
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb 68.46 % 2267 780 534 246 8.47
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/redirection.rb 40.74 % 201 81 33 48 0.41
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/integration.rb 86.14 % 652 202 174 28 1.99
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/request_encoder.rb 83.33 % 55 30 25 5 1.30
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/test_response.rb 63.16 % 53 19 12 7 0.95
target/rubygems/gems/actionview-5.2.3/lib/action_view/buffers.rb 56.67 % 52 30 17 13 0.57
target/rubygems/gems/actionview-5.2.3/lib/action_view/dependency_tracker.rb 51.32 % 175 76 39 37 0.55
target/rubygems/gems/actionview-5.2.3/lib/action_view/digestor.rb 40.85 % 134 71 29 42 0.41
target/rubygems/gems/actionview-5.2.3/lib/action_view/flows.rb 39.47 % 76 38 15 23 0.39
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags.rb 100.00 % 44 37 37 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/base.rb 26.47 % 192 102 27 75 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/check_box.rb 30.56 % 66 36 11 25 0.31
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/checkable.rb 55.56 % 18 9 5 4 0.56
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_check_boxes.rb 63.16 % 36 19 12 7 0.63
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_helpers.rb 26.15 % 119 65 17 48 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_radio_buttons.rb 68.75 % 31 16 11 5 0.69
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_select.rb 42.86 % 30 14 6 8 0.43
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/color_field.rb 46.67 % 27 15 7 8 0.47
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_select.rb 35.14 % 74 37 13 24 0.35
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_field.rb 44.44 % 32 18 8 10 0.44
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_local_field.rb 80.00 % 21 10 8 2 0.80
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_select.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/email_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/file_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/grouped_collection_select.rb 37.50 % 31 16 6 10 0.38
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/hidden_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/label.rb 26.67 % 81 45 12 33 0.27
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/month_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/number_field.rb 50.00 % 20 10 5 5 0.50
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/password_field.rb 71.43 % 14 7 5 2 0.71
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/placeholderable.rb 41.67 % 24 12 5 7 0.42
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/radio_button.rb 52.63 % 33 19 10 9 0.53
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/range_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/search_field.rb 35.71 % 27 14 5 9 0.36
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/select.rb 42.11 % 43 19 8 11 0.42
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/tel_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_area.rb 58.33 % 24 12 7 5 0.58
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_field.rb 57.89 % 34 19 11 8 0.58
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_select.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_zone_select.rb 60.00 % 22 10 6 4 0.60
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/translator.rb 47.83 % 44 23 11 12 0.48
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/url_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/week_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/abstract_renderer.rb 45.00 % 55 20 9 11 0.45
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer.rb 20.86 % 552 163 34 129 0.21
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer/collection_caching.rb 36.67 % 57 30 11 19 0.37
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/renderer.rb 47.37 % 56 19 9 10 0.47
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/streaming_template_renderer.rb 25.58 % 105 43 11 32 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/template_renderer.rb 19.61 % 102 51 10 41 0.20
target/rubygems/gems/actionview-5.2.3/lib/action_view/routing_url_for.rb 27.03 % 145 37 10 27 0.27
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/error.rb 34.25 % 141 73 25 48 0.34
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/html.rb 58.82 % 34 17 10 7 0.59
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/text.rb 62.50 % 33 16 10 6 0.63
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter.rb 100.00 % 26 15 15 0 1.33
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/attributes.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/base.rb 100.00 % 20 7 7 0 1.14
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json_api.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/null.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/association.rb 50.00 % 73 34 17 17 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/attribute.rb 100.00 % 27 4 4 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/belongs_to_reflection.rb 80.00 % 13 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/field.rb 59.46 % 92 37 22 15 3.70
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_many_reflection.rb 80.00 % 12 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_one_reflection.rb 100.00 % 9 3 3 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/lazy_association.rb 36.73 % 99 49 18 31 0.37
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/link.rb 100.00 % 23 4 4 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/null.rb 66.67 % 19 9 6 3 0.67
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/reflection.rb 33.33 % 212 51 17 34 0.33
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter.rb 73.33 % 100 45 33 12 1.04
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/attributes.rb 63.64 % 36 22 14 8 0.64
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/base.rb 82.35 % 85 34 28 6 0.91
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json.rb 50.00 % 23 12 6 6 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json_api.rb 27.64 % 535 123 34 89 0.28
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/null.rb 80.00 % 11 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/deserialization.rb 80.00 % 17 5 4 1 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/json_pointer.rb 50.00 % 16 8 4 4 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/model.rb 51.35 % 132 37 19 18 0.51
target/rubygems/gems/activejob-5.2.3/lib/active_job/arguments.rb 35.90 % 165 78 28 50 0.36
target/rubygems/gems/activejob-5.2.3/lib/active_job/base.rb 100.00 % 74 23 23 0 1.00
target/rubygems/gems/activejob-5.2.3/lib/active_job/callbacks.rb 87.50 % 155 24 21 3 0.92
target/rubygems/gems/activejob-5.2.3/lib/active_job/core.rb 49.02 % 158 51 25 26 0.49
target/rubygems/gems/activejob-5.2.3/lib/active_job/enqueuing.rb 45.00 % 59 20 9 11 0.45
target/rubygems/gems/activejob-5.2.3/lib/active_job/exceptions.rb 34.38 % 134 32 11 21 0.34
target/rubygems/gems/activejob-5.2.3/lib/active_job/execution.rb 52.38 % 49 21 11 10 0.52
target/rubygems/gems/activejob-5.2.3/lib/active_job/logging.rb 38.57 % 130 70 27 43 0.39
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapter.rb 75.00 % 60 28 21 7 0.93
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters.rb 100.00 % 139 20 20 0 1.05
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters/async_adapter.rb 59.09 % 116 44 26 18 0.68
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_name.rb 66.67 % 49 21 14 7 0.76
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_priority.rb 60.00 % 43 15 9 6 0.60
target/rubygems/gems/activejob-5.2.3/lib/active_job/test_helper.rb 27.87 % 456 122 34 88 0.28
target/rubygems/gems/activejob-5.2.3/lib/active_job/translation.rb 83.33 % 13 6 5 1 0.83
target/rubygems/gems/activemodel-5.2.3/lib/active_model/model.rb 78.57 % 99 14 11 3 0.79
target/rubygems/gems/activerecord-5.2.3/lib/active_record/association_relation.rb 52.38 % 40 21 11 10 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/alias_tracker.rb 28.21 % 81 39 11 28 0.28
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association.rb 34.92 % 299 126 44 82 0.35
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association_scope.rb 28.72 % 168 94 27 67 0.29
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_association.rb 35.82 % 130 67 24 43 0.36
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_polymorphic_association.rb 55.00 % 40 20 11 9 0.55
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/belongs_to.rb 45.16 % 163 93 42 51 0.66
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/collection_association.rb 71.43 % 82 42 30 12 1.07
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_many.rb 87.50 % 17 8 7 1 0.88
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_one.rb 81.25 % 30 16 13 3 1.19
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/singular_association.rb 100.00 % 42 20 20 0 2.55
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_association.rb 17.98 % 513 228 41 187 0.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_proxy.rb 47.42 % 1131 97 46 51 0.48
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/foreign_association.rb 50.00 % 13 6 3 3 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_association.rb 29.69 % 144 64 19 45 0.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_through_association.rb 23.68 % 227 114 27 87 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_association.rb 21.67 % 120 60 13 47 0.22
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_through_association.rb 30.43 % 45 23 7 16 0.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/join_dependency.rb 23.94 % 262 142 34 108 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader.rb 33.90 % 193 59 20 39 0.34
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/association.rb 33.33 % 131 72 24 48 0.33
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/through_association.rb 17.74 % 107 62 11 51 0.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/singular_association.rb 32.50 % 73 40 13 27 0.33
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/through_association.rb 27.45 % 121 51 14 37 0.27
target/rubygems/gems/activerecord-5.2.3/lib/active_record/coders/json.rb 71.43 % 15 7 5 2 0.71
target/rubygems/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/transaction.rb 78.85 % 283 156 123 33 2.31
target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixture_set/file.rb 39.53 % 82 43 17 26 0.40
target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixtures.rb 44.51 % 1065 328 146 182 1.26
target/rubygems/gems/activerecord-5.2.3/lib/active_record/legacy_yaml_adapter.rb 34.78 % 48 23 8 15 0.74
target/rubygems/gems/activerecord-5.2.3/lib/active_record/null_relation.rb 51.52 % 68 33 17 16 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/railties/controller_runtime.rb 96.67 % 56 30 29 1 1.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation.rb 48.25 % 629 228 110 118 1.94
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches.rb 15.94 % 287 69 11 58 0.16
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches/batch_enumerator.rb 42.86 % 69 21 9 12 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/calculations.rb 44.16 % 417 154 68 86 1.27
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/finder_methods.rb 39.57 % 565 187 74 113 0.60
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/from_clause.rb 92.31 % 26 13 12 1 1.77
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/merger.rb 23.91 % 193 92 22 70 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder.rb 64.63 % 152 82 53 29 1.43
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/array_handler.rb 38.46 % 48 26 10 16 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/association_query_value.rb 50.00 % 46 22 11 11 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/base_handler.rb 88.89 % 19 9 8 1 1.00
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/basic_object_handler.rb 100.00 % 20 10 10 0 1.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb 46.15 % 56 26 12 14 0.46
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/range_handler.rb 47.62 % 42 21 10 11 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/relation_handler.rb 44.44 % 19 9 4 5 0.44
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_attribute.rb 70.83 % 45 24 17 7 2.13
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_methods.rb 54.22 % 1231 391 212 179 3.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/spawn_methods.rb 62.96 % 77 27 17 10 1.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause.rb 41.94 % 186 93 39 54 0.67
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause_factory.rb 88.24 % 34 17 15 2 1.53
target/rubygems/gems/activerecord-5.2.3/lib/active_record/result.rb 85.71 % 149 56 48 8 7.45
target/rubygems/gems/activerecord-5.2.3/lib/active_record/runtime_registry.rb 100.00 % 24 8 8 0 1.25
target/rubygems/gems/activerecord-5.2.3/lib/active_record/schema_migration.rb 65.38 % 56 26 17 9 0.73
target/rubygems/gems/activerecord-5.2.3/lib/active_record/statement_cache.rb 83.02 % 121 53 44 9 1.57
target/rubygems/gems/activerecord-5.2.3/lib/active_record/table_metadata.rb 67.44 % 82 43 29 14 1.42
target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/base_controller.rb 75.00 % 10 4 3 1 0.75
target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/blobs_controller.rb 60.00 % 14 5 3 2 0.60
target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/direct_uploads_controller.rb 55.56 % 23 9 5 4 0.56
target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/disk_controller.rb 33.33 % 63 30 10 20 0.33
target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/representations_controller.rb 60.00 % 14 5 3 2 0.60
target/rubygems/gems/activestorage-5.2.3/app/controllers/concerns/active_storage/set_blob.rb 75.00 % 16 8 6 2 0.88
target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/analyze_job.rb 66.67 % 8 3 2 1 0.67
target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/base_job.rb 100.00 % 5 2 2 0 1.00
target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/purge_job.rb 75.00 % 10 4 3 1 0.75
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/attachment.rb 66.67 % 39 18 12 6 0.67
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob.rb 48.86 % 236 88 43 45 0.49
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/analyzable.rb 60.00 % 57 15 9 6 0.60
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/identifiable.rb 43.75 % 31 16 7 9 0.44
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/representable.rb 43.48 % 93 23 10 13 0.43
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/current.rb 100.00 % 5 2 2 0 1.00
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/filename.rb 59.26 % 83 27 16 11 0.59
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/filename/parameters.rb 61.11 % 36 18 11 7 0.61
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/preview.rb 52.00 % 89 25 13 12 0.52
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/variant.rb 46.67 % 132 45 21 24 0.47
target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/variation.rb 38.71 % 89 31 12 19 0.39
target/rubygems/gems/activestorage-5.2.3/config/routes.rb 70.59 % 31 17 12 5 0.71
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/analyzer/null_analyzer.rb 66.67 % 13 6 4 2 0.67
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached.rb 63.16 % 40 19 12 7 0.63
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/macros.rb 43.75 % 110 32 14 18 0.44
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/many.rb 50.00 % 59 14 7 7 0.50
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/one.rb 40.63 % 82 32 13 19 0.41
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/log_subscriber.rb 56.67 % 58 30 17 13 0.57
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service.rb 66.67 % 138 39 26 13 0.67
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/configurator.rb 94.12 % 32 17 16 1 0.94
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/disk_service.rb 36.23 % 154 69 25 44 0.36
target/rubygems/gems/activesupport-5.2.3/lib/active_support/all.rb 100.00 % 5 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb 53.33 % 105 30 16 14 0.63
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/file_store.rb 32.69 % 196 104 34 70 0.33
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/memory_store.rb 32.97 % 169 91 30 61 0.33
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache.rb 44.66 % 194 103 46 57 0.60
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache_middleware.rb 95.83 % 45 24 23 1 1.54
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext.rb 100.00 % 5 2 2 0 12.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal.rb 100.00 % 3 1 1 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/digest/uuid.rb 44.00 % 53 25 11 14 0.44
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file.rb 100.00 % 3 1 1 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file/atomic.rb 17.39 % 70 23 4 19 0.17
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb 100.00 % 11 9 9 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer.rb 100.00 % 5 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/inflections.rb 66.67 % 31 6 4 2 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb 66.67 % 12 3 2 1 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb 50.00 % 13 4 2 2 0.50
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/concern.rb 80.00 % 14 5 4 1 0.80
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/marshal.rb 36.36 % 24 11 4 7 0.36
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb 47.83 % 140 23 11 12 9.52
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb 11.11 % 28 9 1 8 0.11
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb 50.00 % 25 8 4 4 0.50
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string.rb 100.00 % 15 13 13 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string/exclude.rb 66.67 % 13 3 2 1 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb 62.75 % 195 51 32 19 0.84
target/rubygems/gems/activesupport-5.2.3/lib/active_support/digest.rb 80.00 % 20 10 8 2 0.80
target/rubygems/gems/activesupport-5.2.3/lib/active_support/gzip.rb 52.94 % 38 17 9 8 0.53
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_converter.rb 52.17 % 184 46 24 22 0.52
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_currency_converter.rb 40.00 % 46 25 10 15 0.40
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_delimited_converter.rb 60.00 % 29 15 9 6 0.60
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_converter.rb 35.14 % 68 37 13 24 0.35
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_size_converter.rb 43.75 % 59 32 14 18 0.44
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_percentage_converter.rb 71.43 % 14 7 5 2 0.71
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_phone_converter.rb 39.39 % 58 33 13 20 0.39
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_rounded_converter.rb 29.03 % 54 31 9 22 0.29
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/rounding_helper.rb 37.84 % 66 37 14 23 0.38
target/rubygems/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb 58.82 % 50 17 10 7 0.59
target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/autorun.rb 100.00 % 7 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/stream.rb 25.93 % 44 27 7 20 0.26
target/rubygems/gems/case_transform-0.2/lib/case_transform.rb 34.88 % 88 43 15 28 0.35
target/rubygems/gems/case_transform-0.2/lib/case_transform/version.rb 100.00 % 4 2 2 0 1.00
target/rubygems/gems/globalid-0.4.2/lib/global_id/identification.rb 71.43 % 25 14 10 4 0.71
target/rubygems/gems/globalid-0.4.2/lib/global_id/locator.rb 50.00 % 187 64 32 32 0.50
target/rubygems/gems/globalid-0.4.2/lib/global_id/signed_global_id.rb 53.33 % 85 45 24 21 0.53
target/rubygems/gems/globalid-0.4.2/lib/global_id/verifier.rb 77.78 % 15 9 7 2 0.78
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend.rb 100.00 % 21 17 17 0 1.00
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/base.rb 25.56 % 284 133 34 99 0.29
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/simple.rb 43.75 % 111 48 21 27 0.60
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/transliterator.rb 42.11 % 108 38 16 22 0.42
target/rubygems/gems/i18n-1.6.0/lib/i18n/core_ext/hash.rb 44.00 % 47 25 11 14 0.44
target/rubygems/gems/jbuilder-2.9.1/lib/jbuilder/dependency_tracker.rb 75.00 % 61 24 18 6 0.75
target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres.rb 66.67 % 53 33 22 11 0.70
target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres/version.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail.rb 89.58 % 85 48 43 5 4.29
target/rubygems/gems/mail-2.7.1/lib/mail/attachments_list.rb 14.04 % 110 57 8 49 0.14
target/rubygems/gems/mail-2.7.1/lib/mail/body.rb 29.27 % 328 123 36 87 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/check_delivery_params.rb 31.03 % 60 29 9 20 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/configuration.rb 29.41 % 78 34 10 24 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/constants.rb 100.00 % 57 46 46 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/smtp.rb 9.09 % 28 11 1 10 0.09
target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/string.rb 42.86 % 17 7 3 4 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/elements.rb 100.00 % 15 13 13 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/elements/address.rb 30.30 % 258 99 30 69 0.30
target/rubygems/gems/mail-2.7.1/lib/mail/elements/address_list.rb 60.00 % 34 10 6 4 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_disposition_element.rb 63.64 % 20 11 7 4 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_location_element.rb 75.00 % 17 8 6 2 0.75
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_transfer_encoding_element.rb 83.33 % 13 6 5 1 0.83
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_type_element.rb 58.33 % 21 12 7 5 0.58
target/rubygems/gems/mail-2.7.1/lib/mail/elements/date_time_element.rb 62.50 % 15 8 5 3 0.63
target/rubygems/gems/mail-2.7.1/lib/mail/elements/envelope_from_element.rb 53.33 % 33 15 8 7 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/elements/message_ids_element.rb 72.73 % 22 11 8 3 0.73
target/rubygems/gems/mail-2.7.1/lib/mail/elements/mime_version_element.rb 62.50 % 15 8 5 3 0.63
target/rubygems/gems/mail-2.7.1/lib/mail/elements/phrase_list.rb 85.71 % 14 7 6 1 0.86
target/rubygems/gems/mail-2.7.1/lib/mail/elements/received_element.rb 66.67 % 21 12 8 4 0.67
target/rubygems/gems/mail-2.7.1/lib/mail/encodings.rb 26.19 % 343 126 33 93 0.37
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/7bit.rb 81.82 % 22 11 9 2 0.82
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/8bit.rb 88.89 % 18 9 8 1 0.89
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/base64.rb 70.59 % 38 17 12 5 0.71
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/binary.rb 100.00 % 13 7 7 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/identity.rb 70.00 % 24 10 7 3 0.70
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/quoted_printable.rb 65.00 % 45 20 13 7 0.65
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/transfer_encoding.rb 37.14 % 77 35 13 22 0.37
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/unix_to_unix.rb 81.82 % 20 11 9 2 0.82
target/rubygems/gems/mail-2.7.1/lib/mail/envelope.rb 60.00 % 31 10 6 4 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/field.rb 43.86 % 299 114 50 64 0.68
target/rubygems/gems/mail-2.7.1/lib/mail/field_list.rb 33.33 % 34 12 4 8 0.33
target/rubygems/gems/mail-2.7.1/lib/mail/fields.rb 100.00 % 36 33 33 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/fields/bcc_field.rb 55.00 % 68 20 11 9 0.55
target/rubygems/gems/mail-2.7.1/lib/mail/fields/cc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/comments_field.rb 55.56 % 42 9 5 4 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/address_container.rb 57.14 % 17 7 4 3 0.57
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_address.rb 31.71 % 161 82 26 56 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_date.rb 52.94 % 36 17 9 8 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_field.rb 51.85 % 52 27 14 13 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_message_id.rb 45.83 % 49 24 11 13 0.46
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/parameter_hash.rb 20.69 % 59 29 6 23 0.21
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_description_field.rb 55.56 % 20 9 5 4 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_disposition_field.rb 34.21 % 71 38 13 25 0.34
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_id_field.rb 45.16 % 63 31 14 17 0.45
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_location_field.rb 50.00 % 43 20 10 10 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_transfer_encoding_field.rb 45.45 % 45 22 10 12 0.45
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_type_field.rb 26.26 % 197 99 26 73 0.26
target/rubygems/gems/mail-2.7.1/lib/mail/fields/date_field.rb 50.00 % 57 18 9 9 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/from_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/in_reply_to_field.rb 56.25 % 57 16 9 7 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/keywords_field.rb 52.38 % 44 21 11 10 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/fields/message_id_field.rb 50.00 % 83 28 14 14 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/mime_version_field.rb 46.15 % 54 26 12 14 0.46
target/rubygems/gems/mail-2.7.1/lib/mail/fields/optional_field.rb 83.33 % 17 6 5 1 0.83
target/rubygems/gems/mail-2.7.1/lib/mail/fields/received_field.rb 42.86 % 76 28 12 16 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/fields/references_field.rb 56.25 % 57 16 9 7 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/reply_to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_bcc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_cc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_date_field.rb 52.94 % 35 17 9 8 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_from_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_message_id_field.rb 58.82 % 35 17 10 7 0.59
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_sender_field.rb 61.11 % 62 18 11 7 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/return_path_field.rb 57.89 % 65 19 11 8 0.58
target/rubygems/gems/mail-2.7.1/lib/mail/fields/sender_field.rb 60.00 % 67 20 12 8 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/fields/structured_field.rb 55.56 % 52 18 10 8 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/subject_field.rb 71.43 % 17 7 5 2 0.71
target/rubygems/gems/mail-2.7.1/lib/mail/fields/to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/unstructured_field.rb 21.65 % 222 97 21 76 0.22
target/rubygems/gems/mail-2.7.1/lib/mail/header.rb 35.48 % 278 93 33 60 0.35
target/rubygems/gems/mail-2.7.1/lib/mail/indifferent_hash.rb 53.57 % 147 56 30 26 0.54
target/rubygems/gems/mail-2.7.1/lib/mail/mail.rb 51.67 % 262 60 31 29 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/matchers/attachment_matchers.rb 66.67 % 29 15 10 5 0.67
target/rubygems/gems/mail-2.7.1/lib/mail/matchers/has_sent_mail.rb 32.20 % 201 118 38 80 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/message.rb 30.83 % 2170 639 197 442 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte.rb 61.11 % 92 18 11 7 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/chars.rb 24.85 % 476 165 41 124 0.33
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/unicode.rb 27.23 % 405 202 55 147 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/utils.rb 36.00 % 61 25 9 16 0.36
target/rubygems/gems/mail-2.7.1/lib/mail/network.rb 100.00 % 16 12 12 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/exim.rb 80.00 % 49 5 4 1 0.80
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/file_delivery.rb 50.00 % 42 16 8 8 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/logger_delivery.rb 47.62 % 37 21 10 11 0.48
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/sendmail.rb 44.00 % 95 25 11 14 0.44
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb 32.35 % 149 34 11 23 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp_connection.rb 53.33 % 66 15 8 7 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/test_mailer.rb 69.23 % 42 13 9 4 1.08
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/base.rb 30.00 % 64 20 6 14 0.30
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/imap.rb 14.86 % 187 74 11 63 0.15
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/pop3.rb 21.57 % 143 51 11 40 0.22
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/test_retriever.rb 24.00 % 44 25 6 19 0.24
target/rubygems/gems/mail-2.7.1/lib/mail/parser_tools.rb 57.14 % 15 7 4 3 0.57
target/rubygems/gems/mail-2.7.1/lib/mail/parsers.rb 100.00 % 19 14 14 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/address_lists_parser.rb 6.05 % 33236 843 51 792 0.06
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_disposition_parser.rb 20.00 % 895 250 50 200 0.20
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_location_parser.rb 25.64 % 816 195 50 145 0.26
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_transfer_encoding_parser.rb 30.67 % 516 163 50 113 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_type_parser.rb 18.94 % 1042 264 50 214 0.19
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/date_time_parser.rb 26.74 % 885 187 50 137 0.27
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/envelope_from_parser.rb 19.92 % 3581 251 50 201 0.20
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/message_ids_parser.rb 22.83 % 2854 219 50 169 0.23
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/mime_version_parser.rb 27.93 % 507 179 50 129 0.28
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/phrase_lists_parser.rb 28.90 % 878 173 50 123 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/received_parser.rb 6.89 % 8776 726 50 676 0.07
target/rubygems/gems/mail-2.7.1/lib/mail/part.rb 41.82 % 123 55 23 32 0.42
target/rubygems/gems/mail-2.7.1/lib/mail/parts_list.rb 43.24 % 74 37 16 21 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/utilities.rb 36.94 % 324 111 41 70 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/version.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/mail-2.7.1/lib/mail/version_specific/ruby_1_9.rb 26.67 % 278 135 36 99 0.27
target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime.rb 37.50 % 166 96 36 60 0.38
target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime/version.rb 100.00 % 3 2 2 0 1.00
target/rubygems/gems/minitest-5.11.3/lib/minitest/pride_plugin.rb 37.93 % 142 58 22 36 0.38
target/rubygems/gems/rack-2.0.7/lib/rack/conditional_get.rb 57.14 % 79 35 20 15 0.66
target/rubygems/gems/rack-2.0.7/lib/rack/etag.rb 97.37 % 74 38 37 1 1.32
target/rubygems/gems/rack-2.0.7/lib/rack/file.rb 33.71 % 176 89 30 59 0.34
target/rubygems/gems/rack-2.0.7/lib/rack/head.rb 81.82 % 25 11 9 2 1.45
target/rubygems/gems/rack-2.0.7/lib/rack/method_override.rb 82.76 % 50 29 24 5 1.28
target/rubygems/gems/rack-2.0.7/lib/rack/mime.rb 63.64 % 677 11 7 4 0.64
target/rubygems/gems/rack-2.0.7/lib/rack/multipart.rb 95.56 % 63 45 43 2 1.16
target/rubygems/gems/rack-2.0.7/lib/rack/multipart/parser.rb 27.32 % 366 205 56 149 0.30
target/rubygems/gems/rack-2.0.7/lib/rack/runtime.rb 100.00 % 32 16 16 0 1.75
target/rubygems/gems/rack-2.0.7/lib/rack/sendfile.rb 40.54 % 158 37 15 22 0.57
target/rubygems/gems/rack-2.0.7/lib/rack/session/cookie.rb 42.86 % 195 84 36 48 0.43
target/rubygems/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb 100.00 % 22 11 11 0 1.91
target/rubygems/gems/railties-5.2.3/lib/minitest/rails_plugin.rb 86.67 % 63 30 26 4 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/application/bootstrap.rb 80.43 % 89 46 37 9 0.80
target/rubygems/gems/railties-5.2.3/lib/rails/application/default_middleware_stack.rb 77.19 % 107 57 44 13 0.77
target/rubygems/gems/railties-5.2.3/lib/rails/application/finisher.rb 67.06 % 196 85 57 28 0.68
target/rubygems/gems/railties-5.2.3/lib/rails/application/routes_reloader.rb 100.00 % 55 31 31 0 1.19
target/rubygems/gems/railties-5.2.3/lib/rails/backtrace_cleaner.rb 100.00 % 34 23 23 0 1.22
target/rubygems/gems/railties-5.2.3/lib/rails/generators/test_case.rb 100.00 % 37 13 13 0 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/assertions.rb 40.54 % 127 37 15 22 0.41
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/behaviour.rb 66.67 % 111 45 30 15 0.67
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/setup_and_teardown.rb 54.55 % 20 11 6 5 0.55
target/rubygems/gems/railties-5.2.3/lib/rails/rack/logger.rb 84.09 % 80 44 37 7 1.95
target/rubygems/gems/railties-5.2.3/lib/rails/test_help.rb 84.62 % 48 26 22 4 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/test_unit/reporter.rb 65.63 % 110 64 42 22 1.66
target/rubygems/gems/sprockets-3.7.2/lib/sprockets/autoload/sass.rb 100.00 % 7 4 4 0 1.00
target/rubygems/gems/sprockets-3.7.2/lib/sprockets/cache/file_store.rb 31.65 % 186 79 25 54 0.32
target/rubygems/gems/thor-0.20.3/lib/thor/shell/basic.rb 20.83 % 482 216 45 171 0.21
target/rubygems/gems/tzinfo-data-1.2019.2/lib/tzinfo/data/definitions/Etc/UTC.rb 100.00 % 21 8 8 0 1.00

Channels ( 100.0% covered at 1.0 hits/line )

2 files in total.
4 relevant lines, 4 lines covered and 0 lines missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
app/channels/application_cable/channel.rb 100.00 % 4 2 2 0 1.00
app/channels/application_cable/connection.rb 100.00 % 4 2 2 0 1.00

Mailers ( 100.0% covered at 1.0 hits/line )

1 files in total.
3 relevant lines, 3 lines covered and 0 lines missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
app/mailers/application_mailer.rb 100.00 % 4 3 3 0 1.00

Helpers ( 100.0% covered at 1.0 hits/line )

1 files in total.
1 relevant lines, 1 lines covered and 0 lines missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
app/helpers/application_helper.rb 100.00 % 2 1 1 0 1.00

Jobs ( 80.0% covered at 0.8 hits/line )

4 files in total.
10 relevant lines, 8 lines covered and 2 lines missed. ( 80.0% )

Libraries ( 42.02% covered at 0.95 hits/line )

410 files in total.
20204 relevant lines, 8490 lines covered and 11714 lines missed. ( 42.02% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
lib/logging/logging.rb 57.14 % 176 77 44 33 0.90
lib/props/prop_loader.rb 83.72 % 71 43 36 7 4.65
lib/utilities.rb 0.00 % 116 82 0 82 0.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel.rb 100.00 % 16 10 10 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/base.rb 41.41 % 305 99 41 58 1.02
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/broadcasting.rb 64.29 % 31 14 9 5 0.64
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/callbacks.rb 90.00 % 37 20 18 2 0.95
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/naming.rb 87.50 % 25 8 7 1 0.88
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/periodic_timers.rb 46.88 % 78 32 15 17 0.47
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/streams.rb 39.13 % 176 46 18 28 0.39
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection.rb 100.00 % 21 15 15 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/authorization.rb 71.43 % 15 7 5 2 0.71
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/base.rb 39.05 % 260 105 41 64 0.39
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/identification.rb 57.14 % 47 21 12 9 0.57
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/internal_channel.rb 37.50 % 45 24 9 15 0.38
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server.rb 100.00 % 17 10 10 0 1.00
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/base.rb 61.11 % 89 36 22 14 0.61
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/broadcasting.rb 55.56 % 54 18 10 8 0.56
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/configuration.rb 58.33 % 56 24 14 10 0.58
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/connections.rb 60.00 % 36 15 9 6 0.60
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker.rb 54.05 % 77 37 20 17 0.54
target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker/active_record_connection_management.rb 90.00 % 21 10 9 1 0.90
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/base.rb 43.75 % 991 192 84 108 0.45
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/collector.rb 52.38 % 32 21 11 10 0.52
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_job.rb 60.00 % 36 15 9 6 0.60
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_methods.rb 67.65 % 82 34 23 11 0.97
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/inline_preview_interceptor.rb 52.00 % 59 25 13 12 0.52
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/log_subscriber.rb 42.11 % 41 19 8 11 0.42
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/mail_helper.rb 30.43 % 72 23 7 16 0.30
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/message_delivery.rb 42.86 % 144 35 15 20 0.43
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/parameterized.rb 54.29 % 154 35 19 16 0.54
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/preview.rb 55.77 % 126 52 29 23 0.56
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/rescuable.rb 64.29 % 29 14 9 5 0.64
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_case.rb 59.42 % 123 69 41 28 0.74
target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_helper.rb 37.50 % 144 24 9 15 0.38
target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api.rb 80.00 % 149 15 12 3 1.67
target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api/api_rendering.rb 75.00 % 16 8 6 2 0.75
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb 88.89 % 36 18 16 2 1.56
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb 33.33 % 205 105 35 70 0.41
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/exception_wrapper.rb 37.10 % 147 62 23 39 0.37
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/executor.rb 100.00 % 21 11 11 0 2.18
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/public_exceptions.rb 40.00 % 57 25 10 15 0.40
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/remote_ip.rb 83.67 % 183 49 41 8 2.02
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/request_id.rb 94.44 % 43 18 17 1 1.78
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/abstract_store.rb 76.47 % 92 51 39 12 1.04
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cookie_store.rb 85.37 % 118 41 35 6 1.32
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/show_exceptions.rb 50.00 % 62 28 14 14 0.64
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/static.rb 58.33 % 130 60 35 25 0.80
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/session.rb 73.91 % 234 115 85 30 1.70
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/utils.rb 63.89 % 78 36 23 13 2.92
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/inspector.rb 37.27 % 225 110 41 69 0.37
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb 68.46 % 2267 780 534 246 8.47
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/redirection.rb 40.74 % 201 81 33 48 0.41
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/integration.rb 86.14 % 652 202 174 28 1.99
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/request_encoder.rb 83.33 % 55 30 25 5 1.30
target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/test_response.rb 63.16 % 53 19 12 7 0.95
target/rubygems/gems/actionview-5.2.3/lib/action_view/buffers.rb 56.67 % 52 30 17 13 0.57
target/rubygems/gems/actionview-5.2.3/lib/action_view/dependency_tracker.rb 51.32 % 175 76 39 37 0.55
target/rubygems/gems/actionview-5.2.3/lib/action_view/digestor.rb 40.85 % 134 71 29 42 0.41
target/rubygems/gems/actionview-5.2.3/lib/action_view/flows.rb 39.47 % 76 38 15 23 0.39
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags.rb 100.00 % 44 37 37 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/base.rb 26.47 % 192 102 27 75 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/check_box.rb 30.56 % 66 36 11 25 0.31
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/checkable.rb 55.56 % 18 9 5 4 0.56
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_check_boxes.rb 63.16 % 36 19 12 7 0.63
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_helpers.rb 26.15 % 119 65 17 48 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_radio_buttons.rb 68.75 % 31 16 11 5 0.69
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_select.rb 42.86 % 30 14 6 8 0.43
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/color_field.rb 46.67 % 27 15 7 8 0.47
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_select.rb 35.14 % 74 37 13 24 0.35
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_field.rb 44.44 % 32 18 8 10 0.44
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_local_field.rb 80.00 % 21 10 8 2 0.80
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_select.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/email_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/file_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/grouped_collection_select.rb 37.50 % 31 16 6 10 0.38
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/hidden_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/label.rb 26.67 % 81 45 12 33 0.27
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/month_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/number_field.rb 50.00 % 20 10 5 5 0.50
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/password_field.rb 71.43 % 14 7 5 2 0.71
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/placeholderable.rb 41.67 % 24 12 5 7 0.42
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/radio_button.rb 52.63 % 33 19 10 9 0.53
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/range_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/search_field.rb 35.71 % 27 14 5 9 0.36
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/select.rb 42.11 % 43 19 8 11 0.42
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/tel_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_area.rb 58.33 % 24 12 7 5 0.58
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_field.rb 57.89 % 34 19 11 8 0.58
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_select.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_zone_select.rb 60.00 % 22 10 6 4 0.60
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/translator.rb 47.83 % 44 23 11 12 0.48
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/url_field.rb 100.00 % 10 4 4 0 1.00
target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/week_field.rb 85.71 % 15 7 6 1 0.86
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/abstract_renderer.rb 45.00 % 55 20 9 11 0.45
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer.rb 20.86 % 552 163 34 129 0.21
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer/collection_caching.rb 36.67 % 57 30 11 19 0.37
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/renderer.rb 47.37 % 56 19 9 10 0.47
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/streaming_template_renderer.rb 25.58 % 105 43 11 32 0.26
target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/template_renderer.rb 19.61 % 102 51 10 41 0.20
target/rubygems/gems/actionview-5.2.3/lib/action_view/routing_url_for.rb 27.03 % 145 37 10 27 0.27
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/error.rb 34.25 % 141 73 25 48 0.34
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/html.rb 58.82 % 34 17 10 7 0.59
target/rubygems/gems/actionview-5.2.3/lib/action_view/template/text.rb 62.50 % 33 16 10 6 0.63
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter.rb 100.00 % 26 15 15 0 1.33
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/attributes.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/base.rb 100.00 % 20 7 7 0 1.14
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json_api.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/null.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/association.rb 50.00 % 73 34 17 17 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/attribute.rb 100.00 % 27 4 4 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/belongs_to_reflection.rb 80.00 % 13 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/field.rb 59.46 % 92 37 22 15 3.70
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_many_reflection.rb 80.00 % 12 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_one_reflection.rb 100.00 % 9 3 3 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/lazy_association.rb 36.73 % 99 49 18 31 0.37
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/link.rb 100.00 % 23 4 4 0 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/null.rb 66.67 % 19 9 6 3 0.67
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/reflection.rb 33.33 % 212 51 17 34 0.33
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter.rb 73.33 % 100 45 33 12 1.04
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/attributes.rb 63.64 % 36 22 14 8 0.64
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/base.rb 82.35 % 85 34 28 6 0.91
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json.rb 50.00 % 23 12 6 6 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json_api.rb 27.64 % 535 123 34 89 0.28
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/null.rb 80.00 % 11 5 4 1 0.80
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/deserialization.rb 80.00 % 17 5 4 1 1.00
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/json_pointer.rb 50.00 % 16 8 4 4 0.50
target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/model.rb 51.35 % 132 37 19 18 0.51
target/rubygems/gems/activejob-5.2.3/lib/active_job/arguments.rb 35.90 % 165 78 28 50 0.36
target/rubygems/gems/activejob-5.2.3/lib/active_job/base.rb 100.00 % 74 23 23 0 1.00
target/rubygems/gems/activejob-5.2.3/lib/active_job/callbacks.rb 87.50 % 155 24 21 3 0.92
target/rubygems/gems/activejob-5.2.3/lib/active_job/core.rb 49.02 % 158 51 25 26 0.49
target/rubygems/gems/activejob-5.2.3/lib/active_job/enqueuing.rb 45.00 % 59 20 9 11 0.45
target/rubygems/gems/activejob-5.2.3/lib/active_job/exceptions.rb 34.38 % 134 32 11 21 0.34
target/rubygems/gems/activejob-5.2.3/lib/active_job/execution.rb 52.38 % 49 21 11 10 0.52
target/rubygems/gems/activejob-5.2.3/lib/active_job/logging.rb 38.57 % 130 70 27 43 0.39
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapter.rb 75.00 % 60 28 21 7 0.93
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters.rb 100.00 % 139 20 20 0 1.05
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters/async_adapter.rb 59.09 % 116 44 26 18 0.68
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_name.rb 66.67 % 49 21 14 7 0.76
target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_priority.rb 60.00 % 43 15 9 6 0.60
target/rubygems/gems/activejob-5.2.3/lib/active_job/test_helper.rb 27.87 % 456 122 34 88 0.28
target/rubygems/gems/activejob-5.2.3/lib/active_job/translation.rb 83.33 % 13 6 5 1 0.83
target/rubygems/gems/activemodel-5.2.3/lib/active_model/model.rb 78.57 % 99 14 11 3 0.79
target/rubygems/gems/activerecord-5.2.3/lib/active_record/association_relation.rb 52.38 % 40 21 11 10 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/alias_tracker.rb 28.21 % 81 39 11 28 0.28
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association.rb 34.92 % 299 126 44 82 0.35
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association_scope.rb 28.72 % 168 94 27 67 0.29
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_association.rb 35.82 % 130 67 24 43 0.36
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_polymorphic_association.rb 55.00 % 40 20 11 9 0.55
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/belongs_to.rb 45.16 % 163 93 42 51 0.66
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/collection_association.rb 71.43 % 82 42 30 12 1.07
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_many.rb 87.50 % 17 8 7 1 0.88
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_one.rb 81.25 % 30 16 13 3 1.19
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/singular_association.rb 100.00 % 42 20 20 0 2.55
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_association.rb 17.98 % 513 228 41 187 0.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_proxy.rb 47.42 % 1131 97 46 51 0.48
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/foreign_association.rb 50.00 % 13 6 3 3 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_association.rb 29.69 % 144 64 19 45 0.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_through_association.rb 23.68 % 227 114 27 87 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_association.rb 21.67 % 120 60 13 47 0.22
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_through_association.rb 30.43 % 45 23 7 16 0.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/join_dependency.rb 23.94 % 262 142 34 108 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader.rb 33.90 % 193 59 20 39 0.34
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/association.rb 33.33 % 131 72 24 48 0.33
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/through_association.rb 17.74 % 107 62 11 51 0.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/singular_association.rb 32.50 % 73 40 13 27 0.33
target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/through_association.rb 27.45 % 121 51 14 37 0.27
target/rubygems/gems/activerecord-5.2.3/lib/active_record/coders/json.rb 71.43 % 15 7 5 2 0.71
target/rubygems/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/transaction.rb 78.85 % 283 156 123 33 2.31
target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixture_set/file.rb 39.53 % 82 43 17 26 0.40
target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixtures.rb 44.51 % 1065 328 146 182 1.26
target/rubygems/gems/activerecord-5.2.3/lib/active_record/legacy_yaml_adapter.rb 34.78 % 48 23 8 15 0.74
target/rubygems/gems/activerecord-5.2.3/lib/active_record/null_relation.rb 51.52 % 68 33 17 16 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/railties/controller_runtime.rb 96.67 % 56 30 29 1 1.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation.rb 48.25 % 629 228 110 118 1.94
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches.rb 15.94 % 287 69 11 58 0.16
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches/batch_enumerator.rb 42.86 % 69 21 9 12 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/calculations.rb 44.16 % 417 154 68 86 1.27
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/finder_methods.rb 39.57 % 565 187 74 113 0.60
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/from_clause.rb 92.31 % 26 13 12 1 1.77
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/merger.rb 23.91 % 193 92 22 70 0.24
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder.rb 64.63 % 152 82 53 29 1.43
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/array_handler.rb 38.46 % 48 26 10 16 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/association_query_value.rb 50.00 % 46 22 11 11 0.50
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/base_handler.rb 88.89 % 19 9 8 1 1.00
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/basic_object_handler.rb 100.00 % 20 10 10 0 1.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb 46.15 % 56 26 12 14 0.46
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/range_handler.rb 47.62 % 42 21 10 11 0.52
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/relation_handler.rb 44.44 % 19 9 4 5 0.44
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_attribute.rb 70.83 % 45 24 17 7 2.13
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_methods.rb 54.22 % 1231 391 212 179 3.18
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/spawn_methods.rb 62.96 % 77 27 17 10 1.30
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause.rb 41.94 % 186 93 39 54 0.67
target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause_factory.rb 88.24 % 34 17 15 2 1.53
target/rubygems/gems/activerecord-5.2.3/lib/active_record/result.rb 85.71 % 149 56 48 8 7.45
target/rubygems/gems/activerecord-5.2.3/lib/active_record/runtime_registry.rb 100.00 % 24 8 8 0 1.25
target/rubygems/gems/activerecord-5.2.3/lib/active_record/schema_migration.rb 65.38 % 56 26 17 9 0.73
target/rubygems/gems/activerecord-5.2.3/lib/active_record/statement_cache.rb 83.02 % 121 53 44 9 1.57
target/rubygems/gems/activerecord-5.2.3/lib/active_record/table_metadata.rb 67.44 % 82 43 29 14 1.42
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/analyzer/null_analyzer.rb 66.67 % 13 6 4 2 0.67
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached.rb 63.16 % 40 19 12 7 0.63
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/macros.rb 43.75 % 110 32 14 18 0.44
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/many.rb 50.00 % 59 14 7 7 0.50
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/one.rb 40.63 % 82 32 13 19 0.41
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/log_subscriber.rb 56.67 % 58 30 17 13 0.57
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service.rb 66.67 % 138 39 26 13 0.67
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/configurator.rb 94.12 % 32 17 16 1 0.94
target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/disk_service.rb 36.23 % 154 69 25 44 0.36
target/rubygems/gems/activesupport-5.2.3/lib/active_support/all.rb 100.00 % 5 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb 53.33 % 105 30 16 14 0.63
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/file_store.rb 32.69 % 196 104 34 70 0.33
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/memory_store.rb 32.97 % 169 91 30 61 0.33
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache.rb 44.66 % 194 103 46 57 0.60
target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache_middleware.rb 95.83 % 45 24 23 1 1.54
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext.rb 100.00 % 5 2 2 0 12.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal.rb 100.00 % 3 1 1 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/digest/uuid.rb 44.00 % 53 25 11 14 0.44
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file.rb 100.00 % 3 1 1 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file/atomic.rb 17.39 % 70 23 4 19 0.17
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb 100.00 % 11 9 9 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer.rb 100.00 % 5 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/inflections.rb 66.67 % 31 6 4 2 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb 66.67 % 12 3 2 1 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb 50.00 % 13 4 2 2 0.50
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/concern.rb 80.00 % 14 5 4 1 0.80
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/marshal.rb 36.36 % 24 11 4 7 0.36
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb 47.83 % 140 23 11 12 9.52
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb 11.11 % 28 9 1 8 0.11
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb 50.00 % 25 8 4 4 0.50
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string.rb 100.00 % 15 13 13 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string/exclude.rb 66.67 % 13 3 2 1 0.67
target/rubygems/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb 62.75 % 195 51 32 19 0.84
target/rubygems/gems/activesupport-5.2.3/lib/active_support/digest.rb 80.00 % 20 10 8 2 0.80
target/rubygems/gems/activesupport-5.2.3/lib/active_support/gzip.rb 52.94 % 38 17 9 8 0.53
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_converter.rb 52.17 % 184 46 24 22 0.52
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_currency_converter.rb 40.00 % 46 25 10 15 0.40
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_delimited_converter.rb 60.00 % 29 15 9 6 0.60
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_converter.rb 35.14 % 68 37 13 24 0.35
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_size_converter.rb 43.75 % 59 32 14 18 0.44
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_percentage_converter.rb 71.43 % 14 7 5 2 0.71
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_phone_converter.rb 39.39 % 58 33 13 20 0.39
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_rounded_converter.rb 29.03 % 54 31 9 22 0.29
target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/rounding_helper.rb 37.84 % 66 37 14 23 0.38
target/rubygems/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb 58.82 % 50 17 10 7 0.59
target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/autorun.rb 100.00 % 7 3 3 0 1.00
target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/stream.rb 25.93 % 44 27 7 20 0.26
target/rubygems/gems/case_transform-0.2/lib/case_transform.rb 34.88 % 88 43 15 28 0.35
target/rubygems/gems/case_transform-0.2/lib/case_transform/version.rb 100.00 % 4 2 2 0 1.00
target/rubygems/gems/globalid-0.4.2/lib/global_id/identification.rb 71.43 % 25 14 10 4 0.71
target/rubygems/gems/globalid-0.4.2/lib/global_id/locator.rb 50.00 % 187 64 32 32 0.50
target/rubygems/gems/globalid-0.4.2/lib/global_id/signed_global_id.rb 53.33 % 85 45 24 21 0.53
target/rubygems/gems/globalid-0.4.2/lib/global_id/verifier.rb 77.78 % 15 9 7 2 0.78
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend.rb 100.00 % 21 17 17 0 1.00
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/base.rb 25.56 % 284 133 34 99 0.29
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/simple.rb 43.75 % 111 48 21 27 0.60
target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/transliterator.rb 42.11 % 108 38 16 22 0.42
target/rubygems/gems/i18n-1.6.0/lib/i18n/core_ext/hash.rb 44.00 % 47 25 11 14 0.44
target/rubygems/gems/jbuilder-2.9.1/lib/jbuilder/dependency_tracker.rb 75.00 % 61 24 18 6 0.75
target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres.rb 66.67 % 53 33 22 11 0.70
target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres/version.rb 100.00 % 6 4 4 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail.rb 89.58 % 85 48 43 5 4.29
target/rubygems/gems/mail-2.7.1/lib/mail/attachments_list.rb 14.04 % 110 57 8 49 0.14
target/rubygems/gems/mail-2.7.1/lib/mail/body.rb 29.27 % 328 123 36 87 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/check_delivery_params.rb 31.03 % 60 29 9 20 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/configuration.rb 29.41 % 78 34 10 24 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/constants.rb 100.00 % 57 46 46 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/smtp.rb 9.09 % 28 11 1 10 0.09
target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/string.rb 42.86 % 17 7 3 4 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/elements.rb 100.00 % 15 13 13 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/elements/address.rb 30.30 % 258 99 30 69 0.30
target/rubygems/gems/mail-2.7.1/lib/mail/elements/address_list.rb 60.00 % 34 10 6 4 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_disposition_element.rb 63.64 % 20 11 7 4 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_location_element.rb 75.00 % 17 8 6 2 0.75
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_transfer_encoding_element.rb 83.33 % 13 6 5 1 0.83
target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_type_element.rb 58.33 % 21 12 7 5 0.58
target/rubygems/gems/mail-2.7.1/lib/mail/elements/date_time_element.rb 62.50 % 15 8 5 3 0.63
target/rubygems/gems/mail-2.7.1/lib/mail/elements/envelope_from_element.rb 53.33 % 33 15 8 7 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/elements/message_ids_element.rb 72.73 % 22 11 8 3 0.73
target/rubygems/gems/mail-2.7.1/lib/mail/elements/mime_version_element.rb 62.50 % 15 8 5 3 0.63
target/rubygems/gems/mail-2.7.1/lib/mail/elements/phrase_list.rb 85.71 % 14 7 6 1 0.86
target/rubygems/gems/mail-2.7.1/lib/mail/elements/received_element.rb 66.67 % 21 12 8 4 0.67
target/rubygems/gems/mail-2.7.1/lib/mail/encodings.rb 26.19 % 343 126 33 93 0.37
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/7bit.rb 81.82 % 22 11 9 2 0.82
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/8bit.rb 88.89 % 18 9 8 1 0.89
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/base64.rb 70.59 % 38 17 12 5 0.71
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/binary.rb 100.00 % 13 7 7 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/identity.rb 70.00 % 24 10 7 3 0.70
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/quoted_printable.rb 65.00 % 45 20 13 7 0.65
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/transfer_encoding.rb 37.14 % 77 35 13 22 0.37
target/rubygems/gems/mail-2.7.1/lib/mail/encodings/unix_to_unix.rb 81.82 % 20 11 9 2 0.82
target/rubygems/gems/mail-2.7.1/lib/mail/envelope.rb 60.00 % 31 10 6 4 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/field.rb 43.86 % 299 114 50 64 0.68
target/rubygems/gems/mail-2.7.1/lib/mail/field_list.rb 33.33 % 34 12 4 8 0.33
target/rubygems/gems/mail-2.7.1/lib/mail/fields.rb 100.00 % 36 33 33 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/fields/bcc_field.rb 55.00 % 68 20 11 9 0.55
target/rubygems/gems/mail-2.7.1/lib/mail/fields/cc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/comments_field.rb 55.56 % 42 9 5 4 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/address_container.rb 57.14 % 17 7 4 3 0.57
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_address.rb 31.71 % 161 82 26 56 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_date.rb 52.94 % 36 17 9 8 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_field.rb 51.85 % 52 27 14 13 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_message_id.rb 45.83 % 49 24 11 13 0.46
target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/parameter_hash.rb 20.69 % 59 29 6 23 0.21
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_description_field.rb 55.56 % 20 9 5 4 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_disposition_field.rb 34.21 % 71 38 13 25 0.34
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_id_field.rb 45.16 % 63 31 14 17 0.45
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_location_field.rb 50.00 % 43 20 10 10 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_transfer_encoding_field.rb 45.45 % 45 22 10 12 0.45
target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_type_field.rb 26.26 % 197 99 26 73 0.26
target/rubygems/gems/mail-2.7.1/lib/mail/fields/date_field.rb 50.00 % 57 18 9 9 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/from_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/in_reply_to_field.rb 56.25 % 57 16 9 7 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/keywords_field.rb 52.38 % 44 21 11 10 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/fields/message_id_field.rb 50.00 % 83 28 14 14 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/fields/mime_version_field.rb 46.15 % 54 26 12 14 0.46
target/rubygems/gems/mail-2.7.1/lib/mail/fields/optional_field.rb 83.33 % 17 6 5 1 0.83
target/rubygems/gems/mail-2.7.1/lib/mail/fields/received_field.rb 42.86 % 76 28 12 16 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/fields/references_field.rb 56.25 % 57 16 9 7 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/reply_to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_bcc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_cc_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_date_field.rb 52.94 % 35 17 9 8 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_from_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_message_id_field.rb 58.82 % 35 17 10 7 0.59
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_sender_field.rb 61.11 % 62 18 11 7 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/return_path_field.rb 57.89 % 65 19 11 8 0.58
target/rubygems/gems/mail-2.7.1/lib/mail/fields/sender_field.rb 60.00 % 67 20 12 8 0.60
target/rubygems/gems/mail-2.7.1/lib/mail/fields/structured_field.rb 55.56 % 52 18 10 8 0.56
target/rubygems/gems/mail-2.7.1/lib/mail/fields/subject_field.rb 71.43 % 17 7 5 2 0.71
target/rubygems/gems/mail-2.7.1/lib/mail/fields/to_field.rb 64.29 % 55 14 9 5 0.64
target/rubygems/gems/mail-2.7.1/lib/mail/fields/unstructured_field.rb 21.65 % 222 97 21 76 0.22
target/rubygems/gems/mail-2.7.1/lib/mail/header.rb 35.48 % 278 93 33 60 0.35
target/rubygems/gems/mail-2.7.1/lib/mail/indifferent_hash.rb 53.57 % 147 56 30 26 0.54
target/rubygems/gems/mail-2.7.1/lib/mail/mail.rb 51.67 % 262 60 31 29 0.52
target/rubygems/gems/mail-2.7.1/lib/mail/matchers/attachment_matchers.rb 66.67 % 29 15 10 5 0.67
target/rubygems/gems/mail-2.7.1/lib/mail/matchers/has_sent_mail.rb 32.20 % 201 118 38 80 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/message.rb 30.83 % 2170 639 197 442 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte.rb 61.11 % 92 18 11 7 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/chars.rb 24.85 % 476 165 41 124 0.33
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/unicode.rb 27.23 % 405 202 55 147 0.61
target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/utils.rb 36.00 % 61 25 9 16 0.36
target/rubygems/gems/mail-2.7.1/lib/mail/network.rb 100.00 % 16 12 12 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/exim.rb 80.00 % 49 5 4 1 0.80
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/file_delivery.rb 50.00 % 42 16 8 8 0.50
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/logger_delivery.rb 47.62 % 37 21 10 11 0.48
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/sendmail.rb 44.00 % 95 25 11 14 0.44
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb 32.35 % 149 34 11 23 0.32
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp_connection.rb 53.33 % 66 15 8 7 0.53
target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/test_mailer.rb 69.23 % 42 13 9 4 1.08
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/base.rb 30.00 % 64 20 6 14 0.30
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/imap.rb 14.86 % 187 74 11 63 0.15
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/pop3.rb 21.57 % 143 51 11 40 0.22
target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/test_retriever.rb 24.00 % 44 25 6 19 0.24
target/rubygems/gems/mail-2.7.1/lib/mail/parser_tools.rb 57.14 % 15 7 4 3 0.57
target/rubygems/gems/mail-2.7.1/lib/mail/parsers.rb 100.00 % 19 14 14 0 1.00
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/address_lists_parser.rb 6.05 % 33236 843 51 792 0.06
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_disposition_parser.rb 20.00 % 895 250 50 200 0.20
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_location_parser.rb 25.64 % 816 195 50 145 0.26
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_transfer_encoding_parser.rb 30.67 % 516 163 50 113 0.31
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_type_parser.rb 18.94 % 1042 264 50 214 0.19
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/date_time_parser.rb 26.74 % 885 187 50 137 0.27
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/envelope_from_parser.rb 19.92 % 3581 251 50 201 0.20
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/message_ids_parser.rb 22.83 % 2854 219 50 169 0.23
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/mime_version_parser.rb 27.93 % 507 179 50 129 0.28
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/phrase_lists_parser.rb 28.90 % 878 173 50 123 0.29
target/rubygems/gems/mail-2.7.1/lib/mail/parsers/received_parser.rb 6.89 % 8776 726 50 676 0.07
target/rubygems/gems/mail-2.7.1/lib/mail/part.rb 41.82 % 123 55 23 32 0.42
target/rubygems/gems/mail-2.7.1/lib/mail/parts_list.rb 43.24 % 74 37 16 21 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/utilities.rb 36.94 % 324 111 41 70 0.43
target/rubygems/gems/mail-2.7.1/lib/mail/version.rb 88.89 % 17 9 8 1 0.89
target/rubygems/gems/mail-2.7.1/lib/mail/version_specific/ruby_1_9.rb 26.67 % 278 135 36 99 0.27
target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime.rb 37.50 % 166 96 36 60 0.38
target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime/version.rb 100.00 % 3 2 2 0 1.00
target/rubygems/gems/minitest-5.11.3/lib/minitest/pride_plugin.rb 37.93 % 142 58 22 36 0.38
target/rubygems/gems/rack-2.0.7/lib/rack/conditional_get.rb 57.14 % 79 35 20 15 0.66
target/rubygems/gems/rack-2.0.7/lib/rack/etag.rb 97.37 % 74 38 37 1 1.32
target/rubygems/gems/rack-2.0.7/lib/rack/file.rb 33.71 % 176 89 30 59 0.34
target/rubygems/gems/rack-2.0.7/lib/rack/head.rb 81.82 % 25 11 9 2 1.45
target/rubygems/gems/rack-2.0.7/lib/rack/method_override.rb 82.76 % 50 29 24 5 1.28
target/rubygems/gems/rack-2.0.7/lib/rack/mime.rb 63.64 % 677 11 7 4 0.64
target/rubygems/gems/rack-2.0.7/lib/rack/multipart.rb 95.56 % 63 45 43 2 1.16
target/rubygems/gems/rack-2.0.7/lib/rack/multipart/parser.rb 27.32 % 366 205 56 149 0.30
target/rubygems/gems/rack-2.0.7/lib/rack/runtime.rb 100.00 % 32 16 16 0 1.75
target/rubygems/gems/rack-2.0.7/lib/rack/sendfile.rb 40.54 % 158 37 15 22 0.57
target/rubygems/gems/rack-2.0.7/lib/rack/session/cookie.rb 42.86 % 195 84 36 48 0.43
target/rubygems/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb 100.00 % 22 11 11 0 1.91
target/rubygems/gems/railties-5.2.3/lib/minitest/rails_plugin.rb 86.67 % 63 30 26 4 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/application/bootstrap.rb 80.43 % 89 46 37 9 0.80
target/rubygems/gems/railties-5.2.3/lib/rails/application/default_middleware_stack.rb 77.19 % 107 57 44 13 0.77
target/rubygems/gems/railties-5.2.3/lib/rails/application/finisher.rb 67.06 % 196 85 57 28 0.68
target/rubygems/gems/railties-5.2.3/lib/rails/application/routes_reloader.rb 100.00 % 55 31 31 0 1.19
target/rubygems/gems/railties-5.2.3/lib/rails/backtrace_cleaner.rb 100.00 % 34 23 23 0 1.22
target/rubygems/gems/railties-5.2.3/lib/rails/generators/test_case.rb 100.00 % 37 13 13 0 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/assertions.rb 40.54 % 127 37 15 22 0.41
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/behaviour.rb 66.67 % 111 45 30 15 0.67
target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/setup_and_teardown.rb 54.55 % 20 11 6 5 0.55
target/rubygems/gems/railties-5.2.3/lib/rails/rack/logger.rb 84.09 % 80 44 37 7 1.95
target/rubygems/gems/railties-5.2.3/lib/rails/test_help.rb 84.62 % 48 26 22 4 1.00
target/rubygems/gems/railties-5.2.3/lib/rails/test_unit/reporter.rb 65.63 % 110 64 42 22 1.66
target/rubygems/gems/sprockets-3.7.2/lib/sprockets/autoload/sass.rb 100.00 % 7 4 4 0 1.00
target/rubygems/gems/sprockets-3.7.2/lib/sprockets/cache/file_store.rb 31.65 % 186 79 25 54 0.32
target/rubygems/gems/thor-0.20.3/lib/thor/shell/basic.rb 20.83 % 482 216 45 171 0.21
target/rubygems/gems/tzinfo-data-1.2019.2/lib/tzinfo/data/definitions/Etc/UTC.rb 100.00 % 21 8 8 0 1.00

Ungrouped ( 73.68% covered at 0.74 hits/line )

2 files in total.
19 relevant lines, 14 lines covered and 5 lines missed. ( 73.68% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
app/serializers/user_serializer.rb 100.00 % 3 2 2 0 1.00
target/rubygems/gems/activestorage-5.2.3/config/routes.rb 70.59 % 31 17 12 5 0.71

app/channels/application_cable/channel.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 module ApplicationCable
  2. 1 class Channel < ActionCable::Channel::Base
  3. end
  4. end

app/channels/application_cable/connection.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 module ApplicationCable
  2. 1 class Connection < ActionCable::Connection::Base
  3. end
  4. end

app/controllers/application_controller.rb

90.0% lines covered

10 relevant lines. 9 lines covered and 1 lines missed.
    
  1. 1 class ApplicationController < ActionController::Base
  2. 1 include RouteHelper
  3. 1 before_action :setup_gon
  4. 1 rescue_from Exception, java.lang.Throwable, :with => :internal_error
  5. 1 def internal_error(exception)
  6. $log.error{LEX("An unhandled exception occurred!", exception)}
  7. end
  8. 1 def setup_gon
  9. 1 gon.routes = setup_routes
  10. 1 gon.packs = packed_assets
  11. 1 gon.user = "John Smith"
  12. end
  13. end

app/controllers/concerns/current_user_concern.rb

57.14% lines covered

7 relevant lines. 4 lines covered and 3 lines missed.
    
  1. 1 module CurrentUserConcern
  2. 1 extend ActiveSupport::Concern
  3. 1 included do
  4. before_action :set_current_user
  5. end
  6. 1 def set_current_user
  7. if session[:user_id]
  8. @current_user = User.find(session[:user_id])
  9. end
  10. end
  11. end

app/controllers/concerns/route_helper.rb

92.16% lines covered

51 relevant lines. 47 lines covered and 4 lines missed.
    
  1. 1 module RouteHelper
  2. 1 include Webpacker::Helper
  3. 1 include ActionView::Helpers::AssetUrlHelper
  4. 1 IMAGE_EXTENSIONS = %w(.jpeg .jpg .png .gif).freeze
  5. 1 IMAGE_ROOT_PATH = 'media/packs/images/'
  6. 1 def setup_routes
  7. 1 original_verbosity = $VERBOSE
  8. 1 $VERBOSE = nil
  9. 1 routes = Rails.application.routes.named_routes.helper_names - ['rails_blob_path', 'rails_blob_url', 'rails_representation_path', 'rails_representation_url']
  10. 1 $VERBOSE = original_verbosity
  11. 1 @@routes_hash ||= {}
  12. 1 if @@routes_hash.empty?
  13. 1 routes.each do |route|
  14. 18 begin
  15. 18 @@routes_hash[route] = self.send(route)
  16. rescue ActionController::UrlGenerationError => ex
  17. 10 if (ex.message =~ /missing required keys: \[(.*?)\]/)
  18. 10 keys = $1
  19. 10 keys = keys.split(',')
  20. 10 keys.map! do |e|
  21. 18 e.gsub!(':', '')
  22. 18 e.strip
  23. end
  24. 10 required_keys_hash = {}
  25. 10 keys.each do |key|
  26. 18 required_keys_hash[key.to_sym] = ':' + key.to_s
  27. end
  28. 10 @@routes_hash[route] = self.send(route, required_keys_hash)
  29. else
  30. raise ex
  31. end
  32. end
  33. end
  34. end
  35. #$log.debug('routes hash passed to javascript is ' + @@routes_hash.to_s)
  36. 1 @@routes_hash
  37. end
  38. 1 def setup_packed_assets
  39. if Webpacker.instance.config.cache_manifest?
  40. @@packed_assets ||= packed_assets
  41. else
  42. @@packed_assets = packed_assets
  43. end
  44. end
  45. 1 private
  46. 1 def packed_assets
  47. 1 h = {}
  48. 1 h[:paths] = {}
  49. 1 h[:urls] = {}
  50. 1 h[:urls][:images] = {}
  51. 1 h[:paths][:images] = {}
  52. 1 Webpacker.instance.manifest.refresh.each_pair do |k,v|
  53. 45 unless k =~ /map$|entrypoints$/
  54. 35 url = asset_pack_url k
  55. 35 path = asset_pack_path k
  56. 35 h[:urls][k] = url
  57. 35 h[:paths][k] = path
  58. 35 if IMAGE_EXTENSIONS.include?(File.extname k)
  59. 3 rootless = k.sub(IMAGE_ROOT_PATH,'')
  60. 3 h[:urls][:images][k] = url
  61. 3 h[:urls][:images][rootless] = url
  62. 3 h[:paths][:images][k] = path
  63. 3 h[:paths][:images][rootless] = path
  64. end
  65. end
  66. end
  67. 1 h
  68. end
  69. end
  70. =begin
  71. Webpacker.instance.manifest
  72. Webpacker.instance.manifest.refresh #gives hash
  73. include Webpacker::Helper
  74. include ActionView::Helpers::AssetUrlHelper
  75. include ActionView::Helpers::AssetTagHelper
  76. Webpacker.instance.config.cache_manifest?
  77. =end

app/controllers/layouts_controller.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 class LayoutsController < ApplicationController
  2. # this is the root route for the application
  3. 1 def root
  4. end
  5. end

app/controllers/schedule_controller.rb

33.33% lines covered

9 relevant lines. 3 lines covered and 6 lines missed.
    
  1. 1 class ScheduleController < ApplicationController
  2. 1 def get_facilities
  3. # data = Facility.all
  4. data = [{id: 1, location: 'New York'}, {id: 2, location: 'Los Angeles'}, {id: 3, location: 'Portland'}]
  5. $log.info{"Get facilities is returning #{data.inspect}"}
  6. render json: data
  7. end
  8. 1 def get_appointment_types
  9. # appointment_types = AppointmentType.all
  10. appointment_types = [{id: 1, type: 'Allergist'}, {id: 2, type: 'Surgeon'}, {id: 3, type: 'Primary Care'}, {id:4, type: 'Cardiologist'}]
  11. $log.info{"Get appointment types is returning #{appointment_types.inspect}"}
  12. render json: appointment_types
  13. end
  14. =begin
  15. def get_doctors
  16. facility_id = params[:facility_id]
  17. appointment_type_id = params[:appointment_type_id]
  18. list = Doctor.where(appointment_type_id: appointment_type_id, facility_id: facility_id).all.to_a
  19. $log.info{"Get doctors is returning #{list.inspect}"}
  20. render json: list
  21. end
  22. =end
  23. end

app/controllers/sessions_controller.rb

100.0% lines covered

17 relevant lines. 17 lines covered and 0 lines missed.
    
  1. 1 puts "inside session controller file"
  2. 1 class SessionsController < ApplicationController
  3. 1 puts "inside session controller class"
  4. 1 skip_before_action :setup_gon
  5. 1 def create
  6. 2 puts "inside session controller : create action"
  7. 6 user = User
  8. 1 .find_by(email: params["user"]["email"])
  9. 1 .try(:authenticate, params["user"]["password"])
  10. 2 if user
  11. 1 session[:user_id] = user.id
  12. 1 redirect_to user_url(user.id)
  13. else
  14. 1 user = User.create!(first_name: params["user"]["first_name"], last_name: params["user"]["last_name"], email: params["user"]["email"], password: params["user"]["password"])
  15. 1 puts "new user created: #{user}"
  16. 1 session[:user_id] = user.id
  17. 1 puts "new session created: #{session[:user_id]}"
  18. 1 redirect_to user_url(user.id)
  19. end
  20. end # end of create action
  21. end # end of class

app/controllers/users_controller.rb

66.67% lines covered

12 relevant lines. 8 lines covered and 4 lines missed.
    
  1. 1 class UsersController < ApplicationController
  2. 1 def index
  3. 1 puts "inside user controller: index"
  4. 1 users = User.all
  5. 1 render json: users
  6. end
  7. 1 def create
  8. User.create!(params[:user])
  9. end
  10. 1 def show
  11. user = User.find(params[:id])
  12. end
  13. 1 def destroy
  14. user = User.find(params[:id])
  15. user.delete
  16. end
  17. end

app/helpers/application_helper.rb

100.0% lines covered

1 relevant lines. 1 lines covered and 0 lines missed.
    
  1. 1 module ApplicationHelper
  2. end

app/jobs/application_job.rb

100.0% lines covered

1 relevant lines. 1 lines covered and 0 lines missed.
    
  1. 1 class ApplicationJob < ActiveJob::Base
  2. end

app/mailers/application_mailer.rb

100.0% lines covered

3 relevant lines. 3 lines covered and 0 lines missed.
    
  1. 1 class ApplicationMailer < ActionMailer::Base
  2. 1 default from: 'from@example.com'
  3. 1 layout 'mailer'
  4. end

app/models/application_record.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 class ApplicationRecord < ActiveRecord::Base
  2. 1 self.abstract_class = true
  3. end

app/models/user.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. 1 class User < ApplicationRecord
  2. 1 has_secure_password
  3. 1 validates_presence_of :email
  4. 1 validates_uniqueness_of :email
  5. end

app/serializers/user_serializer.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 class UserSerializer < ActiveModel::Serializer
  2. 1 attributes :id, :first_name, :last_name, :email
  3. end

lib/logging/logging.rb

57.14% lines covered

77 relevant lines. 44 lines covered and 33 lines missed.
    
  1. 1 require 'logging'
  2. 1 require 'fileutils'
  3. 1 require 'socket'
  4. #if nil we are in trinidad
  5. 1 CATALINA_HOME = java.lang.System.properties['catalina.home']
  6. 1 subdir = (File.open('../context.txt').read.reverse.chop.reverse + '/') rescue ''
  7. 1 LOG_HOME = CATALINA_HOME.nil? ? "#{Rails.root}/logs/#{subdir}" : "#{CATALINA_HOME}/logs/#{subdir}"
  8. 1 FileUtils::mkdir_p LOG_HOME
  9. 1 Logging.basepath = Rails.root.to_s
  10. 1 module Logging
  11. #add a level here if needed....
  12. 1 RAILS_COMMON_LEVELS = [:trace, :debug, :info, :warn, :error, :fatal, :unknown, :always]
  13. 1 def self.trace(exception)
  14. trace_str = "\n"
  15. if exception.respond_to? :backtrace
  16. trace_str << exception.to_s << "\n"
  17. unless exception.backtrace.nil?
  18. trace_str << exception.backtrace.join("\n")
  19. end
  20. end
  21. end
  22. end
  23. #Logging.caller_tracing=true
  24. 1 Logging.init *Logging::RAILS_COMMON_LEVELS
  25. 1 Logging.color_scheme('pretty',
  26. levels: {
  27. :info => :green,
  28. :warn => :yellow,
  29. :error => :red,
  30. :fatal => [:white, :on_red],
  31. :unknown => [:yellow, :on_blue],
  32. :always => :white
  33. },
  34. date: :yellow,
  35. #logger: :cyan,
  36. #message: :magenta,
  37. file: :magenta,
  38. line: :cyan
  39. )
  40. 1 color_scheme = WINDOWS ? 'pretty' : :default
  41. #move pattern to prop file
  42. 1 pattern = $PROPS['LOG.pattern']
  43. 2 Logging.appenders.stdout(
  44. 'stdout',
  45. :layout => Logging.layouts.pattern(
  46. :pattern => pattern,
  47. :color_scheme => color_scheme
  48. )
  49. )
  50. 2 rf = Logging.appenders.rolling_file(
  51. 'file',
  52. layout: Logging.layouts.pattern(
  53. pattern: pattern,
  54. color_scheme: color_scheme,
  55. # backtrace: true
  56. ),
  57. roll_by: $PROPS['LOG.roll_by'],
  58. keep: $PROPS['LOG.keep'].to_i,
  59. age: $PROPS['LOG.age'],
  60. filename: LOG_HOME + $PROPS['LOG.filename'],
  61. truncate: true
  62. )
  63. 2 error_appender = Logging.appenders.rolling_file(
  64. 'file',
  65. layout: Logging.layouts.pattern(
  66. pattern: pattern,
  67. color_scheme: color_scheme,
  68. ),
  69. roll_by: $PROPS['LOG.roll_by'],
  70. keep: $PROPS['LOG.keep'].to_i,
  71. age: $PROPS['LOG.age'],
  72. filename: LOG_HOME + $PROPS['LOG.filename_error'],
  73. truncate: true
  74. )
  75. 1 class ErrorFilter < ::Logging::Filter
  76. 1 def initialize
  77. 9 @levels_hash = Logging::LEVELS.invert.map do |k,v| [k, v.to_sym] end.to_h
  78. end
  79. 1 def allow(event)
  80. 1 allowed = @levels_hash[event.level].eql?(:error) || @levels_hash[event.level].eql?(:fatal)
  81. 1 allowed ? event : nil
  82. end
  83. end
  84. #error_appender.level = :error
  85. 1 error_appender.filters=ErrorFilter.new
  86. 1 begin
  87. 1 $log = ::Logging::Logger['MainLogger']
  88. 1 $log.caller_tracing=$PROPS['LOG.caller_tracing'].upcase.eql?('TRUE')
  89. 1 $log.add_appenders 'stdout' if ($PROPS['LOG.append_stdout'].upcase.eql?('TRUE'))
  90. 1 $log.add_appenders rf
  91. #$log.add_appenders error_appender
  92. 1 $log.level = $PROPS['LOG.level'].downcase.to_sym
  93. 1 unless $PROPS['LOG.filename_admin'].nil?
  94. #rf_rails is for rails logging
  95. rf_admin = Logging.appenders.rolling_file(
  96. 'file',
  97. layout: Logging.layouts.pattern(
  98. pattern: pattern,
  99. color_scheme: color_scheme,
  100. # backtrace: true
  101. ),
  102. roll_by: $PROPS['LOG.roll_by'],
  103. keep: $PROPS['LOG.keep'].to_i,
  104. age: $PROPS['LOG.age'],
  105. filename: LOG_HOME + $PROPS['LOG.filename_admin'],
  106. truncate: true
  107. )
  108. $alog = ::Logging::Logger['LogAdmin']
  109. $alog.caller_tracing=$PROPS['LOG.caller_tracing'].upcase.eql?('TRUE')
  110. $alog.add_appenders 'stdout' if $PROPS['LOG.append_stdout'].upcase.eql?('TRUE')
  111. $alog.add_appenders rf_admin
  112. $alog.level = $PROPS['LOG.level'].downcase.to_sym
  113. end
  114. 1 ALL_LOGGERS = [$log, $alog].reject(&:nil?).freeze
  115. # these log messages will be nicely colored
  116. # the level will be colored differently for each message
  117. # PrismeLogEvent not visible yet
  118. 1 unless (File.basename($0) == 'rake')
  119. ALL_LOGGERS.each {|e| e.always 'Logging started!'}
  120. end
  121. rescue => ex
  122. warn "Logger failed to initialize. Reason is #{ex.to_s}"
  123. warn ex.backtrace.join("\n")
  124. warn 'Shutting down the KOMET/PRISME web server!'
  125. java.lang.System.exit(1)
  126. end
  127. 1 ALL_LOGGERS.each do |logger|
  128. 1 logger.add_appenders error_appender
  129. end
  130. #WARNING, using these methods doesn't produce the correct file location in the logs.
  131. 1 ALL_LOGGERS.each do |logger|
  132. 1 Logging::RAILS_COMMON_LEVELS.each do |level|
  133. 8 method_name = ("#{level}_e").to_sym
  134. 8 logger.define_singleton_method(method_name) do |message, exception|
  135. logger.send(level, message.to_s)
  136. if exception.respond_to? :backtrace
  137. logger.send(level, exception.to_s)
  138. logger.send(level, exception.backtrace.join("\n")) unless exception.backtrace.nil?
  139. end
  140. end
  141. end
  142. end
  143. 1 module Kernel
  144. 1 def LEX(message, exception)
  145. result = "#{message}\n#{exception.class}: #{exception.message}\n#{exception.backtrace&.join("\n")}" rescue message.to_s
  146. result
  147. end
  148. 1 module_function :LEX
  149. end
  150. 1 $log.always "Using color scheme #{color_scheme}, Rails mode is #{Rails.env}"
  151. =begin
  152. load('lib/logging/logging.rb')
  153. $log.debug{LEX("I had a boo boo 2", ex)}
  154. =end

lib/props/prop_loader.rb

83.72% lines covered

43 relevant lines. 36 lines covered and 7 lines missed.
    
  1. 1 require 'erb'
  2. 1 module PropLoader
  3. 1 extend self
  4. 1 class << self
  5. 1 attr_accessor :props
  6. end
  7. 1 def self.load_prop_files(*dirs)
  8. 1 @props = {}
  9. 1 dirs.each do |dir|
  10. # iterate over all of the .properties files in the directory
  11. 1 Dir.glob("#{dir}/*.properties*") do |file|
  12. 1 key_prefix = File.basename(file).split(".")[0].upcase
  13. 1 if File.extname(file).eql?('.erb')
  14. 1 props = self.read_props_from_erb(file, key_prefix)
  15. else
  16. # read the file line by line stripping out properties
  17. props = read_prop_file(file, key_prefix)
  18. end
  19. 1 @props.merge!(props)
  20. end
  21. end
  22. end
  23. 1 def self.reload
  24. 1 PropLoader.load_prop_files('./config/props')
  25. 1 $PROPS = PropLoader.props.clone
  26. 1 $PROPS.freeze
  27. end
  28. 1 private
  29. 1 def self.read_prop_file(file, key_prefix)
  30. ret = {}
  31. File.readlines(file).each do |line|
  32. r = read_prop_line(line, key_prefix)
  33. ret.merge!(r)
  34. end
  35. ret
  36. end
  37. 1 def self.read_props_from_erb(erb, key_prefix)
  38. 2 props = ERB.new(File.open(erb, 'r') { |file| file.read }).result
  39. 1 properties = {}
  40. 1 prop_array = props.split("\n")
  41. 1 prop_array.each do |line|
  42. 25 properties.merge!(read_prop_line(line, key_prefix))
  43. end
  44. 1 properties
  45. end
  46. 1 def self.read_prop_line(line, key_prefix)
  47. 25 properties = {}
  48. 25 line.strip!
  49. 25 return properties if line.eql?("")
  50. 21 if (line[0] != ?# and line[0] != ?=)
  51. 10 i = line.index('=')
  52. 10 if (i)
  53. 10 properties["#{key_prefix}." + line[0..i - 1].strip] = line[i + 1..-1].strip
  54. else
  55. properties["#{key_prefix}."+line] = ''
  56. end
  57. end
  58. 21 properties
  59. end
  60. end
  61. 1 PropLoader.reload

lib/utilities.rb

0.0% lines covered

82 relevant lines. 0 lines covered and 82 lines missed.
    
  1. require 'uri'
  2. module Utilities
  3. TMP_FILE_PREFIX = './tmp/'
  4. YML_EXT = '.yml'
  5. MAVEN_TARGET_DIRECTORY = './target'
  6. ##
  7. # this method takes a camel cased word and changes it to snake case
  8. # Example: RailsKomet -> rails_komet
  9. #
  10. def to_snake_case(camel_cased_word)
  11. camel_cased_word.to_s.gsub(/::/, '/').
  12. gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
  13. gsub(/([a-z\d])([A-Z])/, '\1_\2').
  14. tr('-', '_').
  15. downcase
  16. end
  17. ##
  18. # writes the json data to a tmp file based on the filename passed
  19. # @param json - the JSON data to write out
  20. # @param file_name - the filename to write out to the /tmp directory
  21. def json_to_yaml_file(json, file_name)
  22. if Rails.env.development?
  23. prefix = '#Fixture created on ' + Time.now.strftime('%F %H:%M:%S') + "\n"
  24. File.write("#{TMP_FILE_PREFIX}#{file_name}" + YML_EXT, prefix + json.to_yaml)
  25. #$log.trace("Writing yaml file #{TMP_FILE_PREFIX}#{file_name}.yml.")
  26. else
  27. #$log.trace("Not writing yaml file #{TMP_FILE_PREFIX}#{file_name}.yml. Rails.env = #{Rails.env}")
  28. end
  29. end
  30. ##
  31. # Convert the URL to a string for use with the json_to_yaml_file method call
  32. # @param url - the URL path to convert to a string with underscores
  33. # @return - the filename based on the URL passed
  34. def url_to_path_string(url)
  35. url = url.clone
  36. begin
  37. url.gsub!('{', '') #reduce paths like http://www.google.com/foo/{id}/faa to http://www.google.com/foo/id/faa
  38. url.gsub!('}', '') #reduce paths like http://www.google.com/foo/{id}/faa to http://www.google.com/foo/id/faa
  39. path = URI(url).path.gsub('/', '_')
  40. path = 'no_path' if path.empty?
  41. return path
  42. rescue => ex
  43. #$log.error('An invalid matched_url was given!')
  44. #$log.error(ex)
  45. end
  46. 'bad_url'
  47. end
  48. end
  49. module Kernel
  50. TRUE_VALS = %w(true t yes y on 1)
  51. FALSE_VALS = %w(false f no n off 0)
  52. def boolean(boolean_string)
  53. val = boolean_string.to_s.downcase.gsub(/\s+/, '')
  54. return false if val.empty?
  55. return true if TRUE_VALS.include?(val)
  56. return false if FALSE_VALS.include?(val)
  57. raise ArgumentError.new("invalid value for Boolean: \"#{val}\"")
  58. end
  59. def gov
  60. Java::Gov
  61. end
  62. end
  63. class String
  64. # similar to the camelize in rails, but it only mutates the first character after the underscore
  65. # Suppose you have the java method 'getInterfaceEngineURL', note how the last set of characters are all uppercase
  66. # "interface_engine_URL".camelize() => "InterfaceEngineUrl"
  67. # "interface_engine_URL".camelize_preserving => "InterfaceEngineURL"
  68. # "interface_engine_URL".camelize_preserving(false) => "interfaceEngineURL"
  69. def camelize_preserving(modify_first_letter = true)
  70. return self.split('_').each_with_index.collect do |e, i|
  71. if ((i == 0) && !modify_first_letter)
  72. else
  73. e[0] = e[0].capitalize
  74. end
  75. e
  76. end.join
  77. end
  78. def to_b
  79. boolean(self)
  80. end
  81. def os_path!
  82. self.gsub!('/', java.io.File::separator)
  83. self.gsub!('\\', java.io.File::separator)
  84. end
  85. end
  86. module JSON
  87. class << self
  88. def indifferent_parse(source, opts = {})
  89. HashWithIndifferentAccess.new(JSON.parse(source, opts))
  90. end
  91. end
  92. end
  93. module FileHelper
  94. def FileHelper.file_as_string(file)
  95. rVal = ''
  96. File.open(file, 'r') do |file_handle|
  97. file_handle.read.each_line do |line|
  98. rVal << line
  99. end
  100. end
  101. rVal
  102. end
  103. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel.rb

100.0% lines covered

10 relevant lines. 10 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Channel
  4. 1 extend ActiveSupport::Autoload
  5. 1 eager_autoload do
  6. 1 autoload :Base
  7. 1 autoload :Broadcasting
  8. 1 autoload :Callbacks
  9. 1 autoload :Naming
  10. 1 autoload :PeriodicTimers
  11. 1 autoload :Streams
  12. end
  13. end
  14. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/base.rb

41.41% lines covered

99 relevant lines. 41 lines covered and 58 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "set"
  3. 1 module ActionCable
  4. 1 module Channel
  5. # The channel provides the basic structure of grouping behavior into logical units when communicating over the WebSocket connection.
  6. # You can think of a channel like a form of controller, but one that's capable of pushing content to the subscriber in addition to simply
  7. # responding to the subscriber's direct requests.
  8. #
  9. # Channel instances are long-lived. A channel object will be instantiated when the cable consumer becomes a subscriber, and then
  10. # lives until the consumer disconnects. This may be seconds, minutes, hours, or even days. That means you have to take special care
  11. # not to do anything silly in a channel that would balloon its memory footprint or whatever. The references are forever, so they won't be released
  12. # as is normally the case with a controller instance that gets thrown away after every request.
  13. #
  14. # Long-lived channels (and connections) also mean you're responsible for ensuring that the data is fresh. If you hold a reference to a user
  15. # record, but the name is changed while that reference is held, you may be sending stale data if you don't take precautions to avoid it.
  16. #
  17. # The upside of long-lived channel instances is that you can use instance variables to keep reference to objects that future subscriber requests
  18. # can interact with. Here's a quick example:
  19. #
  20. # class ChatChannel < ApplicationCable::Channel
  21. # def subscribed
  22. # @room = Chat::Room[params[:room_number]]
  23. # end
  24. #
  25. # def speak(data)
  26. # @room.speak data, user: current_user
  27. # end
  28. # end
  29. #
  30. # The #speak action simply uses the Chat::Room object that was created when the channel was first subscribed to by the consumer when that
  31. # subscriber wants to say something in the room.
  32. #
  33. # == Action processing
  34. #
  35. # Unlike subclasses of ActionController::Base, channels do not follow a RESTful
  36. # constraint form for their actions. Instead, Action Cable operates through a
  37. # remote-procedure call model. You can declare any public method on the
  38. # channel (optionally taking a <tt>data</tt> argument), and this method is
  39. # automatically exposed as callable to the client.
  40. #
  41. # Example:
  42. #
  43. # class AppearanceChannel < ApplicationCable::Channel
  44. # def subscribed
  45. # @connection_token = generate_connection_token
  46. # end
  47. #
  48. # def unsubscribed
  49. # current_user.disappear @connection_token
  50. # end
  51. #
  52. # def appear(data)
  53. # current_user.appear @connection_token, on: data['appearing_on']
  54. # end
  55. #
  56. # def away
  57. # current_user.away @connection_token
  58. # end
  59. #
  60. # private
  61. # def generate_connection_token
  62. # SecureRandom.hex(36)
  63. # end
  64. # end
  65. #
  66. # In this example, the subscribed and unsubscribed methods are not callable methods, as they
  67. # were already declared in ActionCable::Channel::Base, but <tt>#appear</tt>
  68. # and <tt>#away</tt> are. <tt>#generate_connection_token</tt> is also not
  69. # callable, since it's a private method. You'll see that appear accepts a data
  70. # parameter, which it then uses as part of its model call. <tt>#away</tt>
  71. # does not, since it's simply a trigger action.
  72. #
  73. # Also note that in this example, <tt>current_user</tt> is available because
  74. # it was marked as an identifying attribute on the connection. All such
  75. # identifiers will automatically create a delegation method of the same name
  76. # on the channel instance.
  77. #
  78. # == Rejecting subscription requests
  79. #
  80. # A channel can reject a subscription request in the #subscribed callback by
  81. # invoking the #reject method:
  82. #
  83. # class ChatChannel < ApplicationCable::Channel
  84. # def subscribed
  85. # @room = Chat::Room[params[:room_number]]
  86. # reject unless current_user.can_access?(@room)
  87. # end
  88. # end
  89. #
  90. # In this example, the subscription will be rejected if the
  91. # <tt>current_user</tt> does not have access to the chat room. On the
  92. # client-side, the <tt>Channel#rejected</tt> callback will get invoked when
  93. # the server rejects the subscription request.
  94. 1 class Base
  95. 1 include Callbacks
  96. 1 include PeriodicTimers
  97. 1 include Streams
  98. 1 include Naming
  99. 1 include Broadcasting
  100. 1 attr_reader :params, :connection, :identifier
  101. 1 delegate :logger, to: :connection
  102. 1 class << self
  103. # A list of method names that should be considered actions. This
  104. # includes all public instance methods on a channel, less
  105. # any internal methods (defined on Base), adding back in
  106. # any methods that are internal, but still exist on the class
  107. # itself.
  108. #
  109. # ==== Returns
  110. # * <tt>Set</tt> - A set of all methods that should be considered actions.
  111. 1 def action_methods
  112. @action_methods ||= begin
  113. # All public instance methods of this class, including ancestors
  114. methods = (public_instance_methods(true) -
  115. # Except for public instance methods of Base and its ancestors
  116. ActionCable::Channel::Base.public_instance_methods(true) +
  117. # Be sure to include shadowed public instance methods of this class
  118. public_instance_methods(false)).uniq.map(&:to_s)
  119. methods.to_set
  120. end
  121. end
  122. 1 private
  123. # action_methods are cached and there is sometimes need to refresh
  124. # them. ::clear_action_methods! allows you to do that, so next time
  125. # you run action_methods, they will be recalculated.
  126. 1 def clear_action_methods! # :doc:
  127. 21 @action_methods = nil
  128. end
  129. # Refresh the cached action_methods when a new action_method is added.
  130. 1 def method_added(name) # :doc:
  131. 21 super
  132. 21 clear_action_methods!
  133. end
  134. end
  135. 1 def initialize(connection, identifier, params = {})
  136. @connection = connection
  137. @identifier = identifier
  138. @params = params
  139. # When a channel is streaming via pubsub, we want to delay the confirmation
  140. # transmission until pubsub subscription is confirmed.
  141. #
  142. # The counter starts at 1 because it's awaiting a call to #subscribe_to_channel
  143. @defer_subscription_confirmation_counter = Concurrent::AtomicFixnum.new(1)
  144. @reject_subscription = nil
  145. @subscription_confirmation_sent = nil
  146. delegate_connection_identifiers
  147. end
  148. # Extract the action name from the passed data and process it via the channel. The process will ensure
  149. # that the action requested is a public method on the channel declared by the user (so not one of the callbacks
  150. # like #subscribed).
  151. 1 def perform_action(data)
  152. action = extract_action(data)
  153. if processable_action?(action)
  154. payload = { channel_class: self.class.name, action: action, data: data }
  155. ActiveSupport::Notifications.instrument("perform_action.action_cable", payload) do
  156. dispatch_action(action, data)
  157. end
  158. else
  159. logger.error "Unable to process #{action_signature(action, data)}"
  160. end
  161. end
  162. # This method is called after subscription has been added to the connection
  163. # and confirms or rejects the subscription.
  164. 1 def subscribe_to_channel
  165. run_callbacks :subscribe do
  166. subscribed
  167. end
  168. reject_subscription if subscription_rejected?
  169. ensure_confirmation_sent
  170. end
  171. # Called by the cable connection when it's cut, so the channel has a chance to cleanup with callbacks.
  172. # This method is not intended to be called directly by the user. Instead, overwrite the #unsubscribed callback.
  173. 1 def unsubscribe_from_channel # :nodoc:
  174. run_callbacks :unsubscribe do
  175. unsubscribed
  176. end
  177. end
  178. 1 private
  179. # Called once a consumer has become a subscriber of the channel. Usually the place to setup any streams
  180. # you want this channel to be sending to the subscriber.
  181. 1 def subscribed # :doc:
  182. # Override in subclasses
  183. end
  184. # Called once a consumer has cut its cable connection. Can be used for cleaning up connections or marking
  185. # users as offline or the like.
  186. 1 def unsubscribed # :doc:
  187. # Override in subclasses
  188. end
  189. # Transmit a hash of data to the subscriber. The hash will automatically be wrapped in a JSON envelope with
  190. # the proper channel identifier marked as the recipient.
  191. 1 def transmit(data, via: nil) # :doc:
  192. status = "#{self.class.name} transmitting #{data.inspect.truncate(300)}"
  193. status += " (via #{via})" if via
  194. logger.debug(status)
  195. payload = { channel_class: self.class.name, data: data, via: via }
  196. ActiveSupport::Notifications.instrument("transmit.action_cable", payload) do
  197. connection.transmit identifier: @identifier, message: data
  198. end
  199. end
  200. 1 def ensure_confirmation_sent # :doc:
  201. return if subscription_rejected?
  202. @defer_subscription_confirmation_counter.decrement
  203. transmit_subscription_confirmation unless defer_subscription_confirmation?
  204. end
  205. 1 def defer_subscription_confirmation! # :doc:
  206. @defer_subscription_confirmation_counter.increment
  207. end
  208. 1 def defer_subscription_confirmation? # :doc:
  209. @defer_subscription_confirmation_counter.value > 0
  210. end
  211. 1 def subscription_confirmation_sent? # :doc:
  212. @subscription_confirmation_sent
  213. end
  214. 1 def reject # :doc:
  215. @reject_subscription = true
  216. end
  217. 1 def subscription_rejected? # :doc:
  218. @reject_subscription
  219. end
  220. 1 def delegate_connection_identifiers
  221. connection.identifiers.each do |identifier|
  222. define_singleton_method(identifier) do
  223. connection.send(identifier)
  224. end
  225. end
  226. end
  227. 1 def extract_action(data)
  228. (data["action"].presence || :receive).to_sym
  229. end
  230. 1 def processable_action?(action)
  231. self.class.action_methods.include?(action.to_s) unless subscription_rejected?
  232. end
  233. 1 def dispatch_action(action, data)
  234. logger.info action_signature(action, data)
  235. if method(action).arity == 1
  236. public_send action, data
  237. else
  238. public_send action
  239. end
  240. end
  241. 1 def action_signature(action, data)
  242. "#{self.class.name}##{action}".dup.tap do |signature|
  243. if (arguments = data.except("action")).any?
  244. signature << "(#{arguments.inspect})"
  245. end
  246. end
  247. end
  248. 1 def transmit_subscription_confirmation
  249. unless subscription_confirmation_sent?
  250. logger.info "#{self.class.name} is transmitting the subscription confirmation"
  251. ActiveSupport::Notifications.instrument("transmit_subscription_confirmation.action_cable", channel_class: self.class.name) do
  252. connection.transmit identifier: @identifier, type: ActionCable::INTERNAL[:message_types][:confirmation]
  253. @subscription_confirmation_sent = true
  254. end
  255. end
  256. end
  257. 1 def reject_subscription
  258. connection.subscriptions.remove_subscription self
  259. transmit_subscription_rejection
  260. end
  261. 1 def transmit_subscription_rejection
  262. logger.info "#{self.class.name} is transmitting the subscription rejection"
  263. ActiveSupport::Notifications.instrument("transmit_subscription_rejection.action_cable", channel_class: self.class.name) do
  264. connection.transmit identifier: @identifier, type: ActionCable::INTERNAL[:message_types][:rejection]
  265. end
  266. end
  267. end
  268. end
  269. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/broadcasting.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/object/to_param"
  3. 1 module ActionCable
  4. 1 module Channel
  5. 1 module Broadcasting
  6. 1 extend ActiveSupport::Concern
  7. 1 delegate :broadcasting_for, to: :class
  8. 1 module ClassMethods
  9. # Broadcast a hash to a unique broadcasting for this <tt>model</tt> in this channel.
  10. 1 def broadcast_to(model, message)
  11. ActionCable.server.broadcast(broadcasting_for([ channel_name, model ]), message)
  12. end
  13. 1 def broadcasting_for(model) #:nodoc:
  14. case
  15. when model.is_a?(Array)
  16. model.map { |m| broadcasting_for(m) }.join(":")
  17. when model.respond_to?(:to_gid_param)
  18. model.to_gid_param
  19. else
  20. model.to_param
  21. end
  22. end
  23. end
  24. end
  25. end
  26. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/callbacks.rb

90.0% lines covered

20 relevant lines. 18 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/callbacks"
  3. 1 module ActionCable
  4. 1 module Channel
  5. 1 module Callbacks
  6. 1 extend ActiveSupport::Concern
  7. 1 include ActiveSupport::Callbacks
  8. 1 included do
  9. 1 define_callbacks :subscribe
  10. 1 define_callbacks :unsubscribe
  11. end
  12. 1 module ClassMethods
  13. 1 def before_subscribe(*methods, &block)
  14. set_callback(:subscribe, :before, *methods, &block)
  15. end
  16. 1 def after_subscribe(*methods, &block)
  17. 1 set_callback(:subscribe, :after, *methods, &block)
  18. end
  19. 1 alias_method :on_subscribe, :after_subscribe
  20. 1 def before_unsubscribe(*methods, &block)
  21. set_callback(:unsubscribe, :before, *methods, &block)
  22. end
  23. 1 def after_unsubscribe(*methods, &block)
  24. 2 set_callback(:unsubscribe, :after, *methods, &block)
  25. end
  26. 1 alias_method :on_unsubscribe, :after_unsubscribe
  27. end
  28. end
  29. end
  30. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/naming.rb

87.5% lines covered

8 relevant lines. 7 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Channel
  4. 1 module Naming
  5. 1 extend ActiveSupport::Concern
  6. 1 module ClassMethods
  7. # Returns the name of the channel, underscored, without the <tt>Channel</tt> ending.
  8. # If the channel is in a namespace, then the namespaces are represented by single
  9. # colon separators in the channel name.
  10. #
  11. # ChatChannel.channel_name # => 'chat'
  12. # Chats::AppearancesChannel.channel_name # => 'chats:appearances'
  13. # FooChats::BarAppearancesChannel.channel_name # => 'foo_chats:bar_appearances'
  14. 1 def channel_name
  15. @channel_name ||= name.sub(/Channel$/, "").gsub("::", ":").underscore
  16. end
  17. end
  18. # Delegates to the class' <tt>channel_name</tt>
  19. 1 delegate :channel_name, to: :class
  20. end
  21. end
  22. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/periodic_timers.rb

46.88% lines covered

32 relevant lines. 15 lines covered and 17 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Channel
  4. 1 module PeriodicTimers
  5. 1 extend ActiveSupport::Concern
  6. 1 included do
  7. 1 class_attribute :periodic_timers, instance_reader: false, default: []
  8. 1 after_subscribe :start_periodic_timers
  9. 1 after_unsubscribe :stop_periodic_timers
  10. end
  11. 1 module ClassMethods
  12. # Periodically performs a task on the channel, like updating an online
  13. # user counter, polling a backend for new status messages, sending
  14. # regular "heartbeat" messages, or doing some internal work and giving
  15. # progress updates.
  16. #
  17. # Pass a method name or lambda argument or provide a block to call.
  18. # Specify the calling period in seconds using the <tt>every:</tt>
  19. # keyword argument.
  20. #
  21. # periodically :transmit_progress, every: 5.seconds
  22. #
  23. # periodically every: 3.minutes do
  24. # transmit action: :update_count, count: current_count
  25. # end
  26. #
  27. 1 def periodically(callback_or_method_name = nil, every:, &block)
  28. callback =
  29. if block_given?
  30. raise ArgumentError, "Pass a block or provide a callback arg, not both" if callback_or_method_name
  31. block
  32. else
  33. case callback_or_method_name
  34. when Proc
  35. callback_or_method_name
  36. when Symbol
  37. -> { __send__ callback_or_method_name }
  38. else
  39. raise ArgumentError, "Expected a Symbol method name or a Proc, got #{callback_or_method_name.inspect}"
  40. end
  41. end
  42. unless every.kind_of?(Numeric) && every > 0
  43. raise ArgumentError, "Expected every: to be a positive number of seconds, got #{every.inspect}"
  44. end
  45. self.periodic_timers += [[ callback, every: every ]]
  46. end
  47. end
  48. 1 private
  49. 1 def active_periodic_timers
  50. @active_periodic_timers ||= []
  51. end
  52. 1 def start_periodic_timers
  53. self.class.periodic_timers.each do |callback, options|
  54. active_periodic_timers << start_periodic_timer(callback, every: options.fetch(:every))
  55. end
  56. end
  57. 1 def start_periodic_timer(callback, every:)
  58. connection.server.event_loop.timer every do
  59. connection.worker_pool.async_exec self, connection: connection, &callback
  60. end
  61. end
  62. 1 def stop_periodic_timers
  63. active_periodic_timers.each { |timer| timer.shutdown }
  64. active_periodic_timers.clear
  65. end
  66. end
  67. end
  68. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/channel/streams.rb

39.13% lines covered

46 relevant lines. 18 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Channel
  4. # Streams allow channels to route broadcastings to the subscriber. A broadcasting is, as discussed elsewhere, a pubsub queue where any data
  5. # placed into it is automatically sent to the clients that are connected at that time. It's purely an online queue, though. If you're not
  6. # streaming a broadcasting at the very moment it sends out an update, you will not get that update, even if you connect after it has been sent.
  7. #
  8. # Most commonly, the streamed broadcast is sent straight to the subscriber on the client-side. The channel just acts as a connector between
  9. # the two parties (the broadcaster and the channel subscriber). Here's an example of a channel that allows subscribers to get all new
  10. # comments on a given page:
  11. #
  12. # class CommentsChannel < ApplicationCable::Channel
  13. # def follow(data)
  14. # stream_from "comments_for_#{data['recording_id']}"
  15. # end
  16. #
  17. # def unfollow
  18. # stop_all_streams
  19. # end
  20. # end
  21. #
  22. # Based on the above example, the subscribers of this channel will get whatever data is put into the,
  23. # let's say, <tt>comments_for_45</tt> broadcasting as soon as it's put there.
  24. #
  25. # An example broadcasting for this channel looks like so:
  26. #
  27. # ActionCable.server.broadcast "comments_for_45", author: 'DHH', content: 'Rails is just swell'
  28. #
  29. # If you have a stream that is related to a model, then the broadcasting used can be generated from the model and channel.
  30. # The following example would subscribe to a broadcasting like <tt>comments:Z2lkOi8vVGVzdEFwcC9Qb3N0LzE</tt>.
  31. #
  32. # class CommentsChannel < ApplicationCable::Channel
  33. # def subscribed
  34. # post = Post.find(params[:id])
  35. # stream_for post
  36. # end
  37. # end
  38. #
  39. # You can then broadcast to this channel using:
  40. #
  41. # CommentsChannel.broadcast_to(@post, @comment)
  42. #
  43. # If you don't just want to parlay the broadcast unfiltered to the subscriber, you can also supply a callback that lets you alter what is sent out.
  44. # The below example shows how you can use this to provide performance introspection in the process:
  45. #
  46. # class ChatChannel < ApplicationCable::Channel
  47. # def subscribed
  48. # @room = Chat::Room[params[:room_number]]
  49. #
  50. # stream_for @room, coder: ActiveSupport::JSON do |message|
  51. # if message['originated_at'].present?
  52. # elapsed_time = (Time.now.to_f - message['originated_at']).round(2)
  53. #
  54. # ActiveSupport::Notifications.instrument :performance, measurement: 'Chat.message_delay', value: elapsed_time, action: :timing
  55. # logger.info "Message took #{elapsed_time}s to arrive"
  56. # end
  57. #
  58. # transmit message
  59. # end
  60. # end
  61. # end
  62. #
  63. # You can stop streaming from all broadcasts by calling #stop_all_streams.
  64. 1 module Streams
  65. 1 extend ActiveSupport::Concern
  66. 1 included do
  67. 1 on_unsubscribe :stop_all_streams
  68. end
  69. # Start streaming from the named <tt>broadcasting</tt> pubsub queue. Optionally, you can pass a <tt>callback</tt> that'll be used
  70. # instead of the default of just transmitting the updates straight to the subscriber.
  71. # Pass <tt>coder: ActiveSupport::JSON</tt> to decode messages as JSON before passing to the callback.
  72. # Defaults to <tt>coder: nil</tt> which does no decoding, passes raw messages.
  73. 1 def stream_from(broadcasting, callback = nil, coder: nil, &block)
  74. broadcasting = String(broadcasting)
  75. # Don't send the confirmation until pubsub#subscribe is successful
  76. defer_subscription_confirmation!
  77. # Build a stream handler by wrapping the user-provided callback with
  78. # a decoder or defaulting to a JSON-decoding retransmitter.
  79. handler = worker_pool_stream_handler(broadcasting, callback || block, coder: coder)
  80. streams << [ broadcasting, handler ]
  81. connection.server.event_loop.post do
  82. pubsub.subscribe(broadcasting, handler, lambda do
  83. ensure_confirmation_sent
  84. logger.info "#{self.class.name} is streaming from #{broadcasting}"
  85. end)
  86. end
  87. end
  88. # Start streaming the pubsub queue for the <tt>model</tt> in this channel. Optionally, you can pass a
  89. # <tt>callback</tt> that'll be used instead of the default of just transmitting the updates straight
  90. # to the subscriber.
  91. #
  92. # Pass <tt>coder: ActiveSupport::JSON</tt> to decode messages as JSON before passing to the callback.
  93. # Defaults to <tt>coder: nil</tt> which does no decoding, passes raw messages.
  94. 1 def stream_for(model, callback = nil, coder: nil, &block)
  95. stream_from(broadcasting_for([ channel_name, model ]), callback || block, coder: coder)
  96. end
  97. # Unsubscribes all streams associated with this channel from the pubsub queue.
  98. 1 def stop_all_streams
  99. streams.each do |broadcasting, callback|
  100. pubsub.unsubscribe broadcasting, callback
  101. logger.info "#{self.class.name} stopped streaming from #{broadcasting}"
  102. end.clear
  103. end
  104. 1 private
  105. 1 delegate :pubsub, to: :connection
  106. 1 def streams
  107. @_streams ||= []
  108. end
  109. # Always wrap the outermost handler to invoke the user handler on the
  110. # worker pool rather than blocking the event loop.
  111. 1 def worker_pool_stream_handler(broadcasting, user_handler, coder: nil)
  112. handler = stream_handler(broadcasting, user_handler, coder: coder)
  113. -> message do
  114. connection.worker_pool.async_invoke handler, :call, message, connection: connection
  115. end
  116. end
  117. # May be overridden to add instrumentation, logging, specialized error
  118. # handling, or other forms of handler decoration.
  119. #
  120. # TODO: Tests demonstrating this.
  121. 1 def stream_handler(broadcasting, user_handler, coder: nil)
  122. if user_handler
  123. stream_decoder user_handler, coder: coder
  124. else
  125. default_stream_handler broadcasting, coder: coder
  126. end
  127. end
  128. # May be overridden to change the default stream handling behavior
  129. # which decodes JSON and transmits to the client.
  130. #
  131. # TODO: Tests demonstrating this.
  132. #
  133. # TODO: Room for optimization. Update transmit API to be coder-aware
  134. # so we can no-op when pubsub and connection are both JSON-encoded.
  135. # Then we can skip decode+encode if we're just proxying messages.
  136. 1 def default_stream_handler(broadcasting, coder:)
  137. coder ||= ActiveSupport::JSON
  138. stream_transmitter stream_decoder(coder: coder), broadcasting: broadcasting
  139. end
  140. 1 def stream_decoder(handler = identity_handler, coder:)
  141. if coder
  142. -> message { handler.(coder.decode(message)) }
  143. else
  144. handler
  145. end
  146. end
  147. 1 def stream_transmitter(handler = identity_handler, broadcasting:)
  148. via = "streamed from #{broadcasting}"
  149. -> (message) do
  150. transmit handler.(message), via: via
  151. end
  152. end
  153. 1 def identity_handler
  154. -> message { message }
  155. end
  156. end
  157. end
  158. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection.rb

100.0% lines covered

15 relevant lines. 15 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Connection
  4. 1 extend ActiveSupport::Autoload
  5. 1 eager_autoload do
  6. 1 autoload :Authorization
  7. 1 autoload :Base
  8. 1 autoload :ClientSocket
  9. 1 autoload :Identification
  10. 1 autoload :InternalChannel
  11. 1 autoload :MessageBuffer
  12. 1 autoload :Stream
  13. 1 autoload :StreamEventLoop
  14. 1 autoload :Subscriptions
  15. 1 autoload :TaggedLoggerProxy
  16. 1 autoload :WebSocket
  17. end
  18. end
  19. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/authorization.rb

71.43% lines covered

7 relevant lines. 5 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Connection
  4. 1 module Authorization
  5. 1 class UnauthorizedError < StandardError; end
  6. # Closes the \WebSocket connection if it is open and returns a 404 "File not Found" response.
  7. 1 def reject_unauthorized_connection
  8. logger.error "An unauthorized connection attempt was rejected"
  9. raise UnauthorizedError
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/base.rb

39.05% lines covered

105 relevant lines. 41 lines covered and 64 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch"
  3. 1 module ActionCable
  4. 1 module Connection
  5. # For every WebSocket connection the Action Cable server accepts, a Connection object will be instantiated. This instance becomes the parent
  6. # of all of the channel subscriptions that are created from there on. Incoming messages are then routed to these channel subscriptions
  7. # based on an identifier sent by the Action Cable consumer. The Connection itself does not deal with any specific application logic beyond
  8. # authentication and authorization.
  9. #
  10. # Here's a basic example:
  11. #
  12. # module ApplicationCable
  13. # class Connection < ActionCable::Connection::Base
  14. # identified_by :current_user
  15. #
  16. # def connect
  17. # self.current_user = find_verified_user
  18. # logger.add_tags current_user.name
  19. # end
  20. #
  21. # def disconnect
  22. # # Any cleanup work needed when the cable connection is cut.
  23. # end
  24. #
  25. # private
  26. # def find_verified_user
  27. # User.find_by_identity(cookies.encrypted[:identity_id]) ||
  28. # reject_unauthorized_connection
  29. # end
  30. # end
  31. # end
  32. #
  33. # First, we declare that this connection can be identified by its current_user. This allows us to later be able to find all connections
  34. # established for that current_user (and potentially disconnect them). You can declare as many
  35. # identification indexes as you like. Declaring an identification means that an attr_accessor is automatically set for that key.
  36. #
  37. # Second, we rely on the fact that the WebSocket connection is established with the cookies from the domain being sent along. This makes
  38. # it easy to use signed cookies that were set when logging in via a web interface to authorize the WebSocket connection.
  39. #
  40. # Finally, we add a tag to the connection-specific logger with the name of the current user to easily distinguish their messages in the log.
  41. #
  42. # Pretty simple, eh?
  43. 1 class Base
  44. 1 include Identification
  45. 1 include InternalChannel
  46. 1 include Authorization
  47. 1 attr_reader :server, :env, :subscriptions, :logger, :worker_pool, :protocol
  48. 1 delegate :event_loop, :pubsub, to: :server
  49. 1 def initialize(server, env, coder: ActiveSupport::JSON)
  50. @server, @env, @coder = server, env, coder
  51. @worker_pool = server.worker_pool
  52. @logger = new_tagged_logger
  53. @websocket = ActionCable::Connection::WebSocket.new(env, self, event_loop)
  54. @subscriptions = ActionCable::Connection::Subscriptions.new(self)
  55. @message_buffer = ActionCable::Connection::MessageBuffer.new(self)
  56. @_internal_subscriptions = nil
  57. @started_at = Time.now
  58. end
  59. # Called by the server when a new WebSocket connection is established. This configures the callbacks intended for overwriting by the user.
  60. # This method should not be called directly -- instead rely upon on the #connect (and #disconnect) callbacks.
  61. 1 def process #:nodoc:
  62. logger.info started_request_message
  63. if websocket.possible? && allow_request_origin?
  64. respond_to_successful_request
  65. else
  66. respond_to_invalid_request
  67. end
  68. end
  69. # Decodes WebSocket messages and dispatches them to subscribed channels.
  70. # WebSocket message transfer encoding is always JSON.
  71. 1 def receive(websocket_message) #:nodoc:
  72. send_async :dispatch_websocket_message, websocket_message
  73. end
  74. 1 def dispatch_websocket_message(websocket_message) #:nodoc:
  75. if websocket.alive?
  76. subscriptions.execute_command decode(websocket_message)
  77. else
  78. logger.error "Ignoring message processed after the WebSocket was closed: #{websocket_message.inspect})"
  79. end
  80. end
  81. 1 def transmit(cable_message) # :nodoc:
  82. websocket.transmit encode(cable_message)
  83. end
  84. # Close the WebSocket connection.
  85. 1 def close
  86. websocket.close
  87. end
  88. # Invoke a method on the connection asynchronously through the pool of thread workers.
  89. 1 def send_async(method, *arguments)
  90. worker_pool.async_invoke(self, method, *arguments)
  91. end
  92. # Return a basic hash of statistics for the connection keyed with <tt>identifier</tt>, <tt>started_at</tt>, <tt>subscriptions</tt>, and <tt>request_id</tt>.
  93. # This can be returned by a health check against the connection.
  94. 1 def statistics
  95. {
  96. identifier: connection_identifier,
  97. started_at: @started_at,
  98. subscriptions: subscriptions.identifiers,
  99. request_id: @env["action_dispatch.request_id"]
  100. }
  101. end
  102. 1 def beat
  103. transmit type: ActionCable::INTERNAL[:message_types][:ping], message: Time.now.to_i
  104. end
  105. 1 def on_open # :nodoc:
  106. send_async :handle_open
  107. end
  108. 1 def on_message(message) # :nodoc:
  109. message_buffer.append message
  110. end
  111. 1 def on_error(message) # :nodoc:
  112. # log errors to make diagnosing socket errors easier
  113. logger.error "WebSocket error occurred: #{message}"
  114. end
  115. 1 def on_close(reason, code) # :nodoc:
  116. send_async :handle_close
  117. end
  118. # TODO Change this to private once we've dropped Ruby 2.2 support.
  119. # Workaround for Ruby 2.2 "private attribute?" warning.
  120. 1 protected
  121. 1 attr_reader :websocket
  122. 1 attr_reader :message_buffer
  123. 1 private
  124. # The request that initiated the WebSocket connection is available here. This gives access to the environment, cookies, etc.
  125. 1 def request # :doc:
  126. @request ||= begin
  127. environment = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
  128. ActionDispatch::Request.new(environment || env)
  129. end
  130. end
  131. # The cookies of the request that initiated the WebSocket connection. Useful for performing authorization checks.
  132. 1 def cookies # :doc:
  133. request.cookie_jar
  134. end
  135. 1 def encode(cable_message)
  136. @coder.encode cable_message
  137. end
  138. 1 def decode(websocket_message)
  139. @coder.decode websocket_message
  140. end
  141. 1 def handle_open
  142. @protocol = websocket.protocol
  143. connect if respond_to?(:connect)
  144. subscribe_to_internal_channel
  145. send_welcome_message
  146. message_buffer.process!
  147. server.add_connection(self)
  148. rescue ActionCable::Connection::Authorization::UnauthorizedError
  149. respond_to_invalid_request
  150. end
  151. 1 def handle_close
  152. logger.info finished_request_message
  153. server.remove_connection(self)
  154. subscriptions.unsubscribe_from_all
  155. unsubscribe_from_internal_channel
  156. disconnect if respond_to?(:disconnect)
  157. end
  158. 1 def send_welcome_message
  159. # Send welcome message to the internal connection monitor channel.
  160. # This ensures the connection monitor state is reset after a successful
  161. # websocket connection.
  162. transmit type: ActionCable::INTERNAL[:message_types][:welcome]
  163. end
  164. 1 def allow_request_origin?
  165. return true if server.config.disable_request_forgery_protection
  166. proto = Rack::Request.new(env).ssl? ? "https" : "http"
  167. if server.config.allow_same_origin_as_host && env["HTTP_ORIGIN"] == "#{proto}://#{env['HTTP_HOST']}"
  168. true
  169. elsif Array(server.config.allowed_request_origins).any? { |allowed_origin| allowed_origin === env["HTTP_ORIGIN"] }
  170. true
  171. else
  172. logger.error("Request origin not allowed: #{env['HTTP_ORIGIN']}")
  173. false
  174. end
  175. end
  176. 1 def respond_to_successful_request
  177. logger.info successful_request_message
  178. websocket.rack_response
  179. end
  180. 1 def respond_to_invalid_request
  181. close if websocket.alive?
  182. logger.error invalid_request_message
  183. logger.info finished_request_message
  184. [ 404, { "Content-Type" => "text/plain" }, [ "Page not found" ] ]
  185. end
  186. # Tags are declared in the server but computed in the connection. This allows us per-connection tailored tags.
  187. 1 def new_tagged_logger
  188. TaggedLoggerProxy.new server.logger,
  189. tags: server.config.log_tags.map { |tag| tag.respond_to?(:call) ? tag.call(request) : tag.to_s.camelize }
  190. end
  191. 1 def started_request_message
  192. 'Started %s "%s"%s for %s at %s' % [
  193. request.request_method,
  194. request.filtered_path,
  195. websocket.possible? ? " [WebSocket]" : "[non-WebSocket]",
  196. request.ip,
  197. Time.now.to_s ]
  198. end
  199. 1 def finished_request_message
  200. 'Finished "%s"%s for %s at %s' % [
  201. request.filtered_path,
  202. websocket.possible? ? " [WebSocket]" : "[non-WebSocket]",
  203. request.ip,
  204. Time.now.to_s ]
  205. end
  206. 1 def invalid_request_message
  207. "Failed to upgrade to WebSocket (REQUEST_METHOD: %s, HTTP_CONNECTION: %s, HTTP_UPGRADE: %s)" % [
  208. env["REQUEST_METHOD"], env["HTTP_CONNECTION"], env["HTTP_UPGRADE"]
  209. ]
  210. end
  211. 1 def successful_request_message
  212. "Successfully upgraded to WebSocket (REQUEST_METHOD: %s, HTTP_CONNECTION: %s, HTTP_UPGRADE: %s)" % [
  213. env["REQUEST_METHOD"], env["HTTP_CONNECTION"], env["HTTP_UPGRADE"]
  214. ]
  215. end
  216. end
  217. end
  218. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/identification.rb

57.14% lines covered

21 relevant lines. 12 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "set"
  3. 1 module ActionCable
  4. 1 module Connection
  5. 1 module Identification
  6. 1 extend ActiveSupport::Concern
  7. 1 included do
  8. 1 class_attribute :identifiers, default: Set.new
  9. end
  10. 1 module ClassMethods
  11. # Mark a key as being a connection identifier index that can then be used to find the specific connection again later.
  12. # Common identifiers are current_user and current_account, but could be anything, really.
  13. #
  14. # Note that anything marked as an identifier will automatically create a delegate by the same name on any
  15. # channel instances created off the connection.
  16. 1 def identified_by(*identifiers)
  17. Array(identifiers).each { |identifier| attr_accessor identifier }
  18. self.identifiers += identifiers
  19. end
  20. end
  21. # Return a single connection identifier that combines the value of all the registered identifiers into a single gid.
  22. 1 def connection_identifier
  23. unless defined? @connection_identifier
  24. @connection_identifier = connection_gid identifiers.map { |id| instance_variable_get("@#{id}") }.compact
  25. end
  26. @connection_identifier
  27. end
  28. 1 private
  29. 1 def connection_gid(ids)
  30. ids.map do |o|
  31. if o.respond_to? :to_gid_param
  32. o.to_gid_param
  33. else
  34. o.to_s
  35. end
  36. end.sort.join(":")
  37. end
  38. end
  39. end
  40. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/connection/internal_channel.rb

37.5% lines covered

24 relevant lines. 9 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Connection
  4. # Makes it possible for the RemoteConnection to disconnect a specific connection.
  5. 1 module InternalChannel
  6. 1 extend ActiveSupport::Concern
  7. 1 private
  8. 1 def internal_channel
  9. "action_cable/#{connection_identifier}"
  10. end
  11. 1 def subscribe_to_internal_channel
  12. if connection_identifier.present?
  13. callback = -> (message) { process_internal_message decode(message) }
  14. @_internal_subscriptions ||= []
  15. @_internal_subscriptions << [ internal_channel, callback ]
  16. server.event_loop.post { pubsub.subscribe(internal_channel, callback) }
  17. logger.info "Registered connection (#{connection_identifier})"
  18. end
  19. end
  20. 1 def unsubscribe_from_internal_channel
  21. if @_internal_subscriptions.present?
  22. @_internal_subscriptions.each { |channel, callback| server.event_loop.post { pubsub.unsubscribe(channel, callback) } }
  23. end
  24. end
  25. 1 def process_internal_message(message)
  26. case message["type"]
  27. when "disconnect"
  28. logger.info "Removing connection (#{connection_identifier})"
  29. websocket.close
  30. end
  31. rescue Exception => e
  32. logger.error "There was an exception - #{e.class}(#{e.message})"
  33. logger.error e.backtrace.join("\n")
  34. close
  35. end
  36. end
  37. end
  38. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server.rb

100.0% lines covered

10 relevant lines. 10 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Server
  4. 1 extend ActiveSupport::Autoload
  5. 1 eager_autoload do
  6. 1 autoload :Base
  7. 1 autoload :Broadcasting
  8. 1 autoload :Connections
  9. 1 autoload :Configuration
  10. 1 autoload :Worker
  11. 1 autoload :ActiveRecordConnectionManagement, "action_cable/server/worker/active_record_connection_management"
  12. end
  13. end
  14. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/base.rb

61.11% lines covered

36 relevant lines. 22 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "monitor"
  3. 1 module ActionCable
  4. 1 module Server
  5. # A singleton ActionCable::Server instance is available via ActionCable.server. It's used by the Rack process that starts the Action Cable server, but
  6. # is also used by the user to reach the RemoteConnections object, which is used for finding and disconnecting connections across all servers.
  7. #
  8. # Also, this is the server instance used for broadcasting. See Broadcasting for more information.
  9. 1 class Base
  10. 1 include ActionCable::Server::Broadcasting
  11. 1 include ActionCable::Server::Connections
  12. 1 cattr_accessor :config, instance_accessor: true, default: ActionCable::Server::Configuration.new
  13. 1 def self.logger; config.logger; end
  14. 1 delegate :logger, to: :config
  15. 1 attr_reader :mutex
  16. 1 def initialize
  17. 1 @mutex = Monitor.new
  18. 1 @remote_connections = @event_loop = @worker_pool = @pubsub = nil
  19. end
  20. # Called by Rack to setup the server.
  21. 1 def call(env)
  22. setup_heartbeat_timer
  23. config.connection_class.call.new(self, env).process
  24. end
  25. # Disconnect all the connections identified by +identifiers+ on this server or any others via RemoteConnections.
  26. 1 def disconnect(identifiers)
  27. remote_connections.where(identifiers).disconnect
  28. end
  29. 1 def restart
  30. connections.each(&:close)
  31. @mutex.synchronize do
  32. # Shutdown the worker pool
  33. @worker_pool.halt if @worker_pool
  34. @worker_pool = nil
  35. # Shutdown the pub/sub adapter
  36. @pubsub.shutdown if @pubsub
  37. @pubsub = nil
  38. end
  39. end
  40. # Gateway to RemoteConnections. See that class for details.
  41. 1 def remote_connections
  42. @remote_connections || @mutex.synchronize { @remote_connections ||= RemoteConnections.new(self) }
  43. end
  44. 1 def event_loop
  45. @event_loop || @mutex.synchronize { @event_loop ||= ActionCable::Connection::StreamEventLoop.new }
  46. end
  47. # The worker pool is where we run connection callbacks and channel actions. We do as little as possible on the server's main thread.
  48. # The worker pool is an executor service that's backed by a pool of threads working from a task queue. The thread pool size maxes out
  49. # at 4 worker threads by default. Tune the size yourself with <tt>config.action_cable.worker_pool_size</tt>.
  50. #
  51. # Using Active Record, Redis, etc within your channel actions means you'll get a separate connection from each thread in the worker pool.
  52. # Plan your deployment accordingly: 5 servers each running 5 Puma workers each running an 8-thread worker pool means at least 200 database
  53. # connections.
  54. #
  55. # Also, ensure that your database connection pool size is as least as large as your worker pool size. Otherwise, workers may oversubscribe
  56. # the database connection pool and block while they wait for other workers to release their connections. Use a smaller worker pool or a larger
  57. # database connection pool instead.
  58. 1 def worker_pool
  59. @worker_pool || @mutex.synchronize { @worker_pool ||= ActionCable::Server::Worker.new(max_size: config.worker_pool_size) }
  60. end
  61. # Adapter used for all streams/broadcasting.
  62. 1 def pubsub
  63. @pubsub || @mutex.synchronize { @pubsub ||= config.pubsub_adapter.new(self) }
  64. end
  65. # All of the identifiers applied to the connection class associated with this server.
  66. 1 def connection_identifiers
  67. config.connection_class.call.identifiers
  68. end
  69. end
  70. 1 ActiveSupport.run_load_hooks(:action_cable, Base.config)
  71. end
  72. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/broadcasting.rb

55.56% lines covered

18 relevant lines. 10 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Server
  4. # Broadcasting is how other parts of your application can send messages to a channel's subscribers. As explained in Channel, most of the time, these
  5. # broadcastings are streamed directly to the clients subscribed to the named broadcasting. Let's explain with a full-stack example:
  6. #
  7. # class WebNotificationsChannel < ApplicationCable::Channel
  8. # def subscribed
  9. # stream_from "web_notifications_#{current_user.id}"
  10. # end
  11. # end
  12. #
  13. # # Somewhere in your app this is called, perhaps from a NewCommentJob:
  14. # ActionCable.server.broadcast \
  15. # "web_notifications_1", { title: "New things!", body: "All that's fit for print" }
  16. #
  17. # # Client-side CoffeeScript, which assumes you've already requested the right to send web notifications:
  18. # App.cable.subscriptions.create "WebNotificationsChannel",
  19. # received: (data) ->
  20. # new Notification data['title'], body: data['body']
  21. 1 module Broadcasting
  22. # Broadcast a hash directly to a named <tt>broadcasting</tt>. This will later be JSON encoded.
  23. 1 def broadcast(broadcasting, message, coder: ActiveSupport::JSON)
  24. broadcaster_for(broadcasting, coder: coder).broadcast(message)
  25. end
  26. # Returns a broadcaster for a named <tt>broadcasting</tt> that can be reused. Useful when you have an object that
  27. # may need multiple spots to transmit to a specific broadcasting over and over.
  28. 1 def broadcaster_for(broadcasting, coder: ActiveSupport::JSON)
  29. Broadcaster.new(self, String(broadcasting), coder: coder)
  30. end
  31. 1 private
  32. 1 class Broadcaster
  33. 1 attr_reader :server, :broadcasting, :coder
  34. 1 def initialize(server, broadcasting, coder:)
  35. @server, @broadcasting, @coder = server, broadcasting, coder
  36. end
  37. 1 def broadcast(message)
  38. server.logger.debug "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}"
  39. payload = { broadcasting: broadcasting, message: message, coder: coder }
  40. ActiveSupport::Notifications.instrument("broadcast.action_cable", payload) do
  41. encoded = coder ? coder.encode(message) : message
  42. server.pubsub.broadcast broadcasting, encoded
  43. end
  44. end
  45. end
  46. end
  47. end
  48. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/configuration.rb

58.33% lines covered

24 relevant lines. 14 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Server
  4. # An instance of this configuration object is available via ActionCable.server.config, which allows you to tweak Action Cable configuration
  5. # in a Rails config initializer.
  6. 1 class Configuration
  7. 1 attr_accessor :logger, :log_tags
  8. 1 attr_accessor :connection_class, :worker_pool_size
  9. 1 attr_accessor :disable_request_forgery_protection, :allowed_request_origins, :allow_same_origin_as_host
  10. 1 attr_accessor :cable, :url, :mount_path
  11. 1 def initialize
  12. 1 @log_tags = []
  13. 1 @connection_class = -> { ActionCable::Connection::Base }
  14. 1 @worker_pool_size = 4
  15. 1 @disable_request_forgery_protection = false
  16. 1 @allow_same_origin_as_host = true
  17. end
  18. # Returns constant of subscription adapter specified in config/cable.yml.
  19. # If the adapter cannot be found, this will default to the Redis adapter.
  20. # Also makes sure proper dependencies are required.
  21. 1 def pubsub_adapter
  22. adapter = (cable.fetch("adapter") { "redis" })
  23. # Require the adapter itself and give useful feedback about
  24. # 1. Missing adapter gems and
  25. # 2. Adapter gems' missing dependencies.
  26. path_to_adapter = "action_cable/subscription_adapter/#{adapter}"
  27. begin
  28. require path_to_adapter
  29. rescue LoadError => e
  30. # We couldn't require the adapter itself. Raise an exception that
  31. # points out config typos and missing gems.
  32. if e.path == path_to_adapter
  33. # We can assume that a non-builtin adapter was specified, so it's
  34. # either misspelled or missing from Gemfile.
  35. raise e.class, "Could not load the '#{adapter}' Action Cable pubsub adapter. Ensure that the adapter is spelled correctly in config/cable.yml and that you've added the necessary adapter gem to your Gemfile.", e.backtrace
  36. # Bubbled up from the adapter require. Prefix the exception message
  37. # with some guidance about how to address it and reraise.
  38. else
  39. raise e.class, "Error loading the '#{adapter}' Action Cable pubsub adapter. Missing a gem it depends on? #{e.message}", e.backtrace
  40. end
  41. end
  42. adapter = adapter.camelize
  43. adapter = "PostgreSQL" if adapter == "Postgresql"
  44. "ActionCable::SubscriptionAdapter::#{adapter}".constantize
  45. end
  46. end
  47. end
  48. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/connections.rb

60.0% lines covered

15 relevant lines. 9 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Server
  4. # Collection class for all the connections that have been established on this specific server. Remember, usually you'll run many Action Cable servers, so
  5. # you can't use this collection as a full list of all of the connections established against your application. Instead, use RemoteConnections for that.
  6. 1 module Connections # :nodoc:
  7. 1 BEAT_INTERVAL = 3
  8. 1 def connections
  9. @connections ||= []
  10. end
  11. 1 def add_connection(connection)
  12. connections << connection
  13. end
  14. 1 def remove_connection(connection)
  15. connections.delete connection
  16. end
  17. # WebSocket connection implementations differ on when they'll mark a connection as stale. We basically never want a connection to go stale, as you
  18. # then can't rely on being able to communicate with the connection. To solve this, a 3 second heartbeat runs on all connections. If the beat fails, we automatically
  19. # disconnect.
  20. 1 def setup_heartbeat_timer
  21. @heartbeat_timer ||= event_loop.timer(BEAT_INTERVAL) do
  22. event_loop.post { connections.map(&:beat) }
  23. end
  24. end
  25. 1 def open_connections_statistics
  26. connections.map(&:statistics)
  27. end
  28. end
  29. end
  30. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker.rb

54.05% lines covered

37 relevant lines. 20 lines covered and 17 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/callbacks"
  3. 1 require "active_support/core_ext/module/attribute_accessors_per_thread"
  4. 1 require "concurrent"
  5. 1 module ActionCable
  6. 1 module Server
  7. # Worker used by Server.send_async to do connection work in threads.
  8. 1 class Worker # :nodoc:
  9. 1 include ActiveSupport::Callbacks
  10. 1 thread_mattr_accessor :connection
  11. 1 define_callbacks :work
  12. 1 include ActiveRecordConnectionManagement
  13. 1 attr_reader :executor
  14. 1 def initialize(max_size: 5)
  15. @executor = Concurrent::ThreadPoolExecutor.new(
  16. min_threads: 1,
  17. max_threads: max_size,
  18. max_queue: 0,
  19. )
  20. end
  21. # Stop processing work: any work that has not already started
  22. # running will be discarded from the queue
  23. 1 def halt
  24. @executor.shutdown
  25. end
  26. 1 def stopping?
  27. @executor.shuttingdown?
  28. end
  29. 1 def work(connection)
  30. self.connection = connection
  31. run_callbacks :work do
  32. yield
  33. end
  34. ensure
  35. self.connection = nil
  36. end
  37. 1 def async_exec(receiver, *args, connection:, &block)
  38. async_invoke receiver, :instance_exec, *args, connection: connection, &block
  39. end
  40. 1 def async_invoke(receiver, method, *args, connection: receiver, &block)
  41. @executor.post do
  42. invoke(receiver, method, *args, connection: connection, &block)
  43. end
  44. end
  45. 1 def invoke(receiver, method, *args, connection:, &block)
  46. work(connection) do
  47. begin
  48. receiver.send method, *args, &block
  49. rescue Exception => e
  50. logger.error "There was an exception - #{e.class}(#{e.message})"
  51. logger.error e.backtrace.join("\n")
  52. receiver.handle_exception if receiver.respond_to?(:handle_exception)
  53. end
  54. end
  55. end
  56. 1 private
  57. 1 def logger
  58. ActionCable.server.logger
  59. end
  60. end
  61. end
  62. end

target/rubygems/gems/actioncable-5.2.3/lib/action_cable/server/worker/active_record_connection_management.rb

90.0% lines covered

10 relevant lines. 9 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionCable
  3. 1 module Server
  4. 1 class Worker
  5. 1 module ActiveRecordConnectionManagement
  6. 1 extend ActiveSupport::Concern
  7. 1 included do
  8. 1 if defined?(ActiveRecord::Base)
  9. 1 set_callback :work, :around, :with_database_connections
  10. end
  11. end
  12. 1 def with_database_connections
  13. connection.logger.tag(ActiveRecord::Base.logger) { yield }
  14. end
  15. end
  16. end
  17. end
  18. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/base.rb

43.75% lines covered

192 relevant lines. 84 lines covered and 108 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail"
  3. 1 require "action_mailer/collector"
  4. 1 require "active_support/core_ext/string/inflections"
  5. 1 require "active_support/core_ext/hash/except"
  6. 1 require "active_support/core_ext/module/anonymous"
  7. 1 require "action_mailer/log_subscriber"
  8. 1 require "action_mailer/rescuable"
  9. 1 module ActionMailer
  10. # Action Mailer allows you to send email from your application using a mailer model and views.
  11. #
  12. # = Mailer Models
  13. #
  14. # To use Action Mailer, you need to create a mailer model.
  15. #
  16. # $ rails generate mailer Notifier
  17. #
  18. # The generated model inherits from <tt>ApplicationMailer</tt> which in turn
  19. # inherits from <tt>ActionMailer::Base</tt>. A mailer model defines methods
  20. # used to generate an email message. In these methods, you can setup variables to be used in
  21. # the mailer views, options on the mail itself such as the <tt>:from</tt> address, and attachments.
  22. #
  23. # class ApplicationMailer < ActionMailer::Base
  24. # default from: 'from@example.com'
  25. # layout 'mailer'
  26. # end
  27. #
  28. # class NotifierMailer < ApplicationMailer
  29. # default from: 'no-reply@example.com',
  30. # return_path: 'system@example.com'
  31. #
  32. # def welcome(recipient)
  33. # @account = recipient
  34. # mail(to: recipient.email_address_with_name,
  35. # bcc: ["bcc@example.com", "Order Watcher <watcher@example.com>"])
  36. # end
  37. # end
  38. #
  39. # Within the mailer method, you have access to the following methods:
  40. #
  41. # * <tt>attachments[]=</tt> - Allows you to add attachments to your email in an intuitive
  42. # manner; <tt>attachments['filename.png'] = File.read('path/to/filename.png')</tt>
  43. #
  44. # * <tt>attachments.inline[]=</tt> - Allows you to add an inline attachment to your email
  45. # in the same manner as <tt>attachments[]=</tt>
  46. #
  47. # * <tt>headers[]=</tt> - Allows you to specify any header field in your email such
  48. # as <tt>headers['X-No-Spam'] = 'True'</tt>. Note that declaring a header multiple times
  49. # will add many fields of the same name. Read #headers doc for more information.
  50. #
  51. # * <tt>headers(hash)</tt> - Allows you to specify multiple headers in your email such
  52. # as <tt>headers({'X-No-Spam' => 'True', 'In-Reply-To' => '1234@message.id'})</tt>
  53. #
  54. # * <tt>mail</tt> - Allows you to specify email to be sent.
  55. #
  56. # The hash passed to the mail method allows you to specify any header that a <tt>Mail::Message</tt>
  57. # will accept (any valid email header including optional fields).
  58. #
  59. # The +mail+ method, if not passed a block, will inspect your views and send all the views with
  60. # the same name as the method, so the above action would send the +welcome.text.erb+ view
  61. # file as well as the +welcome.html.erb+ view file in a +multipart/alternative+ email.
  62. #
  63. # If you want to explicitly render only certain templates, pass a block:
  64. #
  65. # mail(to: user.email) do |format|
  66. # format.text
  67. # format.html
  68. # end
  69. #
  70. # The block syntax is also useful in providing information specific to a part:
  71. #
  72. # mail(to: user.email) do |format|
  73. # format.text(content_transfer_encoding: "base64")
  74. # format.html
  75. # end
  76. #
  77. # Or even to render a special view:
  78. #
  79. # mail(to: user.email) do |format|
  80. # format.text
  81. # format.html { render "some_other_template" }
  82. # end
  83. #
  84. # = Mailer views
  85. #
  86. # Like Action Controller, each mailer class has a corresponding view directory in which each
  87. # method of the class looks for a template with its name.
  88. #
  89. # To define a template to be used with a mailer, create an <tt>.erb</tt> file with the same
  90. # name as the method in your mailer model. For example, in the mailer defined above, the template at
  91. # <tt>app/views/notifier_mailer/welcome.text.erb</tt> would be used to generate the email.
  92. #
  93. # Variables defined in the methods of your mailer model are accessible as instance variables in their
  94. # corresponding view.
  95. #
  96. # Emails by default are sent in plain text, so a sample view for our model example might look like this:
  97. #
  98. # Hi <%= @account.name %>,
  99. # Thanks for joining our service! Please check back often.
  100. #
  101. # You can even use Action View helpers in these views. For example:
  102. #
  103. # You got a new note!
  104. # <%= truncate(@note.body, length: 25) %>
  105. #
  106. # If you need to access the subject, from or the recipients in the view, you can do that through message object:
  107. #
  108. # You got a new note from <%= message.from %>!
  109. # <%= truncate(@note.body, length: 25) %>
  110. #
  111. #
  112. # = Generating URLs
  113. #
  114. # URLs can be generated in mailer views using <tt>url_for</tt> or named routes. Unlike controllers from
  115. # Action Pack, the mailer instance doesn't have any context about the incoming request, so you'll need
  116. # to provide all of the details needed to generate a URL.
  117. #
  118. # When using <tt>url_for</tt> you'll need to provide the <tt>:host</tt>, <tt>:controller</tt>, and <tt>:action</tt>:
  119. #
  120. # <%= url_for(host: "example.com", controller: "welcome", action: "greeting") %>
  121. #
  122. # When using named routes you only need to supply the <tt>:host</tt>:
  123. #
  124. # <%= users_url(host: "example.com") %>
  125. #
  126. # You should use the <tt>named_route_url</tt> style (which generates absolute URLs) and avoid using the
  127. # <tt>named_route_path</tt> style (which generates relative URLs), since clients reading the mail will
  128. # have no concept of a current URL from which to determine a relative path.
  129. #
  130. # It is also possible to set a default host that will be used in all mailers by setting the <tt>:host</tt>
  131. # option as a configuration option in <tt>config/application.rb</tt>:
  132. #
  133. # config.action_mailer.default_url_options = { host: "example.com" }
  134. #
  135. # You can also define a <tt>default_url_options</tt> method on individual mailers to override these
  136. # default settings per-mailer.
  137. #
  138. # By default when <tt>config.force_ssl</tt> is +true+, URLs generated for hosts will use the HTTPS protocol.
  139. #
  140. # = Sending mail
  141. #
  142. # Once a mailer action and template are defined, you can deliver your message or defer its creation and
  143. # delivery for later:
  144. #
  145. # NotifierMailer.welcome(User.first).deliver_now # sends the email
  146. # mail = NotifierMailer.welcome(User.first) # => an ActionMailer::MessageDelivery object
  147. # mail.deliver_now # generates and sends the email now
  148. #
  149. # The <tt>ActionMailer::MessageDelivery</tt> class is a wrapper around a delegate that will call
  150. # your method to generate the mail. If you want direct access to the delegator, or <tt>Mail::Message</tt>,
  151. # you can call the <tt>message</tt> method on the <tt>ActionMailer::MessageDelivery</tt> object.
  152. #
  153. # NotifierMailer.welcome(User.first).message # => a Mail::Message object
  154. #
  155. # Action Mailer is nicely integrated with Active Job so you can generate and send emails in the background
  156. # (example: outside of the request-response cycle, so the user doesn't have to wait on it):
  157. #
  158. # NotifierMailer.welcome(User.first).deliver_later # enqueue the email sending to Active Job
  159. #
  160. # Note that <tt>deliver_later</tt> will execute your method from the background job.
  161. #
  162. # You never instantiate your mailer class. Rather, you just call the method you defined on the class itself.
  163. # All instance methods are expected to return a message object to be sent.
  164. #
  165. # = Multipart Emails
  166. #
  167. # Multipart messages can also be used implicitly because Action Mailer will automatically detect and use
  168. # multipart templates, where each template is named after the name of the action, followed by the content
  169. # type. Each such detected template will be added to the message, as a separate part.
  170. #
  171. # For example, if the following templates exist:
  172. # * signup_notification.text.erb
  173. # * signup_notification.html.erb
  174. # * signup_notification.xml.builder
  175. # * signup_notification.yml.erb
  176. #
  177. # Each would be rendered and added as a separate part to the message, with the corresponding content
  178. # type. The content type for the entire message is automatically set to <tt>multipart/alternative</tt>,
  179. # which indicates that the email contains multiple different representations of the same email
  180. # body. The same instance variables defined in the action are passed to all email templates.
  181. #
  182. # Implicit template rendering is not performed if any attachments or parts have been added to the email.
  183. # This means that you'll have to manually add each part to the email and set the content type of the email
  184. # to <tt>multipart/alternative</tt>.
  185. #
  186. # = Attachments
  187. #
  188. # Sending attachment in emails is easy:
  189. #
  190. # class NotifierMailer < ApplicationMailer
  191. # def welcome(recipient)
  192. # attachments['free_book.pdf'] = File.read('path/to/file.pdf')
  193. # mail(to: recipient, subject: "New account information")
  194. # end
  195. # end
  196. #
  197. # Which will (if it had both a <tt>welcome.text.erb</tt> and <tt>welcome.html.erb</tt>
  198. # template in the view directory), send a complete <tt>multipart/mixed</tt> email with two parts,
  199. # the first part being a <tt>multipart/alternative</tt> with the text and HTML email parts inside,
  200. # and the second being a <tt>application/pdf</tt> with a Base64 encoded copy of the file.pdf book
  201. # with the filename +free_book.pdf+.
  202. #
  203. # If you need to send attachments with no content, you need to create an empty view for it,
  204. # or add an empty body parameter like this:
  205. #
  206. # class NotifierMailer < ApplicationMailer
  207. # def welcome(recipient)
  208. # attachments['free_book.pdf'] = File.read('path/to/file.pdf')
  209. # mail(to: recipient, subject: "New account information", body: "")
  210. # end
  211. # end
  212. #
  213. # You can also send attachments with html template, in this case you need to add body, attachments,
  214. # and custom content type like this:
  215. #
  216. # class NotifierMailer < ApplicationMailer
  217. # def welcome(recipient)
  218. # attachments["free_book.pdf"] = File.read("path/to/file.pdf")
  219. # mail(to: recipient,
  220. # subject: "New account information",
  221. # content_type: "text/html",
  222. # body: "<html><body>Hello there</body></html>")
  223. # end
  224. # end
  225. #
  226. # = Inline Attachments
  227. #
  228. # You can also specify that a file should be displayed inline with other HTML. This is useful
  229. # if you want to display a corporate logo or a photo.
  230. #
  231. # class NotifierMailer < ApplicationMailer
  232. # def welcome(recipient)
  233. # attachments.inline['photo.png'] = File.read('path/to/photo.png')
  234. # mail(to: recipient, subject: "Here is what we look like")
  235. # end
  236. # end
  237. #
  238. # And then to reference the image in the view, you create a <tt>welcome.html.erb</tt> file and
  239. # make a call to +image_tag+ passing in the attachment you want to display and then call
  240. # +url+ on the attachment to get the relative content id path for the image source:
  241. #
  242. # <h1>Please Don't Cringe</h1>
  243. #
  244. # <%= image_tag attachments['photo.png'].url -%>
  245. #
  246. # As we are using Action View's +image_tag+ method, you can pass in any other options you want:
  247. #
  248. # <h1>Please Don't Cringe</h1>
  249. #
  250. # <%= image_tag attachments['photo.png'].url, alt: 'Our Photo', class: 'photo' -%>
  251. #
  252. # = Observing and Intercepting Mails
  253. #
  254. # Action Mailer provides hooks into the Mail observer and interceptor methods. These allow you to
  255. # register classes that are called during the mail delivery life cycle.
  256. #
  257. # An observer class must implement the <tt>:delivered_email(message)</tt> method which will be
  258. # called once for every email sent after the email has been sent.
  259. #
  260. # An interceptor class must implement the <tt>:delivering_email(message)</tt> method which will be
  261. # called before the email is sent, allowing you to make modifications to the email before it hits
  262. # the delivery agents. Your class should make any needed modifications directly to the passed
  263. # in <tt>Mail::Message</tt> instance.
  264. #
  265. # = Default Hash
  266. #
  267. # Action Mailer provides some intelligent defaults for your emails, these are usually specified in a
  268. # default method inside the class definition:
  269. #
  270. # class NotifierMailer < ApplicationMailer
  271. # default sender: 'system@example.com'
  272. # end
  273. #
  274. # You can pass in any header value that a <tt>Mail::Message</tt> accepts. Out of the box,
  275. # <tt>ActionMailer::Base</tt> sets the following:
  276. #
  277. # * <tt>mime_version: "1.0"</tt>
  278. # * <tt>charset: "UTF-8"</tt>
  279. # * <tt>content_type: "text/plain"</tt>
  280. # * <tt>parts_order: [ "text/plain", "text/enriched", "text/html" ]</tt>
  281. #
  282. # <tt>parts_order</tt> and <tt>charset</tt> are not actually valid <tt>Mail::Message</tt> header fields,
  283. # but Action Mailer translates them appropriately and sets the correct values.
  284. #
  285. # As you can pass in any header, you need to either quote the header as a string, or pass it in as
  286. # an underscored symbol, so the following will work:
  287. #
  288. # class NotifierMailer < ApplicationMailer
  289. # default 'Content-Transfer-Encoding' => '7bit',
  290. # content_description: 'This is a description'
  291. # end
  292. #
  293. # Finally, Action Mailer also supports passing <tt>Proc</tt> and <tt>Lambda</tt> objects into the default hash,
  294. # so you can define methods that evaluate as the message is being generated:
  295. #
  296. # class NotifierMailer < ApplicationMailer
  297. # default 'X-Special-Header' => Proc.new { my_method }, to: -> { @inviter.email_address }
  298. #
  299. # private
  300. # def my_method
  301. # 'some complex call'
  302. # end
  303. # end
  304. #
  305. # Note that the proc/lambda is evaluated right at the start of the mail message generation, so if you
  306. # set something in the default hash using a proc, and then set the same thing inside of your
  307. # mailer method, it will get overwritten by the mailer method.
  308. #
  309. # It is also possible to set these default options that will be used in all mailers through
  310. # the <tt>default_options=</tt> configuration in <tt>config/application.rb</tt>:
  311. #
  312. # config.action_mailer.default_options = { from: "no-reply@example.org" }
  313. #
  314. # = Callbacks
  315. #
  316. # You can specify callbacks using <tt>before_action</tt> and <tt>after_action</tt> for configuring your messages.
  317. # This may be useful, for example, when you want to add default inline attachments for all
  318. # messages sent out by a certain mailer class:
  319. #
  320. # class NotifierMailer < ApplicationMailer
  321. # before_action :add_inline_attachment!
  322. #
  323. # def welcome
  324. # mail
  325. # end
  326. #
  327. # private
  328. # def add_inline_attachment!
  329. # attachments.inline["footer.jpg"] = File.read('/path/to/filename.jpg')
  330. # end
  331. # end
  332. #
  333. # Callbacks in Action Mailer are implemented using
  334. # <tt>AbstractController::Callbacks</tt>, so you can define and configure
  335. # callbacks in the same manner that you would use callbacks in classes that
  336. # inherit from <tt>ActionController::Base</tt>.
  337. #
  338. # Note that unless you have a specific reason to do so, you should prefer
  339. # using <tt>before_action</tt> rather than <tt>after_action</tt> in your
  340. # Action Mailer classes so that headers are parsed properly.
  341. #
  342. # = Previewing emails
  343. #
  344. # You can preview your email templates visually by adding a mailer preview file to the
  345. # <tt>ActionMailer::Base.preview_path</tt>. Since most emails do something interesting
  346. # with database data, you'll need to write some scenarios to load messages with fake data:
  347. #
  348. # class NotifierMailerPreview < ActionMailer::Preview
  349. # def welcome
  350. # NotifierMailer.welcome(User.first)
  351. # end
  352. # end
  353. #
  354. # Methods must return a <tt>Mail::Message</tt> object which can be generated by calling the mailer
  355. # method without the additional <tt>deliver_now</tt> / <tt>deliver_later</tt>. The location of the
  356. # mailer previews directory can be configured using the <tt>preview_path</tt> option which has a default
  357. # of <tt>test/mailers/previews</tt>:
  358. #
  359. # config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
  360. #
  361. # An overview of all previews is accessible at <tt>http://localhost:3000/rails/mailers</tt>
  362. # on a running development server instance.
  363. #
  364. # Previews can also be intercepted in a similar manner as deliveries can be by registering
  365. # a preview interceptor that has a <tt>previewing_email</tt> method:
  366. #
  367. # class CssInlineStyler
  368. # def self.previewing_email(message)
  369. # # inline CSS styles
  370. # end
  371. # end
  372. #
  373. # config.action_mailer.preview_interceptors :css_inline_styler
  374. #
  375. # Note that interceptors need to be registered both with <tt>register_interceptor</tt>
  376. # and <tt>register_preview_interceptor</tt> if they should operate on both sending and
  377. # previewing emails.
  378. #
  379. # = Configuration options
  380. #
  381. # These options are specified on the class level, like
  382. # <tt>ActionMailer::Base.raise_delivery_errors = true</tt>
  383. #
  384. # * <tt>default_options</tt> - You can pass this in at a class level as well as within the class itself as
  385. # per the above section.
  386. #
  387. # * <tt>logger</tt> - the logger is used for generating information on the mailing run if available.
  388. # Can be set to +nil+ for no logging. Compatible with both Ruby's own +Logger+ and Log4r loggers.
  389. #
  390. # * <tt>smtp_settings</tt> - Allows detailed configuration for <tt>:smtp</tt> delivery method:
  391. # * <tt>:address</tt> - Allows you to use a remote mail server. Just change it from its default
  392. # "localhost" setting.
  393. # * <tt>:port</tt> - On the off chance that your mail server doesn't run on port 25, you can change it.
  394. # * <tt>:domain</tt> - If you need to specify a HELO domain, you can do it here.
  395. # * <tt>:user_name</tt> - If your mail server requires authentication, set the username in this setting.
  396. # * <tt>:password</tt> - If your mail server requires authentication, set the password in this setting.
  397. # * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the
  398. # authentication type here.
  399. # This is a symbol and one of <tt>:plain</tt> (will send the password Base64 encoded), <tt>:login</tt> (will
  400. # send the password Base64 encoded) or <tt>:cram_md5</tt> (combines a Challenge/Response mechanism to exchange
  401. # information and a cryptographic Message Digest 5 algorithm to hash important information)
  402. # * <tt>:enable_starttls_auto</tt> - Detects if STARTTLS is enabled in your SMTP server and starts
  403. # to use it. Defaults to <tt>true</tt>.
  404. # * <tt>:openssl_verify_mode</tt> - When using TLS, you can set how OpenSSL checks the certificate. This is
  405. # really useful if you need to validate a self-signed and/or a wildcard certificate. You can use the name
  406. # of an OpenSSL verify constant (<tt>'none'</tt> or <tt>'peer'</tt>) or directly the constant
  407. # (<tt>OpenSSL::SSL::VERIFY_NONE</tt> or <tt>OpenSSL::SSL::VERIFY_PEER</tt>).
  408. # <tt>:ssl/:tls</tt> Enables the SMTP connection to use SMTP/TLS (SMTPS: SMTP over direct TLS connection)
  409. #
  410. # * <tt>sendmail_settings</tt> - Allows you to override options for the <tt>:sendmail</tt> delivery method.
  411. # * <tt>:location</tt> - The location of the sendmail executable. Defaults to <tt>/usr/sbin/sendmail</tt>.
  412. # * <tt>:arguments</tt> - The command line arguments. Defaults to <tt>-i</tt> with <tt>-f sender@address</tt>
  413. # added automatically before the message is sent.
  414. #
  415. # * <tt>file_settings</tt> - Allows you to override options for the <tt>:file</tt> delivery method.
  416. # * <tt>:location</tt> - The directory into which emails will be written. Defaults to the application
  417. # <tt>tmp/mails</tt>.
  418. #
  419. # * <tt>raise_delivery_errors</tt> - Whether or not errors should be raised if the email fails to be delivered.
  420. #
  421. # * <tt>delivery_method</tt> - Defines a delivery method. Possible values are <tt>:smtp</tt> (default),
  422. # <tt>:sendmail</tt>, <tt>:test</tt>, and <tt>:file</tt>. Or you may provide a custom delivery method
  423. # object e.g. +MyOwnDeliveryMethodClass+. See the Mail gem documentation on the interface you need to
  424. # implement for a custom delivery agent.
  425. #
  426. # * <tt>perform_deliveries</tt> - Determines whether emails are actually sent from Action Mailer when you
  427. # call <tt>.deliver</tt> on an email message or on an Action Mailer method. This is on by default but can
  428. # be turned off to aid in functional testing.
  429. #
  430. # * <tt>deliveries</tt> - Keeps an array of all the emails sent out through the Action Mailer with
  431. # <tt>delivery_method :test</tt>. Most useful for unit and functional testing.
  432. #
  433. # * <tt>deliver_later_queue_name</tt> - The name of the queue used with <tt>deliver_later</tt>. Defaults to +mailers+.
  434. 1 class Base < AbstractController::Base
  435. 1 include DeliveryMethods
  436. 1 include Rescuable
  437. 1 include Parameterized
  438. 1 include Previews
  439. 1 abstract!
  440. 1 include AbstractController::Rendering
  441. 1 include AbstractController::Logger
  442. 1 include AbstractController::Helpers
  443. 1 include AbstractController::Translation
  444. 1 include AbstractController::AssetPaths
  445. 1 include AbstractController::Callbacks
  446. 1 include AbstractController::Caching
  447. 1 include ActionView::Layouts
  448. 1 PROTECTED_IVARS = AbstractController::Rendering::DEFAULT_PROTECTED_INSTANCE_VARIABLES + [:@_action_has_layout]
  449. 1 def _protected_ivars # :nodoc:
  450. PROTECTED_IVARS
  451. end
  452. 1 helper ActionMailer::MailHelper
  453. 1 class_attribute :delivery_job, default: ::ActionMailer::DeliveryJob
  454. 1 class_attribute :default_params, default: {
  455. mime_version: "1.0",
  456. charset: "UTF-8",
  457. content_type: "text/plain",
  458. parts_order: [ "text/plain", "text/enriched", "text/html" ]
  459. }.freeze
  460. 1 class << self
  461. # Register one or more Observers which will be notified when mail is delivered.
  462. 1 def register_observers(*observers)
  463. 1 observers.flatten.compact.each { |observer| register_observer(observer) }
  464. end
  465. # Register one or more Interceptors which will be called before mail is sent.
  466. 1 def register_interceptors(*interceptors)
  467. 1 interceptors.flatten.compact.each { |interceptor| register_interceptor(interceptor) }
  468. end
  469. # Register an Observer which will be notified when mail is delivered.
  470. # Either a class, string or symbol can be passed in as the Observer.
  471. # If a string or symbol is passed in it will be camelized and constantized.
  472. 1 def register_observer(observer)
  473. Mail.register_observer(observer_class_for(observer))
  474. end
  475. # Register an Interceptor which will be called before mail is sent.
  476. # Either a class, string or symbol can be passed in as the Interceptor.
  477. # If a string or symbol is passed in it will be camelized and constantized.
  478. 1 def register_interceptor(interceptor)
  479. Mail.register_interceptor(observer_class_for(interceptor))
  480. end
  481. 1 def observer_class_for(value) # :nodoc:
  482. case value
  483. when String, Symbol
  484. value.to_s.camelize.constantize
  485. else
  486. value
  487. end
  488. end
  489. 1 private :observer_class_for
  490. # Returns the name of the current mailer. This method is also being used as a path for a view lookup.
  491. # If this is an anonymous mailer, this method will return +anonymous+ instead.
  492. 1 def mailer_name
  493. 4 @mailer_name ||= anonymous? ? "anonymous" : name.underscore
  494. end
  495. # Allows to set the name of current mailer.
  496. 1 attr_writer :mailer_name
  497. 1 alias :controller_path :mailer_name
  498. # Sets the defaults through app configuration:
  499. #
  500. # config.action_mailer.default(from: "no-reply@example.org")
  501. #
  502. # Aliased by ::default_options=
  503. 1 def default(value = nil)
  504. 1 self.default_params = default_params.merge(value).freeze if value
  505. 1 default_params
  506. end
  507. # Allows to set defaults through app configuration:
  508. #
  509. # config.action_mailer.default_options = { from: "no-reply@example.org" }
  510. 1 alias :default_options= :default
  511. # Receives a raw email, parses it into an email object, decodes it,
  512. # instantiates a new mailer, and passes the email object to the mailer
  513. # object's +receive+ method.
  514. #
  515. # If you want your mailer to be able to process incoming messages, you'll
  516. # need to implement a +receive+ method that accepts the raw email string
  517. # as a parameter:
  518. #
  519. # class MyMailer < ActionMailer::Base
  520. # def receive(mail)
  521. # # ...
  522. # end
  523. # end
  524. 1 def receive(raw_mail)
  525. ActiveSupport::Notifications.instrument("receive.action_mailer") do |payload|
  526. mail = Mail.new(raw_mail)
  527. set_payload_for_mail(payload, mail)
  528. new.receive(mail)
  529. end
  530. end
  531. # Wraps an email delivery inside of <tt>ActiveSupport::Notifications</tt> instrumentation.
  532. #
  533. # This method is actually called by the <tt>Mail::Message</tt> object itself
  534. # through a callback when you call <tt>:deliver</tt> on the <tt>Mail::Message</tt>,
  535. # calling +deliver_mail+ directly and passing a <tt>Mail::Message</tt> will do
  536. # nothing except tell the logger you sent the email.
  537. 1 def deliver_mail(mail) #:nodoc:
  538. ActiveSupport::Notifications.instrument("deliver.action_mailer") do |payload|
  539. set_payload_for_mail(payload, mail)
  540. yield # Let Mail do the delivery actions
  541. end
  542. end
  543. 1 private
  544. 1 def set_payload_for_mail(payload, mail)
  545. payload[:mailer] = name
  546. payload[:message_id] = mail.message_id
  547. payload[:subject] = mail.subject
  548. payload[:to] = mail.to
  549. payload[:from] = mail.from
  550. payload[:bcc] = mail.bcc if mail.bcc.present?
  551. payload[:cc] = mail.cc if mail.cc.present?
  552. payload[:date] = mail.date
  553. payload[:mail] = mail.encoded
  554. end
  555. 1 def method_missing(method_name, *args)
  556. if action_methods.include?(method_name.to_s)
  557. MessageDelivery.new(self, method_name, *args)
  558. else
  559. super
  560. end
  561. end
  562. 1 def respond_to_missing?(method, include_all = false)
  563. 1 action_methods.include?(method.to_s) || super
  564. end
  565. end
  566. 1 attr_internal :message
  567. 1 def initialize
  568. super()
  569. @_mail_was_called = false
  570. @_message = Mail.new
  571. end
  572. 1 def process(method_name, *args) #:nodoc:
  573. payload = {
  574. mailer: self.class.name,
  575. action: method_name,
  576. args: args
  577. }
  578. ActiveSupport::Notifications.instrument("process.action_mailer", payload) do
  579. super
  580. @_message = NullMail.new unless @_mail_was_called
  581. end
  582. end
  583. 1 class NullMail #:nodoc:
  584. 1 def body; "" end
  585. 1 def header; {} end
  586. 1 def respond_to?(string, include_all = false)
  587. true
  588. end
  589. 1 def method_missing(*args)
  590. nil
  591. end
  592. end
  593. # Returns the name of the mailer object.
  594. 1 def mailer_name
  595. self.class.mailer_name
  596. end
  597. # Allows you to pass random and unusual headers to the new <tt>Mail::Message</tt>
  598. # object which will add them to itself.
  599. #
  600. # headers['X-Special-Domain-Specific-Header'] = "SecretValue"
  601. #
  602. # You can also pass a hash into headers of header field names and values,
  603. # which will then be set on the <tt>Mail::Message</tt> object:
  604. #
  605. # headers 'X-Special-Domain-Specific-Header' => "SecretValue",
  606. # 'In-Reply-To' => incoming.message_id
  607. #
  608. # The resulting <tt>Mail::Message</tt> will have the following in its header:
  609. #
  610. # X-Special-Domain-Specific-Header: SecretValue
  611. #
  612. # Note about replacing already defined headers:
  613. #
  614. # * +subject+
  615. # * +sender+
  616. # * +from+
  617. # * +to+
  618. # * +cc+
  619. # * +bcc+
  620. # * +reply-to+
  621. # * +orig-date+
  622. # * +message-id+
  623. # * +references+
  624. #
  625. # Fields can only appear once in email headers while other fields such as
  626. # <tt>X-Anything</tt> can appear multiple times.
  627. #
  628. # If you want to replace any header which already exists, first set it to
  629. # +nil+ in order to reset the value otherwise another field will be added
  630. # for the same header.
  631. 1 def headers(args = nil)
  632. if args
  633. @_message.headers(args)
  634. else
  635. @_message
  636. end
  637. end
  638. # Allows you to add attachments to an email, like so:
  639. #
  640. # mail.attachments['filename.jpg'] = File.read('/path/to/filename.jpg')
  641. #
  642. # If you do this, then Mail will take the file name and work out the mime type.
  643. # It will also set the Content-Type, Content-Disposition, Content-Transfer-Encoding
  644. # and encode the contents of the attachment in Base64.
  645. #
  646. # You can also specify overrides if you want by passing a hash instead of a string:
  647. #
  648. # mail.attachments['filename.jpg'] = {mime_type: 'application/gzip',
  649. # content: File.read('/path/to/filename.jpg')}
  650. #
  651. # If you want to use encoding other than Base64 then you will need to pass encoding
  652. # type along with the pre-encoded content as Mail doesn't know how to decode the
  653. # data:
  654. #
  655. # file_content = SpecialEncode(File.read('/path/to/filename.jpg'))
  656. # mail.attachments['filename.jpg'] = {mime_type: 'application/gzip',
  657. # encoding: 'SpecialEncoding',
  658. # content: file_content }
  659. #
  660. # You can also search for specific attachments:
  661. #
  662. # # By Filename
  663. # mail.attachments['filename.jpg'] # => Mail::Part object or nil
  664. #
  665. # # or by index
  666. # mail.attachments[0] # => Mail::Part (first attachment)
  667. #
  668. 1 def attachments
  669. if @_mail_was_called
  670. LateAttachmentsProxy.new(@_message.attachments)
  671. else
  672. @_message.attachments
  673. end
  674. end
  675. 1 class LateAttachmentsProxy < SimpleDelegator
  676. 1 def inline; _raise_error end
  677. 1 def []=(_name, _content); _raise_error end
  678. 1 private
  679. 1 def _raise_error
  680. raise RuntimeError, "Can't add attachments after `mail` was called.\n" \
  681. "Make sure to use `attachments[]=` before calling `mail`."
  682. end
  683. end
  684. # The main method that creates the message and renders the email templates. There are
  685. # two ways to call this method, with a block, or without a block.
  686. #
  687. # It accepts a headers hash. This hash allows you to specify
  688. # the most used headers in an email message, these are:
  689. #
  690. # * +:subject+ - The subject of the message, if this is omitted, Action Mailer will
  691. # ask the Rails I18n class for a translated +:subject+ in the scope of
  692. # <tt>[mailer_scope, action_name]</tt> or if this is missing, will translate the
  693. # humanized version of the +action_name+
  694. # * +:to+ - Who the message is destined for, can be a string of addresses, or an array
  695. # of addresses.
  696. # * +:from+ - Who the message is from
  697. # * +:cc+ - Who you would like to Carbon-Copy on this email, can be a string of addresses,
  698. # or an array of addresses.
  699. # * +:bcc+ - Who you would like to Blind-Carbon-Copy on this email, can be a string of
  700. # addresses, or an array of addresses.
  701. # * +:reply_to+ - Who to set the Reply-To header of the email to.
  702. # * +:date+ - The date to say the email was sent on.
  703. #
  704. # You can set default values for any of the above headers (except +:date+)
  705. # by using the ::default class method:
  706. #
  707. # class Notifier < ActionMailer::Base
  708. # default from: 'no-reply@test.lindsaar.net',
  709. # bcc: 'email_logger@test.lindsaar.net',
  710. # reply_to: 'bounces@test.lindsaar.net'
  711. # end
  712. #
  713. # If you need other headers not listed above, you can either pass them in
  714. # as part of the headers hash or use the <tt>headers['name'] = value</tt>
  715. # method.
  716. #
  717. # When a +:return_path+ is specified as header, that value will be used as
  718. # the 'envelope from' address for the Mail message. Setting this is useful
  719. # when you want delivery notifications sent to a different address than the
  720. # one in +:from+. Mail will actually use the +:return_path+ in preference
  721. # to the +:sender+ in preference to the +:from+ field for the 'envelope
  722. # from' value.
  723. #
  724. # If you do not pass a block to the +mail+ method, it will find all
  725. # templates in the view paths using by default the mailer name and the
  726. # method name that it is being called from, it will then create parts for
  727. # each of these templates intelligently, making educated guesses on correct
  728. # content type and sequence, and return a fully prepared <tt>Mail::Message</tt>
  729. # ready to call <tt>:deliver</tt> on to send.
  730. #
  731. # For example:
  732. #
  733. # class Notifier < ActionMailer::Base
  734. # default from: 'no-reply@test.lindsaar.net'
  735. #
  736. # def welcome
  737. # mail(to: 'mikel@test.lindsaar.net')
  738. # end
  739. # end
  740. #
  741. # Will look for all templates at "app/views/notifier" with name "welcome".
  742. # If no welcome template exists, it will raise an ActionView::MissingTemplate error.
  743. #
  744. # However, those can be customized:
  745. #
  746. # mail(template_path: 'notifications', template_name: 'another')
  747. #
  748. # And now it will look for all templates at "app/views/notifications" with name "another".
  749. #
  750. # If you do pass a block, you can render specific templates of your choice:
  751. #
  752. # mail(to: 'mikel@test.lindsaar.net') do |format|
  753. # format.text
  754. # format.html
  755. # end
  756. #
  757. # You can even render plain text directly without using a template:
  758. #
  759. # mail(to: 'mikel@test.lindsaar.net') do |format|
  760. # format.text { render plain: "Hello Mikel!" }
  761. # format.html { render html: "<h1>Hello Mikel!</h1>".html_safe }
  762. # end
  763. #
  764. # Which will render a +multipart/alternative+ email with +text/plain+ and
  765. # +text/html+ parts.
  766. #
  767. # The block syntax also allows you to customize the part headers if desired:
  768. #
  769. # mail(to: 'mikel@test.lindsaar.net') do |format|
  770. # format.text(content_transfer_encoding: "base64")
  771. # format.html
  772. # end
  773. #
  774. 1 def mail(headers = {}, &block)
  775. return message if @_mail_was_called && headers.blank? && !block
  776. # At the beginning, do not consider class default for content_type
  777. content_type = headers[:content_type]
  778. headers = apply_defaults(headers)
  779. # Apply charset at the beginning so all fields are properly quoted
  780. message.charset = charset = headers[:charset]
  781. # Set configure delivery behavior
  782. wrap_delivery_behavior!(headers[:delivery_method], headers[:delivery_method_options])
  783. assign_headers_to_message(message, headers)
  784. # Render the templates and blocks
  785. responses = collect_responses(headers, &block)
  786. @_mail_was_called = true
  787. create_parts_from_responses(message, responses)
  788. # Setup content type, reapply charset and handle parts order
  789. message.content_type = set_content_type(message, content_type, headers[:content_type])
  790. message.charset = charset
  791. if message.multipart?
  792. message.body.set_sort_order(headers[:parts_order])
  793. message.body.sort_parts!
  794. end
  795. message
  796. end
  797. 1 private
  798. # Used by #mail to set the content type of the message.
  799. #
  800. # It will use the given +user_content_type+, or multipart if the mail
  801. # message has any attachments. If the attachments are inline, the content
  802. # type will be "multipart/related", otherwise "multipart/mixed".
  803. #
  804. # If there is no content type passed in via headers, and there are no
  805. # attachments, or the message is multipart, then the default content type is
  806. # used.
  807. 1 def set_content_type(m, user_content_type, class_default) # :doc:
  808. params = m.content_type_parameters || {}
  809. case
  810. when user_content_type.present?
  811. user_content_type
  812. when m.has_attachments?
  813. if m.attachments.detect(&:inline?)
  814. ["multipart", "related", params]
  815. else
  816. ["multipart", "mixed", params]
  817. end
  818. when m.multipart?
  819. ["multipart", "alternative", params]
  820. else
  821. m.content_type || class_default
  822. end
  823. end
  824. # Translates the +subject+ using Rails I18n class under <tt>[mailer_scope, action_name]</tt> scope.
  825. # If it does not find a translation for the +subject+ under the specified scope it will default to a
  826. # humanized version of the <tt>action_name</tt>.
  827. # If the subject has interpolations, you can pass them through the +interpolations+ parameter.
  828. 1 def default_i18n_subject(interpolations = {}) # :doc:
  829. mailer_scope = self.class.mailer_name.tr("/", ".")
  830. I18n.t(:subject, interpolations.merge(scope: [mailer_scope, action_name], default: action_name.humanize))
  831. end
  832. # Emails do not support relative path links.
  833. 1 def self.supports_path? # :doc:
  834. false
  835. end
  836. 1 def apply_defaults(headers)
  837. default_values = self.class.default.map do |key, value|
  838. [
  839. key,
  840. compute_default(value)
  841. ]
  842. end.to_h
  843. headers_with_defaults = headers.reverse_merge(default_values)
  844. headers_with_defaults[:subject] ||= default_i18n_subject
  845. headers_with_defaults
  846. end
  847. 1 def compute_default(value)
  848. return value unless value.is_a?(Proc)
  849. if value.arity == 1
  850. instance_exec(self, &value)
  851. else
  852. instance_exec(&value)
  853. end
  854. end
  855. 1 def assign_headers_to_message(message, headers)
  856. assignable = headers.except(:parts_order, :content_type, :body, :template_name,
  857. :template_path, :delivery_method, :delivery_method_options)
  858. assignable.each { |k, v| message[k] = v }
  859. end
  860. 1 def collect_responses(headers)
  861. if block_given?
  862. collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
  863. yield(collector)
  864. collector.responses
  865. elsif headers[:body]
  866. collect_responses_from_text(headers)
  867. else
  868. collect_responses_from_templates(headers)
  869. end
  870. end
  871. 1 def collect_responses_from_text(headers)
  872. [{
  873. body: headers.delete(:body),
  874. content_type: headers[:content_type] || "text/plain"
  875. }]
  876. end
  877. 1 def collect_responses_from_templates(headers)
  878. templates_path = headers[:template_path] || self.class.mailer_name
  879. templates_name = headers[:template_name] || action_name
  880. each_template(Array(templates_path), templates_name).map do |template|
  881. self.formats = template.formats
  882. {
  883. body: render(template: template),
  884. content_type: template.type.to_s
  885. }
  886. end
  887. end
  888. 1 def each_template(paths, name, &block)
  889. templates = lookup_context.find_all(name, paths)
  890. if templates.empty?
  891. raise ActionView::MissingTemplate.new(paths, name, paths, false, "mailer")
  892. else
  893. templates.uniq(&:formats).each(&block)
  894. end
  895. end
  896. 1 def create_parts_from_responses(m, responses)
  897. if responses.size == 1 && !m.has_attachments?
  898. responses[0].each { |k, v| m[k] = v }
  899. elsif responses.size > 1 && m.has_attachments?
  900. container = Mail::Part.new
  901. container.content_type = "multipart/alternative"
  902. responses.each { |r| insert_part(container, r, m.charset) }
  903. m.add_part(container)
  904. else
  905. responses.each { |r| insert_part(m, r, m.charset) }
  906. end
  907. end
  908. 1 def insert_part(container, response, charset)
  909. response[:charset] ||= charset
  910. part = Mail::Part.new(response)
  911. container.add_part(part)
  912. end
  913. # This and #instrument_name is for caching instrument
  914. 1 def instrument_payload(key)
  915. {
  916. mailer: mailer_name,
  917. key: key
  918. }
  919. end
  920. 1 def instrument_name
  921. "action_mailer".freeze
  922. end
  923. 1 ActiveSupport.run_load_hooks(:action_mailer, self)
  924. end
  925. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/collector.rb

52.38% lines covered

21 relevant lines. 11 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "abstract_controller/collector"
  3. 1 require "active_support/core_ext/hash/reverse_merge"
  4. 1 require "active_support/core_ext/array/extract_options"
  5. 1 module ActionMailer
  6. 1 class Collector
  7. 1 include AbstractController::Collector
  8. 1 attr_reader :responses
  9. 1 def initialize(context, &block)
  10. @context = context
  11. @responses = []
  12. @default_render = block
  13. end
  14. 1 def any(*args, &block)
  15. options = args.extract_options!
  16. raise ArgumentError, "You have to supply at least one format" if args.empty?
  17. args.each { |type| send(type, options.dup, &block) }
  18. end
  19. 1 alias :all :any
  20. 1 def custom(mime, options = {})
  21. options.reverse_merge!(content_type: mime.to_s)
  22. @context.formats = [mime.to_sym]
  23. options[:body] = block_given? ? yield : @default_render.call
  24. @responses << options
  25. end
  26. end
  27. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_job.rb

60.0% lines covered

15 relevant lines. 9 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_job"
  3. 1 module ActionMailer
  4. # The <tt>ActionMailer::DeliveryJob</tt> class is used when you
  5. # want to send emails outside of the request-response cycle.
  6. #
  7. # Exceptions are rescued and handled by the mailer class.
  8. 1 class DeliveryJob < ActiveJob::Base # :nodoc:
  9. 1 queue_as { ActionMailer::Base.deliver_later_queue_name }
  10. 1 rescue_from StandardError, with: :handle_exception_with_mailer_class
  11. 1 def perform(mailer, mail_method, delivery_method, *args) #:nodoc:
  12. mailer.constantize.public_send(mail_method, *args).send(delivery_method)
  13. end
  14. 1 private
  15. # "Deserialize" the mailer class name by hand in case another argument
  16. # (like a Global ID reference) raised DeserializationError.
  17. 1 def mailer_class
  18. if mailer = Array(@serialized_arguments).first || Array(arguments).first
  19. mailer.constantize
  20. end
  21. end
  22. 1 def handle_exception_with_mailer_class(exception)
  23. if klass = mailer_class
  24. klass.handle_exception exception
  25. else
  26. raise exception
  27. end
  28. end
  29. end
  30. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/delivery_methods.rb

67.65% lines covered

34 relevant lines. 23 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "tmpdir"
  3. 1 module ActionMailer
  4. # This module handles everything related to mail delivery, from registering
  5. # new delivery methods to configuring the mail object to be sent.
  6. 1 module DeliveryMethods
  7. 1 extend ActiveSupport::Concern
  8. 1 included do
  9. # Do not make this inheritable, because we always want it to propagate
  10. 1 cattr_accessor :raise_delivery_errors, default: true
  11. 1 cattr_accessor :perform_deliveries, default: true
  12. 1 cattr_accessor :deliver_later_queue_name, default: :mailers
  13. 1 class_attribute :delivery_methods, default: {}.freeze
  14. 1 class_attribute :delivery_method, default: :smtp
  15. 1 add_delivery_method :smtp, Mail::SMTP,
  16. address: "localhost",
  17. port: 25,
  18. domain: "localhost.localdomain",
  19. user_name: nil,
  20. password: nil,
  21. authentication: nil,
  22. enable_starttls_auto: true
  23. 2 add_delivery_method :file, Mail::FileDelivery,
  24. 1 location: defined?(Rails.root) ? "#{Rails.root}/tmp/mails" : "#{Dir.tmpdir}/mails"
  25. 1 add_delivery_method :sendmail, Mail::Sendmail,
  26. location: "/usr/sbin/sendmail",
  27. arguments: "-i"
  28. 1 add_delivery_method :test, Mail::TestMailer
  29. end
  30. # Helpers for creating and wrapping delivery behavior, used by DeliveryMethods.
  31. 1 module ClassMethods
  32. # Provides a list of emails that have been delivered by Mail::TestMailer
  33. 1 delegate :deliveries, :deliveries=, to: Mail::TestMailer
  34. # Adds a new delivery method through the given class using the given
  35. # symbol as alias and the default options supplied.
  36. #
  37. # add_delivery_method :sendmail, Mail::Sendmail,
  38. # location: '/usr/sbin/sendmail',
  39. # arguments: '-i'
  40. 1 def add_delivery_method(symbol, klass, default_options = {})
  41. 4 class_attribute(:"#{symbol}_settings") unless respond_to?(:"#{symbol}_settings")
  42. 4 send(:"#{symbol}_settings=", default_options)
  43. 4 self.delivery_methods = delivery_methods.merge(symbol.to_sym => klass).freeze
  44. end
  45. 1 def wrap_delivery_behavior(mail, method = nil, options = nil) # :nodoc:
  46. method ||= delivery_method
  47. mail.delivery_handler = self
  48. case method
  49. when NilClass
  50. raise "Delivery method cannot be nil"
  51. when Symbol
  52. if klass = delivery_methods[method]
  53. mail.delivery_method(klass, (send(:"#{method}_settings") || {}).merge(options || {}))
  54. else
  55. raise "Invalid delivery method #{method.inspect}"
  56. end
  57. else
  58. mail.delivery_method(method)
  59. end
  60. mail.perform_deliveries = perform_deliveries
  61. mail.raise_delivery_errors = raise_delivery_errors
  62. end
  63. end
  64. 1 def wrap_delivery_behavior!(*args) # :nodoc:
  65. self.class.wrap_delivery_behavior(message, *args)
  66. end
  67. end
  68. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/inline_preview_interceptor.rb

52.0% lines covered

25 relevant lines. 13 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "base64"
  3. 1 module ActionMailer
  4. # Implements a mailer preview interceptor that converts image tag src attributes
  5. # that use inline cid: style URLs to data: style URLs so that they are visible
  6. # when previewing an HTML email in a web browser.
  7. #
  8. # This interceptor is enabled by default. To disable it, delete it from the
  9. # <tt>ActionMailer::Base.preview_interceptors</tt> array:
  10. #
  11. # ActionMailer::Base.preview_interceptors.delete(ActionMailer::InlinePreviewInterceptor)
  12. #
  13. 1 class InlinePreviewInterceptor
  14. 1 PATTERN = /src=(?:"cid:[^"]+"|'cid:[^']+')/i
  15. 1 include Base64
  16. 1 def self.previewing_email(message) #:nodoc:
  17. new(message).transform!
  18. end
  19. 1 def initialize(message) #:nodoc:
  20. @message = message
  21. end
  22. 1 def transform! #:nodoc:
  23. return message if html_part.blank?
  24. html_part.body = html_part.decoded.gsub(PATTERN) do |match|
  25. if part = find_part(match[9..-2])
  26. %[src="#{data_url(part)}"]
  27. else
  28. match
  29. end
  30. end
  31. message
  32. end
  33. 1 private
  34. 1 def message
  35. @message
  36. end
  37. 1 def html_part
  38. @html_part ||= message.html_part
  39. end
  40. 1 def data_url(part)
  41. "data:#{part.mime_type};base64,#{strict_encode64(part.body.raw_source)}"
  42. end
  43. 1 def find_part(cid)
  44. message.all_parts.find { |p| p.attachment? && p.cid == cid }
  45. end
  46. end
  47. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/log_subscriber.rb

42.11% lines covered

19 relevant lines. 8 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/log_subscriber"
  3. 1 module ActionMailer
  4. # Implements the ActiveSupport::LogSubscriber for logging notifications when
  5. # email is delivered or received.
  6. 1 class LogSubscriber < ActiveSupport::LogSubscriber
  7. # An email was delivered.
  8. 1 def deliver(event)
  9. info do
  10. recipients = Array(event.payload[:to]).join(", ")
  11. "Sent mail to #{recipients} (#{event.duration.round(1)}ms)"
  12. end
  13. debug { event.payload[:mail] }
  14. end
  15. # An email was received.
  16. 1 def receive(event)
  17. info { "Received mail (#{event.duration.round(1)}ms)" }
  18. debug { event.payload[:mail] }
  19. end
  20. # An email was generated.
  21. 1 def process(event)
  22. debug do
  23. mailer = event.payload[:mailer]
  24. action = event.payload[:action]
  25. "#{mailer}##{action}: processed outbound mail in #{event.duration.round(1)}ms"
  26. end
  27. end
  28. # Use the logger configured for ActionMailer::Base.
  29. 1 def logger
  30. ActionMailer::Base.logger
  31. end
  32. end
  33. end
  34. 1 ActionMailer::LogSubscriber.attach_to :action_mailer

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/mail_helper.rb

30.43% lines covered

23 relevant lines. 7 lines covered and 16 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionMailer
  3. # Provides helper methods for ActionMailer::Base that can be used for easily
  4. # formatting messages, accessing mailer or message instances, and the
  5. # attachments list.
  6. 1 module MailHelper
  7. # Take the text and format it, indented two spaces for each line, and
  8. # wrapped at 72 columns:
  9. #
  10. # text = <<-TEXT
  11. # This is
  12. # the paragraph.
  13. #
  14. # * item1 * item2
  15. # TEXT
  16. #
  17. # block_format text
  18. # # => " This is the paragraph.\n\n * item1\n * item2\n"
  19. 1 def block_format(text)
  20. formatted = text.split(/\n\r?\n/).collect { |paragraph|
  21. format_paragraph(paragraph)
  22. }.join("\n\n")
  23. # Make list points stand on their own line
  24. formatted.gsub!(/[ ]*([*]+) ([^*]*)/) { " #{$1} #{$2.strip}\n" }
  25. formatted.gsub!(/[ ]*([#]+) ([^#]*)/) { " #{$1} #{$2.strip}\n" }
  26. formatted
  27. end
  28. # Access the mailer instance.
  29. 1 def mailer
  30. @_controller
  31. end
  32. # Access the message instance.
  33. 1 def message
  34. @_message
  35. end
  36. # Access the message attachments list.
  37. 1 def attachments
  38. mailer.attachments
  39. end
  40. # Returns +text+ wrapped at +len+ columns and indented +indent+ spaces.
  41. # By default column length +len+ equals 72 characters and indent
  42. # +indent+ equal two spaces.
  43. #
  44. # my_text = 'Here is a sample text with more than 40 characters'
  45. #
  46. # format_paragraph(my_text, 25, 4)
  47. # # => " Here is a sample text with\n more than 40 characters"
  48. 1 def format_paragraph(text, len = 72, indent = 2)
  49. sentences = [[]]
  50. text.split.each do |word|
  51. if sentences.first.present? && (sentences.last + [word]).join(" ").length > len
  52. sentences << [word]
  53. else
  54. sentences.last << word
  55. end
  56. end
  57. indentation = " " * indent
  58. sentences.map! { |sentence|
  59. "#{indentation}#{sentence.join(' ')}"
  60. }.join "\n"
  61. end
  62. end
  63. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/message_delivery.rb

42.86% lines covered

35 relevant lines. 15 lines covered and 20 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "delegate"
  3. 1 module ActionMailer
  4. # The <tt>ActionMailer::MessageDelivery</tt> class is used by
  5. # ActionMailer::Base when creating a new mailer.
  6. # <tt>MessageDelivery</tt> is a wrapper (+Delegator+ subclass) around a lazy
  7. # created <tt>Mail::Message</tt>. You can get direct access to the
  8. # <tt>Mail::Message</tt>, deliver the email or schedule the email to be sent
  9. # through Active Job.
  10. #
  11. # Notifier.welcome(User.first) # an ActionMailer::MessageDelivery object
  12. # Notifier.welcome(User.first).deliver_now # sends the email
  13. # Notifier.welcome(User.first).deliver_later # enqueue email delivery as a job through Active Job
  14. # Notifier.welcome(User.first).message # a Mail::Message object
  15. 1 class MessageDelivery < Delegator
  16. 1 def initialize(mailer_class, action, *args) #:nodoc:
  17. @mailer_class, @action, @args = mailer_class, action, args
  18. # The mail is only processed if we try to call any methods on it.
  19. # Typical usage will leave it unloaded and call deliver_later.
  20. @processed_mailer = nil
  21. @mail_message = nil
  22. end
  23. # Method calls are delegated to the Mail::Message that's ready to deliver.
  24. 1 def __getobj__ #:nodoc:
  25. @mail_message ||= processed_mailer.message
  26. end
  27. # Unused except for delegator internals (dup, marshaling).
  28. 1 def __setobj__(mail_message) #:nodoc:
  29. @mail_message = mail_message
  30. end
  31. # Returns the resulting Mail::Message
  32. 1 def message
  33. __getobj__
  34. end
  35. # Was the delegate loaded, causing the mailer action to be processed?
  36. 1 def processed?
  37. @processed_mailer || @mail_message
  38. end
  39. # Enqueues the email to be delivered through Active Job. When the
  40. # job runs it will send the email using +deliver_now!+. That means
  41. # that the message will be sent bypassing checking +perform_deliveries+
  42. # and +raise_delivery_errors+, so use with caution.
  43. #
  44. # Notifier.welcome(User.first).deliver_later!
  45. # Notifier.welcome(User.first).deliver_later!(wait: 1.hour)
  46. # Notifier.welcome(User.first).deliver_later!(wait_until: 10.hours.from_now)
  47. #
  48. # Options:
  49. #
  50. # * <tt>:wait</tt> - Enqueue the email to be delivered with a delay
  51. # * <tt>:wait_until</tt> - Enqueue the email to be delivered at (after) a specific date / time
  52. # * <tt>:queue</tt> - Enqueue the email on the specified queue
  53. #
  54. # By default, the email will be enqueued using <tt>ActionMailer::DeliveryJob</tt>. Each
  55. # <tt>ActionMailer::Base</tt> class can specify the job to use by setting the class variable
  56. # +delivery_job+.
  57. #
  58. # class AccountRegistrationMailer < ApplicationMailer
  59. # self.delivery_job = RegistrationDeliveryJob
  60. # end
  61. 1 def deliver_later!(options = {})
  62. enqueue_delivery :deliver_now!, options
  63. end
  64. # Enqueues the email to be delivered through Active Job. When the
  65. # job runs it will send the email using +deliver_now+.
  66. #
  67. # Notifier.welcome(User.first).deliver_later
  68. # Notifier.welcome(User.first).deliver_later(wait: 1.hour)
  69. # Notifier.welcome(User.first).deliver_later(wait_until: 10.hours.from_now)
  70. #
  71. # Options:
  72. #
  73. # * <tt>:wait</tt> - Enqueue the email to be delivered with a delay.
  74. # * <tt>:wait_until</tt> - Enqueue the email to be delivered at (after) a specific date / time.
  75. # * <tt>:queue</tt> - Enqueue the email on the specified queue.
  76. #
  77. # By default, the email will be enqueued using <tt>ActionMailer::DeliveryJob</tt>. Each
  78. # <tt>ActionMailer::Base</tt> class can specify the job to use by setting the class variable
  79. # +delivery_job+.
  80. #
  81. # class AccountRegistrationMailer < ApplicationMailer
  82. # self.delivery_job = RegistrationDeliveryJob
  83. # end
  84. 1 def deliver_later(options = {})
  85. enqueue_delivery :deliver_now, options
  86. end
  87. # Delivers an email without checking +perform_deliveries+ and +raise_delivery_errors+,
  88. # so use with caution.
  89. #
  90. # Notifier.welcome(User.first).deliver_now!
  91. #
  92. 1 def deliver_now!
  93. processed_mailer.handle_exceptions do
  94. message.deliver!
  95. end
  96. end
  97. # Delivers an email:
  98. #
  99. # Notifier.welcome(User.first).deliver_now
  100. #
  101. 1 def deliver_now
  102. processed_mailer.handle_exceptions do
  103. message.deliver
  104. end
  105. end
  106. 1 private
  107. # Returns the processed Mailer instance. We keep this instance
  108. # on hand so we can delegate exception handling to it.
  109. 1 def processed_mailer
  110. @processed_mailer ||= @mailer_class.new.tap do |mailer|
  111. mailer.process @action, *@args
  112. end
  113. end
  114. 1 def enqueue_delivery(delivery_method, options = {})
  115. if processed?
  116. ::Kernel.raise "You've accessed the message before asking to " \
  117. "deliver it later, so you may have made local changes that would " \
  118. "be silently lost if we enqueued a job to deliver it. Why? Only " \
  119. "the mailer method *arguments* are passed with the delivery job! " \
  120. "Do not access the message in any way if you mean to deliver it " \
  121. "later. Workarounds: 1. don't touch the message before calling " \
  122. "#deliver_later, 2. only touch the message *within your mailer " \
  123. "method*, or 3. use a custom Active Job instead of #deliver_later."
  124. else
  125. args = @mailer_class.name, @action.to_s, delivery_method.to_s, *@args
  126. job = @mailer_class.delivery_job
  127. job.set(options).perform_later(*args)
  128. end
  129. end
  130. end
  131. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/parameterized.rb

54.29% lines covered

35 relevant lines. 19 lines covered and 16 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionMailer
  3. # Provides the option to parameterize mailers in order to share instance variable
  4. # setup, processing, and common headers.
  5. #
  6. # Consider this example that does not use parameterization:
  7. #
  8. # class InvitationsMailer < ApplicationMailer
  9. # def account_invitation(inviter, invitee)
  10. # @account = inviter.account
  11. # @inviter = inviter
  12. # @invitee = invitee
  13. #
  14. # subject = "#{@inviter.name} invited you to their Basecamp (#{@account.name})"
  15. #
  16. # mail \
  17. # subject: subject,
  18. # to: invitee.email_address,
  19. # from: common_address(inviter),
  20. # reply_to: inviter.email_address_with_name
  21. # end
  22. #
  23. # def project_invitation(project, inviter, invitee)
  24. # @account = inviter.account
  25. # @project = project
  26. # @inviter = inviter
  27. # @invitee = invitee
  28. # @summarizer = ProjectInvitationSummarizer.new(@project.bucket)
  29. #
  30. # subject = "#{@inviter.name.familiar} added you to a project in Basecamp (#{@account.name})"
  31. #
  32. # mail \
  33. # subject: subject,
  34. # to: invitee.email_address,
  35. # from: common_address(inviter),
  36. # reply_to: inviter.email_address_with_name
  37. # end
  38. #
  39. # def bulk_project_invitation(projects, inviter, invitee)
  40. # @account = inviter.account
  41. # @projects = projects.sort_by(&:name)
  42. # @inviter = inviter
  43. # @invitee = invitee
  44. #
  45. # subject = "#{@inviter.name.familiar} added you to some new stuff in Basecamp (#{@account.name})"
  46. #
  47. # mail \
  48. # subject: subject,
  49. # to: invitee.email_address,
  50. # from: common_address(inviter),
  51. # reply_to: inviter.email_address_with_name
  52. # end
  53. # end
  54. #
  55. # InvitationsMailer.account_invitation(person_a, person_b).deliver_later
  56. #
  57. # Using parameterized mailers, this can be rewritten as:
  58. #
  59. # class InvitationsMailer < ApplicationMailer
  60. # before_action { @inviter, @invitee = params[:inviter], params[:invitee] }
  61. # before_action { @account = params[:inviter].account }
  62. #
  63. # default to: -> { @invitee.email_address },
  64. # from: -> { common_address(@inviter) },
  65. # reply_to: -> { @inviter.email_address_with_name }
  66. #
  67. # def account_invitation
  68. # mail subject: "#{@inviter.name} invited you to their Basecamp (#{@account.name})"
  69. # end
  70. #
  71. # def project_invitation
  72. # @project = params[:project]
  73. # @summarizer = ProjectInvitationSummarizer.new(@project.bucket)
  74. #
  75. # mail subject: "#{@inviter.name.familiar} added you to a project in Basecamp (#{@account.name})"
  76. # end
  77. #
  78. # def bulk_project_invitation
  79. # @projects = params[:projects].sort_by(&:name)
  80. #
  81. # mail subject: "#{@inviter.name.familiar} added you to some new stuff in Basecamp (#{@account.name})"
  82. # end
  83. # end
  84. #
  85. # InvitationsMailer.with(inviter: person_a, invitee: person_b).account_invitation.deliver_later
  86. 1 module Parameterized
  87. 1 extend ActiveSupport::Concern
  88. 1 included do
  89. 1 attr_accessor :params
  90. end
  91. 1 module ClassMethods
  92. # Provide the parameters to the mailer in order to use them in the instance methods and callbacks.
  93. #
  94. # InvitationsMailer.with(inviter: person_a, invitee: person_b).account_invitation.deliver_later
  95. #
  96. # See Parameterized documentation for full example.
  97. 1 def with(params)
  98. ActionMailer::Parameterized::Mailer.new(self, params)
  99. end
  100. end
  101. 1 class Mailer # :nodoc:
  102. 1 def initialize(mailer, params)
  103. @mailer, @params = mailer, params
  104. end
  105. 1 private
  106. 1 def method_missing(method_name, *args)
  107. if @mailer.action_methods.include?(method_name.to_s)
  108. ActionMailer::Parameterized::MessageDelivery.new(@mailer, method_name, @params, *args)
  109. else
  110. super
  111. end
  112. end
  113. 1 def respond_to_missing?(method, include_all = false)
  114. @mailer.respond_to?(method, include_all)
  115. end
  116. end
  117. 1 class MessageDelivery < ActionMailer::MessageDelivery # :nodoc:
  118. 1 def initialize(mailer_class, action, params, *args)
  119. super(mailer_class, action, *args)
  120. @params = params
  121. end
  122. 1 private
  123. 1 def processed_mailer
  124. @processed_mailer ||= @mailer_class.new.tap do |mailer|
  125. mailer.params = @params
  126. mailer.process @action, *@args
  127. end
  128. end
  129. 1 def enqueue_delivery(delivery_method, options = {})
  130. if processed?
  131. super
  132. else
  133. args = @mailer_class.name, @action.to_s, delivery_method.to_s, @params, *@args
  134. ActionMailer::Parameterized::DeliveryJob.set(options).perform_later(*args)
  135. end
  136. end
  137. end
  138. 1 class DeliveryJob < ActionMailer::DeliveryJob # :nodoc:
  139. 1 def perform(mailer, mail_method, delivery_method, params, *args)
  140. mailer.constantize.with(params).public_send(mail_method, *args).send(delivery_method)
  141. end
  142. end
  143. end
  144. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/preview.rb

55.77% lines covered

52 relevant lines. 29 lines covered and 23 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/descendants_tracker"
  3. 1 module ActionMailer
  4. 1 module Previews #:nodoc:
  5. 1 extend ActiveSupport::Concern
  6. 1 included do
  7. # Set the location of mailer previews through app configuration:
  8. #
  9. # config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
  10. #
  11. 1 mattr_accessor :preview_path, instance_writer: false
  12. # Enable or disable mailer previews through app configuration:
  13. #
  14. # config.action_mailer.show_previews = true
  15. #
  16. # Defaults to +true+ for development environment
  17. #
  18. 1 mattr_accessor :show_previews, instance_writer: false
  19. # :nodoc:
  20. 1 mattr_accessor :preview_interceptors, instance_writer: false, default: [ActionMailer::InlinePreviewInterceptor]
  21. end
  22. 1 module ClassMethods
  23. # Register one or more Interceptors which will be called before mail is previewed.
  24. 1 def register_preview_interceptors(*interceptors)
  25. 1 interceptors.flatten.compact.each { |interceptor| register_preview_interceptor(interceptor) }
  26. end
  27. # Register an Interceptor which will be called before mail is previewed.
  28. # Either a class or a string can be passed in as the Interceptor. If a
  29. # string is passed in it will be constantized.
  30. 1 def register_preview_interceptor(interceptor)
  31. preview_interceptor = \
  32. case interceptor
  33. when String, Symbol
  34. interceptor.to_s.camelize.constantize
  35. else
  36. interceptor
  37. end
  38. unless preview_interceptors.include?(preview_interceptor)
  39. preview_interceptors << preview_interceptor
  40. end
  41. end
  42. end
  43. end
  44. 1 class Preview
  45. 1 extend ActiveSupport::DescendantsTracker
  46. 1 attr_reader :params
  47. 1 def initialize(params = {})
  48. @params = params
  49. end
  50. 1 class << self
  51. # Returns all mailer preview classes.
  52. 1 def all
  53. load_previews if descendants.empty?
  54. descendants
  55. end
  56. # Returns the mail object for the given email name. The registered preview
  57. # interceptors will be informed so that they can transform the message
  58. # as they would if the mail was actually being delivered.
  59. 1 def call(email, params = {})
  60. preview = new(params)
  61. message = preview.public_send(email)
  62. inform_preview_interceptors(message)
  63. message
  64. end
  65. # Returns all of the available email previews.
  66. 1 def emails
  67. public_instance_methods(false).map(&:to_s).sort
  68. end
  69. # Returns +true+ if the email exists.
  70. 1 def email_exists?(email)
  71. emails.include?(email)
  72. end
  73. # Returns +true+ if the preview exists.
  74. 1 def exists?(preview)
  75. all.any? { |p| p.preview_name == preview }
  76. end
  77. # Find a mailer preview by its underscored class name.
  78. 1 def find(preview)
  79. all.find { |p| p.preview_name == preview }
  80. end
  81. # Returns the underscored name of the mailer preview without the suffix.
  82. 1 def preview_name
  83. name.sub(/Preview$/, "").underscore
  84. end
  85. 1 private
  86. 1 def load_previews
  87. if preview_path
  88. Dir["#{preview_path}/**/*_preview.rb"].sort.each { |file| require_dependency file }
  89. end
  90. end
  91. 1 def preview_path
  92. Base.preview_path
  93. end
  94. 1 def show_previews
  95. Base.show_previews
  96. end
  97. 1 def inform_preview_interceptors(message)
  98. Base.preview_interceptors.each do |interceptor|
  99. interceptor.previewing_email(message)
  100. end
  101. end
  102. end
  103. end
  104. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/rescuable.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionMailer #:nodoc:
  3. # Provides +rescue_from+ for mailers. Wraps mailer action processing,
  4. # mail job processing, and mail delivery.
  5. 1 module Rescuable
  6. 1 extend ActiveSupport::Concern
  7. 1 include ActiveSupport::Rescuable
  8. 1 class_methods do
  9. 1 def handle_exception(exception) #:nodoc:
  10. rescue_with_handler(exception) || raise(exception)
  11. end
  12. end
  13. 1 def handle_exceptions #:nodoc:
  14. yield
  15. rescue => exception
  16. rescue_with_handler(exception) || raise
  17. end
  18. 1 private
  19. 1 def process(*)
  20. handle_exceptions do
  21. super
  22. end
  23. end
  24. end
  25. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_case.rb

59.42% lines covered

69 relevant lines. 41 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/test_case"
  3. 1 require "rails-dom-testing"
  4. 1 module ActionMailer
  5. 1 class NonInferrableMailerError < ::StandardError
  6. 1 def initialize(name)
  7. super "Unable to determine the mailer to test from #{name}. " \
  8. "You'll need to specify it using tests YourMailer in your " \
  9. "test case definition"
  10. end
  11. end
  12. 1 class TestCase < ActiveSupport::TestCase
  13. 1 module ClearTestDeliveries
  14. 1 extend ActiveSupport::Concern
  15. 1 included do
  16. 1 setup :clear_test_deliveries
  17. 1 teardown :clear_test_deliveries
  18. end
  19. 1 private
  20. 1 def clear_test_deliveries
  21. 6 if ActionMailer::Base.delivery_method == :test
  22. 6 ActionMailer::Base.deliveries.clear
  23. end
  24. end
  25. end
  26. 1 module Behavior
  27. 1 extend ActiveSupport::Concern
  28. 1 include ActiveSupport::Testing::ConstantLookup
  29. 1 include TestHelper
  30. 1 include Rails::Dom::Testing::Assertions::SelectorAssertions
  31. 1 include Rails::Dom::Testing::Assertions::DomAssertions
  32. 1 included do
  33. 1 class_attribute :_mailer_class
  34. 1 setup :initialize_test_deliveries
  35. 1 setup :set_expected_mail
  36. 1 teardown :restore_test_deliveries
  37. 1 ActiveSupport.run_load_hooks(:action_mailer_test_case, self)
  38. end
  39. 1 module ClassMethods
  40. 1 def tests(mailer)
  41. case mailer
  42. when String, Symbol
  43. self._mailer_class = mailer.to_s.camelize.constantize
  44. when Module
  45. self._mailer_class = mailer
  46. else
  47. raise NonInferrableMailerError.new(mailer)
  48. end
  49. end
  50. 1 def mailer_class
  51. if mailer = _mailer_class
  52. mailer
  53. else
  54. tests determine_default_mailer(name)
  55. end
  56. end
  57. 1 def determine_default_mailer(name)
  58. mailer = determine_constant_from_test_name(name) do |constant|
  59. Class === constant && constant < ActionMailer::Base
  60. end
  61. raise NonInferrableMailerError.new(name) if mailer.nil?
  62. mailer
  63. end
  64. end
  65. 1 private
  66. 1 def initialize_test_deliveries
  67. set_delivery_method :test
  68. @old_perform_deliveries = ActionMailer::Base.perform_deliveries
  69. ActionMailer::Base.perform_deliveries = true
  70. ActionMailer::Base.deliveries.clear
  71. end
  72. 1 def restore_test_deliveries
  73. restore_delivery_method
  74. ActionMailer::Base.perform_deliveries = @old_perform_deliveries
  75. end
  76. 1 def set_delivery_method(method)
  77. @old_delivery_method = ActionMailer::Base.delivery_method
  78. ActionMailer::Base.delivery_method = method
  79. end
  80. 1 def restore_delivery_method
  81. ActionMailer::Base.deliveries.clear
  82. ActionMailer::Base.delivery_method = @old_delivery_method
  83. end
  84. 1 def set_expected_mail
  85. @expected = Mail.new
  86. @expected.content_type ["text", "plain", { "charset" => charset }]
  87. @expected.mime_version = "1.0"
  88. end
  89. 1 def charset
  90. "UTF-8"
  91. end
  92. 1 def encode(subject)
  93. Mail::Encodings.q_value_encode(subject, charset)
  94. end
  95. 1 def read_fixture(action)
  96. IO.readlines(File.join(Rails.root, "test", "fixtures", self.class.mailer_class.name.underscore, action))
  97. end
  98. end
  99. 1 include Behavior
  100. end
  101. end

target/rubygems/gems/actionmailer-5.2.3/lib/action_mailer/test_helper.rb

37.5% lines covered

24 relevant lines. 9 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_job"
  3. 1 module ActionMailer
  4. # Provides helper methods for testing Action Mailer, including #assert_emails
  5. # and #assert_no_emails.
  6. 1 module TestHelper
  7. 1 include ActiveJob::TestHelper
  8. # Asserts that the number of emails sent matches the given number.
  9. #
  10. # def test_emails
  11. # assert_emails 0
  12. # ContactMailer.welcome.deliver_now
  13. # assert_emails 1
  14. # ContactMailer.welcome.deliver_now
  15. # assert_emails 2
  16. # end
  17. #
  18. # If a block is passed, that block should cause the specified number of
  19. # emails to be sent.
  20. #
  21. # def test_emails_again
  22. # assert_emails 1 do
  23. # ContactMailer.welcome.deliver_now
  24. # end
  25. #
  26. # assert_emails 2 do
  27. # ContactMailer.welcome.deliver_now
  28. # ContactMailer.welcome.deliver_now
  29. # end
  30. # end
  31. 1 def assert_emails(number)
  32. if block_given?
  33. original_count = ActionMailer::Base.deliveries.size
  34. yield
  35. new_count = ActionMailer::Base.deliveries.size
  36. assert_equal number, new_count - original_count, "#{number} emails expected, but #{new_count - original_count} were sent"
  37. else
  38. assert_equal number, ActionMailer::Base.deliveries.size
  39. end
  40. end
  41. # Asserts that no emails have been sent.
  42. #
  43. # def test_emails
  44. # assert_no_emails
  45. # ContactMailer.welcome.deliver_now
  46. # assert_emails 1
  47. # end
  48. #
  49. # If a block is passed, that block should not cause any emails to be sent.
  50. #
  51. # def test_emails_again
  52. # assert_no_emails do
  53. # # No emails should be sent from this block
  54. # end
  55. # end
  56. #
  57. # Note: This assertion is simply a shortcut for:
  58. #
  59. # assert_emails 0, &block
  60. 1 def assert_no_emails(&block)
  61. assert_emails 0, &block
  62. end
  63. # Asserts that the number of emails enqueued for later delivery matches
  64. # the given number.
  65. #
  66. # def test_emails
  67. # assert_enqueued_emails 0
  68. # ContactMailer.welcome.deliver_later
  69. # assert_enqueued_emails 1
  70. # ContactMailer.welcome.deliver_later
  71. # assert_enqueued_emails 2
  72. # end
  73. #
  74. # If a block is passed, that block should cause the specified number of
  75. # emails to be enqueued.
  76. #
  77. # def test_emails_again
  78. # assert_enqueued_emails 1 do
  79. # ContactMailer.welcome.deliver_later
  80. # end
  81. #
  82. # assert_enqueued_emails 2 do
  83. # ContactMailer.welcome.deliver_later
  84. # ContactMailer.welcome.deliver_later
  85. # end
  86. # end
  87. 1 def assert_enqueued_emails(number, &block)
  88. assert_enqueued_jobs number, only: [ ActionMailer::DeliveryJob, ActionMailer::Parameterized::DeliveryJob ], &block
  89. end
  90. # Asserts that block should cause the specified email
  91. # to be enqueued.
  92. #
  93. # def test_email_in_block
  94. # assert_enqueued_email_with ContactMailer, :welcome do
  95. # ContactMailer.welcome.deliver_later
  96. # end
  97. # end
  98. #
  99. # If +args+ is provided as a Hash, a parameterized email is matched.
  100. #
  101. # def test_parameterized_email
  102. # assert_enqueued_email_with ContactMailer, :welcome,
  103. # args: {email: 'user@example.com} do
  104. # ContactMailer.with(email: 'user@example.com').welcome.deliver_later
  105. # end
  106. # end
  107. 1 def assert_enqueued_email_with(mailer, method, args: nil, queue: "mailers", &block)
  108. if args.is_a? Hash
  109. job = ActionMailer::Parameterized::DeliveryJob
  110. args = [mailer.to_s, method.to_s, "deliver_now", args]
  111. else
  112. job = ActionMailer::DeliveryJob
  113. args = [mailer.to_s, method.to_s, "deliver_now", *args]
  114. end
  115. assert_enqueued_with(job: job, args: args, queue: queue, &block)
  116. end
  117. # Asserts that no emails are enqueued for later delivery.
  118. #
  119. # def test_no_emails
  120. # assert_no_enqueued_emails
  121. # ContactMailer.welcome.deliver_later
  122. # assert_enqueued_emails 1
  123. # end
  124. #
  125. # If a block is provided, it should not cause any emails to be enqueued.
  126. #
  127. # def test_no_emails
  128. # assert_no_enqueued_emails do
  129. # # No emails should be enqueued from this block
  130. # end
  131. # end
  132. 1 def assert_no_enqueued_emails(&block)
  133. assert_no_enqueued_jobs only: [ ActionMailer::DeliveryJob, ActionMailer::Parameterized::DeliveryJob ], &block
  134. end
  135. end
  136. end

target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api.rb

80.0% lines covered

15 relevant lines. 12 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view"
  3. 1 require "action_controller"
  4. 1 require "action_controller/log_subscriber"
  5. 1 module ActionController
  6. # API Controller is a lightweight version of <tt>ActionController::Base</tt>,
  7. # created for applications that don't require all functionalities that a complete
  8. # \Rails controller provides, allowing you to create controllers with just the
  9. # features that you need for API only applications.
  10. #
  11. # An API Controller is different from a normal controller in the sense that
  12. # by default it doesn't include a number of features that are usually required
  13. # by browser access only: layouts and templates rendering, cookies, sessions,
  14. # flash, assets, and so on. This makes the entire controller stack thinner,
  15. # suitable for API applications. It doesn't mean you won't have such
  16. # features if you need them: they're all available for you to include in
  17. # your application, they're just not part of the default API controller stack.
  18. #
  19. # Normally, +ApplicationController+ is the only controller that inherits from
  20. # <tt>ActionController::API</tt>. All other controllers in turn inherit from
  21. # +ApplicationController+.
  22. #
  23. # A sample controller could look like this:
  24. #
  25. # class PostsController < ApplicationController
  26. # def index
  27. # posts = Post.all
  28. # render json: posts
  29. # end
  30. # end
  31. #
  32. # Request, response, and parameters objects all work the exact same way as
  33. # <tt>ActionController::Base</tt>.
  34. #
  35. # == Renders
  36. #
  37. # The default API Controller stack includes all renderers, which means you
  38. # can use <tt>render :json</tt> and brothers freely in your controllers. Keep
  39. # in mind that templates are not going to be rendered, so you need to ensure
  40. # your controller is calling either <tt>render</tt> or <tt>redirect_to</tt> in
  41. # all actions, otherwise it will return 204 No Content.
  42. #
  43. # def show
  44. # post = Post.find(params[:id])
  45. # render json: post
  46. # end
  47. #
  48. # == Redirects
  49. #
  50. # Redirects are used to move from one action to another. You can use the
  51. # <tt>redirect_to</tt> method in your controllers in the same way as in
  52. # <tt>ActionController::Base</tt>. For example:
  53. #
  54. # def create
  55. # redirect_to root_url and return if not_authorized?
  56. # # do stuff here
  57. # end
  58. #
  59. # == Adding New Behavior
  60. #
  61. # In some scenarios you may want to add back some functionality provided by
  62. # <tt>ActionController::Base</tt> that is not present by default in
  63. # <tt>ActionController::API</tt>, for instance <tt>MimeResponds</tt>. This
  64. # module gives you the <tt>respond_to</tt> method. Adding it is quite simple,
  65. # you just need to include the module in a specific controller or in
  66. # +ApplicationController+ in case you want it available in your entire
  67. # application:
  68. #
  69. # class ApplicationController < ActionController::API
  70. # include ActionController::MimeResponds
  71. # end
  72. #
  73. # class PostsController < ApplicationController
  74. # def index
  75. # posts = Post.all
  76. #
  77. # respond_to do |format|
  78. # format.json { render json: posts }
  79. # format.xml { render xml: posts }
  80. # end
  81. # end
  82. # end
  83. #
  84. # Make sure to check the modules included in <tt>ActionController::Base</tt>
  85. # if you want to use any other functionality that is not provided
  86. # by <tt>ActionController::API</tt> out of the box.
  87. 1 class API < Metal
  88. 1 abstract!
  89. # Shortcut helper that returns all the ActionController::API modules except
  90. # the ones passed as arguments:
  91. #
  92. # class MyAPIBaseController < ActionController::Metal
  93. # ActionController::API.without_modules(:ForceSSL, :UrlFor).each do |left|
  94. # include left
  95. # end
  96. # end
  97. #
  98. # This gives better control over what you want to exclude and makes it easier
  99. # to create an API controller class, instead of listing the modules required
  100. # manually.
  101. 1 def self.without_modules(*modules)
  102. modules = modules.map do |m|
  103. m.is_a?(Symbol) ? ActionController.const_get(m) : m
  104. end
  105. MODULES - modules
  106. end
  107. 1 MODULES = [
  108. AbstractController::Rendering,
  109. UrlFor,
  110. Redirecting,
  111. ApiRendering,
  112. Renderers::All,
  113. ConditionalGet,
  114. BasicImplicitRender,
  115. StrongParameters,
  116. ForceSSL,
  117. DataStreaming,
  118. # Before callbacks should also be executed as early as possible, so
  119. # also include them at the bottom.
  120. AbstractController::Callbacks,
  121. # Append rescue at the bottom to wrap as much as possible.
  122. Rescue,
  123. # Add instrumentations hooks at the bottom, to ensure they instrument
  124. # all the methods properly.
  125. Instrumentation,
  126. # Params wrapper should come before instrumentation so they are
  127. # properly showed in logs
  128. ParamsWrapper
  129. ]
  130. 1 MODULES.each do |mod|
  131. 14 include mod
  132. end
  133. 1 ActiveSupport.run_load_hooks(:action_controller_api, self)
  134. 1 ActiveSupport.run_load_hooks(:action_controller, self)
  135. end
  136. end

target/rubygems/gems/actionpack-5.2.3/lib/action_controller/api/api_rendering.rb

75.0% lines covered

8 relevant lines. 6 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionController
  3. 1 module ApiRendering
  4. 1 extend ActiveSupport::Concern
  5. 1 included do
  6. 1 include Rendering
  7. end
  8. 1 def render_to_body(options = {})
  9. _process_options(options)
  10. super
  11. end
  12. end
  13. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb

88.89% lines covered

18 relevant lines. 16 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionDispatch
  3. # Provides callbacks to be executed before and after dispatching the request.
  4. 1 class Callbacks
  5. 1 include ActiveSupport::Callbacks
  6. 1 define_callbacks :call
  7. 1 class << self
  8. 1 def before(*args, &block)
  9. set_callback(:call, :before, *args, &block)
  10. end
  11. 1 def after(*args, &block)
  12. set_callback(:call, :after, *args, &block)
  13. end
  14. end
  15. 1 def initialize(app)
  16. 1 @app = app
  17. end
  18. 1 def call(env)
  19. 3 error = nil
  20. 3 result = run_callbacks :call do
  21. 3 begin
  22. 3 @app.call(env)
  23. rescue => error
  24. end
  25. end
  26. 3 raise error if error
  27. 3 result
  28. end
  29. end
  30. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb

33.33% lines covered

105 relevant lines. 35 lines covered and 70 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch/http/request"
  3. 1 require "action_dispatch/middleware/exception_wrapper"
  4. 1 require "action_dispatch/routing/inspector"
  5. 1 require "action_view"
  6. 1 require "action_view/base"
  7. 1 require "pp"
  8. 1 module ActionDispatch
  9. # This middleware is responsible for logging exceptions and
  10. # showing a debugging page in case the request is local.
  11. 1 class DebugExceptions
  12. 1 RESCUES_TEMPLATE_PATH = File.expand_path("templates", __dir__)
  13. 1 class DebugView < ActionView::Base
  14. 1 def debug_params(params)
  15. clean_params = params.clone
  16. clean_params.delete("action")
  17. clean_params.delete("controller")
  18. if clean_params.empty?
  19. "None"
  20. else
  21. PP.pp(clean_params, "".dup, 200)
  22. end
  23. end
  24. 1 def debug_headers(headers)
  25. if headers.present?
  26. headers.inspect.gsub(",", ",\n")
  27. else
  28. "None"
  29. end
  30. end
  31. 1 def debug_hash(object)
  32. object.to_hash.sort_by { |k, _| k.to_s }.map { |k, v| "#{k}: #{v.inspect rescue $!.message}" }.join("\n")
  33. end
  34. 1 def render(*)
  35. logger = ActionView::Base.logger
  36. if logger && logger.respond_to?(:silence)
  37. logger.silence { super }
  38. else
  39. super
  40. end
  41. end
  42. end
  43. 1 def initialize(app, routes_app = nil, response_format = :default)
  44. 1 @app = app
  45. 1 @routes_app = routes_app
  46. 1 @response_format = response_format
  47. end
  48. 1 def call(env)
  49. 3 request = ActionDispatch::Request.new env
  50. 3 _, headers, body = response = @app.call(env)
  51. 3 if headers["X-Cascade"] == "pass"
  52. body.close if body.respond_to?(:close)
  53. raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"
  54. end
  55. 3 response
  56. rescue Exception => exception
  57. raise exception unless request.show_exceptions?
  58. render_exception(request, exception)
  59. end
  60. 1 private
  61. 1 def render_exception(request, exception)
  62. backtrace_cleaner = request.get_header("action_dispatch.backtrace_cleaner")
  63. wrapper = ExceptionWrapper.new(backtrace_cleaner, exception)
  64. log_error(request, wrapper)
  65. if request.get_header("action_dispatch.show_detailed_exceptions")
  66. content_type = request.formats.first
  67. if api_request?(content_type)
  68. render_for_api_request(content_type, wrapper)
  69. else
  70. render_for_browser_request(request, wrapper)
  71. end
  72. else
  73. raise exception
  74. end
  75. end
  76. 1 def render_for_browser_request(request, wrapper)
  77. template = create_template(request, wrapper)
  78. file = "rescues/#{wrapper.rescue_template}"
  79. if request.xhr?
  80. body = template.render(template: file, layout: false, formats: [:text])
  81. format = "text/plain"
  82. else
  83. body = template.render(template: file, layout: "rescues/layout")
  84. format = "text/html"
  85. end
  86. render(wrapper.status_code, body, format)
  87. end
  88. 1 def render_for_api_request(content_type, wrapper)
  89. body = {
  90. status: wrapper.status_code,
  91. error: Rack::Utils::HTTP_STATUS_CODES.fetch(
  92. wrapper.status_code,
  93. Rack::Utils::HTTP_STATUS_CODES[500]
  94. ),
  95. exception: wrapper.exception.inspect,
  96. traces: wrapper.traces
  97. }
  98. to_format = "to_#{content_type.to_sym}"
  99. if content_type && body.respond_to?(to_format)
  100. formatted_body = body.public_send(to_format)
  101. format = content_type
  102. else
  103. formatted_body = body.to_json
  104. format = Mime[:json]
  105. end
  106. render(wrapper.status_code, formatted_body, format)
  107. end
  108. 1 def create_template(request, wrapper)
  109. traces = wrapper.traces
  110. trace_to_show = "Application Trace"
  111. if traces[trace_to_show].empty? && wrapper.rescue_template != "routing_error"
  112. trace_to_show = "Full Trace"
  113. end
  114. if source_to_show = traces[trace_to_show].first
  115. source_to_show_id = source_to_show[:id]
  116. end
  117. DebugView.new([RESCUES_TEMPLATE_PATH],
  118. request: request,
  119. exception: wrapper.exception,
  120. traces: traces,
  121. show_source_idx: source_to_show_id,
  122. trace_to_show: trace_to_show,
  123. routes_inspector: routes_inspector(wrapper.exception),
  124. source_extracts: wrapper.source_extracts,
  125. line_number: wrapper.line_number,
  126. file: wrapper.file
  127. )
  128. end
  129. 1 def render(status, body, format)
  130. [status, { "Content-Type" => "#{format}; charset=#{Response.default_charset}", "Content-Length" => body.bytesize.to_s }, [body]]
  131. end
  132. 1 def log_error(request, wrapper)
  133. logger = logger(request)
  134. return unless logger
  135. exception = wrapper.exception
  136. trace = wrapper.application_trace
  137. trace = wrapper.framework_trace if trace.empty?
  138. ActiveSupport::Deprecation.silence do
  139. logger.fatal " "
  140. logger.fatal "#{exception.class} (#{exception.message}):"
  141. log_array logger, exception.annoted_source_code if exception.respond_to?(:annoted_source_code)
  142. logger.fatal " "
  143. log_array logger, trace
  144. end
  145. end
  146. 1 def log_array(logger, array)
  147. if logger.formatter && logger.formatter.respond_to?(:tags_text)
  148. logger.fatal array.join("\n#{logger.formatter.tags_text}")
  149. else
  150. logger.fatal array.join("\n")
  151. end
  152. end
  153. 1 def logger(request)
  154. request.logger || ActionView::Base.logger || stderr_logger
  155. end
  156. 1 def stderr_logger
  157. @stderr_logger ||= ActiveSupport::Logger.new($stderr)
  158. end
  159. 1 def routes_inspector(exception)
  160. if @routes_app.respond_to?(:routes) && (exception.is_a?(ActionController::RoutingError) || exception.is_a?(ActionView::Template::Error))
  161. ActionDispatch::Routing::RoutesInspector.new(@routes_app.routes.routes)
  162. end
  163. end
  164. 1 def api_request?(content_type)
  165. @response_format == :api && !content_type.html?
  166. end
  167. end
  168. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/exception_wrapper.rb

37.1% lines covered

62 relevant lines. 23 lines covered and 39 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/attribute_accessors"
  3. 1 require "rack/utils"
  4. 1 module ActionDispatch
  5. 1 class ExceptionWrapper
  6. 1 cattr_accessor :rescue_responses, default: Hash.new(:internal_server_error).merge!(
  7. "ActionController::RoutingError" => :not_found,
  8. "AbstractController::ActionNotFound" => :not_found,
  9. "ActionController::MethodNotAllowed" => :method_not_allowed,
  10. "ActionController::UnknownHttpMethod" => :method_not_allowed,
  11. "ActionController::NotImplemented" => :not_implemented,
  12. "ActionController::UnknownFormat" => :not_acceptable,
  13. "ActionController::InvalidAuthenticityToken" => :unprocessable_entity,
  14. "ActionController::InvalidCrossOriginRequest" => :unprocessable_entity,
  15. "ActionDispatch::Http::Parameters::ParseError" => :bad_request,
  16. "ActionController::BadRequest" => :bad_request,
  17. "ActionController::ParameterMissing" => :bad_request,
  18. "Rack::QueryParser::ParameterTypeError" => :bad_request,
  19. "Rack::QueryParser::InvalidParameterError" => :bad_request
  20. )
  21. 1 cattr_accessor :rescue_templates, default: Hash.new("diagnostics").merge!(
  22. "ActionView::MissingTemplate" => "missing_template",
  23. "ActionController::RoutingError" => "routing_error",
  24. "AbstractController::ActionNotFound" => "unknown_action",
  25. "ActiveRecord::StatementInvalid" => "invalid_statement",
  26. "ActionView::Template::Error" => "template_error"
  27. )
  28. 1 attr_reader :backtrace_cleaner, :exception, :line_number, :file
  29. 1 def initialize(backtrace_cleaner, exception)
  30. @backtrace_cleaner = backtrace_cleaner
  31. @exception = original_exception(exception)
  32. expand_backtrace if exception.is_a?(SyntaxError) || exception.cause.is_a?(SyntaxError)
  33. end
  34. 1 def rescue_template
  35. @@rescue_templates[@exception.class.name]
  36. end
  37. 1 def status_code
  38. self.class.status_code_for_exception(@exception.class.name)
  39. end
  40. 1 def application_trace
  41. clean_backtrace(:silent)
  42. end
  43. 1 def framework_trace
  44. clean_backtrace(:noise)
  45. end
  46. 1 def full_trace
  47. clean_backtrace(:all)
  48. end
  49. 1 def traces
  50. application_trace_with_ids = []
  51. framework_trace_with_ids = []
  52. full_trace_with_ids = []
  53. full_trace.each_with_index do |trace, idx|
  54. trace_with_id = { id: idx, trace: trace }
  55. if application_trace.include?(trace)
  56. application_trace_with_ids << trace_with_id
  57. else
  58. framework_trace_with_ids << trace_with_id
  59. end
  60. full_trace_with_ids << trace_with_id
  61. end
  62. {
  63. "Application Trace" => application_trace_with_ids,
  64. "Framework Trace" => framework_trace_with_ids,
  65. "Full Trace" => full_trace_with_ids
  66. }
  67. end
  68. 1 def self.status_code_for_exception(class_name)
  69. Rack::Utils.status_code(@@rescue_responses[class_name])
  70. end
  71. 1 def source_extracts
  72. backtrace.map do |trace|
  73. file, line_number = extract_file_and_line_number(trace)
  74. {
  75. code: source_fragment(file, line_number),
  76. line_number: line_number
  77. }
  78. end
  79. end
  80. 1 private
  81. 1 def backtrace
  82. Array(@exception.backtrace)
  83. end
  84. 1 def original_exception(exception)
  85. if @@rescue_responses.has_key?(exception.cause.class.name)
  86. exception.cause
  87. else
  88. exception
  89. end
  90. end
  91. 1 def clean_backtrace(*args)
  92. if backtrace_cleaner
  93. backtrace_cleaner.clean(backtrace, *args)
  94. else
  95. backtrace
  96. end
  97. end
  98. 1 def source_fragment(path, line)
  99. return unless Rails.respond_to?(:root) && Rails.root
  100. full_path = Rails.root.join(path)
  101. if File.exist?(full_path)
  102. File.open(full_path, "r") do |file|
  103. start = [line - 3, 0].max
  104. lines = file.each_line.drop(start).take(6)
  105. Hash[*(start + 1..(lines.count + start)).zip(lines).flatten]
  106. end
  107. end
  108. end
  109. 1 def extract_file_and_line_number(trace)
  110. # Split by the first colon followed by some digits, which works for both
  111. # Windows and Unix path styles.
  112. file, line = trace.match(/^(.+?):(\d+).*$/, &:captures) || trace
  113. [file, line.to_i]
  114. end
  115. 1 def expand_backtrace
  116. @exception.backtrace.unshift(
  117. @exception.to_s.split("\n")
  118. ).flatten!
  119. end
  120. end
  121. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/executor.rb

100.0% lines covered

11 relevant lines. 11 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rack/body_proxy"
  3. 1 module ActionDispatch
  4. 1 class Executor
  5. 1 def initialize(app, executor)
  6. 1 @app, @executor = app, executor
  7. end
  8. 1 def call(env)
  9. 3 state = @executor.run!
  10. 3 begin
  11. 3 response = @app.call(env)
  12. 6 returned = response << ::Rack::BodyProxy.new(response.pop) { state.complete! }
  13. ensure
  14. 3 state.complete! unless returned
  15. end
  16. end
  17. end
  18. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/public_exceptions.rb

40.0% lines covered

25 relevant lines. 10 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionDispatch
  3. # When called, this middleware renders an error page. By default if an HTML
  4. # response is expected it will render static error pages from the <tt>/public</tt>
  5. # directory. For example when this middleware receives a 500 response it will
  6. # render the template found in <tt>/public/500.html</tt>.
  7. # If an internationalized locale is set, this middleware will attempt to render
  8. # the template in <tt>/public/500.<locale>.html</tt>. If an internationalized template
  9. # is not found it will fall back on <tt>/public/500.html</tt>.
  10. #
  11. # When a request with a content type other than HTML is made, this middleware
  12. # will attempt to convert error information into the appropriate response type.
  13. 1 class PublicExceptions
  14. 1 attr_accessor :public_path
  15. 1 def initialize(public_path)
  16. 1 @public_path = public_path
  17. end
  18. 1 def call(env)
  19. request = ActionDispatch::Request.new(env)
  20. status = request.path_info[1..-1].to_i
  21. content_type = request.formats.first
  22. body = { status: status, error: Rack::Utils::HTTP_STATUS_CODES.fetch(status, Rack::Utils::HTTP_STATUS_CODES[500]) }
  23. render(status, content_type, body)
  24. end
  25. 1 private
  26. 1 def render(status, content_type, body)
  27. format = "to_#{content_type.to_sym}" if content_type
  28. if format && body.respond_to?(format)
  29. render_format(status, content_type, body.public_send(format))
  30. else
  31. render_html(status)
  32. end
  33. end
  34. 1 def render_format(status, content_type, body)
  35. [status, { "Content-Type" => "#{content_type}; charset=#{ActionDispatch::Response.default_charset}",
  36. "Content-Length" => body.bytesize.to_s }, [body]]
  37. end
  38. 1 def render_html(status)
  39. path = "#{public_path}/#{status}.#{I18n.locale}.html"
  40. path = "#{public_path}/#{status}.html" unless (found = File.exist?(path))
  41. if found || File.exist?(path)
  42. render_format(status, "text/html", File.read(path))
  43. else
  44. [404, { "X-Cascade" => "pass" }, []]
  45. end
  46. end
  47. end
  48. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/remote_ip.rb

83.67% lines covered

49 relevant lines. 41 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "ipaddr"
  3. 1 module ActionDispatch
  4. # This middleware calculates the IP address of the remote client that is
  5. # making the request. It does this by checking various headers that could
  6. # contain the address, and then picking the last-set address that is not
  7. # on the list of trusted IPs. This follows the precedent set by e.g.
  8. # {the Tomcat server}[https://issues.apache.org/bugzilla/show_bug.cgi?id=50453],
  9. # with {reasoning explained at length}[http://blog.gingerlime.com/2012/rails-ip-spoofing-vulnerabilities-and-protection]
  10. # by @gingerlime. A more detailed explanation of the algorithm is given
  11. # at GetIp#calculate_ip.
  12. #
  13. # Some Rack servers concatenate repeated headers, like {HTTP RFC 2616}[https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2]
  14. # requires. Some Rack servers simply drop preceding headers, and only report
  15. # the value that was {given in the last header}[http://andre.arko.net/2011/12/26/repeated-headers-and-ruby-web-servers].
  16. # If you are behind multiple proxy servers (like NGINX to HAProxy to Unicorn)
  17. # then you should test your Rack server to make sure your data is good.
  18. #
  19. # IF YOU DON'T USE A PROXY, THIS MAKES YOU VULNERABLE TO IP SPOOFING.
  20. # This middleware assumes that there is at least one proxy sitting around
  21. # and setting headers with the client's remote IP address. If you don't use
  22. # a proxy, because you are hosted on e.g. Heroku without SSL, any client can
  23. # claim to have any IP address by setting the X-Forwarded-For header. If you
  24. # care about that, then you need to explicitly drop or ignore those headers
  25. # sometime before this middleware runs.
  26. 1 class RemoteIp
  27. 1 class IpSpoofAttackError < StandardError; end
  28. # The default trusted IPs list simply includes IP addresses that are
  29. # guaranteed by the IP specification to be private addresses. Those will
  30. # not be the ultimate client IP in production, and so are discarded. See
  31. # https://en.wikipedia.org/wiki/Private_network for details.
  32. TRUSTED_PROXIES = [
  33. "127.0.0.1", # localhost IPv4
  34. "::1", # localhost IPv6
  35. "fc00::/7", # private IPv6 range fc00::/7
  36. "10.0.0.0/8", # private IPv4 range 10.x.x.x
  37. "172.16.0.0/12", # private IPv4 range 172.16.0.0 .. 172.31.255.255
  38. "192.168.0.0/16", # private IPv4 range 192.168.x.x
  39. 6 ].map { |proxy| IPAddr.new(proxy) }
  40. 1 attr_reader :check_ip, :proxies
  41. # Create a new +RemoteIp+ middleware instance.
  42. #
  43. # The +ip_spoofing_check+ option is on by default. When on, an exception
  44. # is raised if it looks like the client is trying to lie about its own IP
  45. # address. It makes sense to turn off this check on sites aimed at non-IP
  46. # clients (like WAP devices), or behind proxies that set headers in an
  47. # incorrect or confusing way (like AWS ELB).
  48. #
  49. # The +custom_proxies+ argument can take an Array of string, IPAddr, or
  50. # Regexp objects which will be used instead of +TRUSTED_PROXIES+. If a
  51. # single string, IPAddr, or Regexp object is provided, it will be used in
  52. # addition to +TRUSTED_PROXIES+. Any proxy setup will put the value you
  53. # want in the middle (or at the beginning) of the X-Forwarded-For list,
  54. # with your proxy servers after it. If your proxies aren't removed, pass
  55. # them in via the +custom_proxies+ parameter. That way, the middleware will
  56. # ignore those IP addresses, and return the one that you want.
  57. 1 def initialize(app, ip_spoofing_check = true, custom_proxies = nil)
  58. 1 @app = app
  59. 1 @check_ip = ip_spoofing_check
  60. 1 @proxies = if custom_proxies.blank?
  61. 1 TRUSTED_PROXIES
  62. elsif custom_proxies.respond_to?(:any?)
  63. custom_proxies
  64. else
  65. Array(custom_proxies) + TRUSTED_PROXIES
  66. end
  67. end
  68. # Since the IP address may not be needed, we store the object here
  69. # without calculating the IP to keep from slowing down the majority of
  70. # requests. For those requests that do need to know the IP, the
  71. # GetIp#calculate_ip method will calculate the memoized client IP address.
  72. 1 def call(env)
  73. 3 req = ActionDispatch::Request.new env
  74. 3 req.remote_ip = GetIp.new(req, check_ip, proxies)
  75. 3 @app.call(req.env)
  76. end
  77. # The GetIp class exists as a way to defer processing of the request data
  78. # into an actual IP address. If the ActionDispatch::Request#remote_ip method
  79. # is called, this class will calculate the value and then memoize it.
  80. 1 class GetIp
  81. 1 def initialize(req, check_ip, proxies)
  82. 3 @req = req
  83. 3 @check_ip = check_ip
  84. 3 @proxies = proxies
  85. end
  86. # Sort through the various IP address headers, looking for the IP most
  87. # likely to be the address of the actual remote client making this
  88. # request.
  89. #
  90. # REMOTE_ADDR will be correct if the request is made directly against the
  91. # Ruby process, on e.g. Heroku. When the request is proxied by another
  92. # server like HAProxy or NGINX, the IP address that made the original
  93. # request will be put in an X-Forwarded-For header. If there are multiple
  94. # proxies, that header may contain a list of IPs. Other proxy services
  95. # set the Client-Ip header instead, so we check that too.
  96. #
  97. # As discussed in {this post about Rails IP Spoofing}[http://blog.gingerlime.com/2012/rails-ip-spoofing-vulnerabilities-and-protection/],
  98. # while the first IP in the list is likely to be the "originating" IP,
  99. # it could also have been set by the client maliciously.
  100. #
  101. # In order to find the first address that is (probably) accurate, we
  102. # take the list of IPs, remove known and trusted proxies, and then take
  103. # the last address left, which was presumably set by one of those proxies.
  104. 1 def calculate_ip
  105. # Set by the Rack web server, this is a single value.
  106. 3 remote_addr = ips_from(@req.remote_addr).last
  107. # Could be a CSV list and/or repeated headers that were concatenated.
  108. 3 client_ips = ips_from(@req.client_ip).reverse
  109. 3 forwarded_ips = ips_from(@req.x_forwarded_for).reverse
  110. # +Client-Ip+ and +X-Forwarded-For+ should not, generally, both be set.
  111. # If they are both set, it means that either:
  112. #
  113. # 1) This request passed through two proxies with incompatible IP header
  114. # conventions.
  115. # 2) The client passed one of +Client-Ip+ or +X-Forwarded-For+
  116. # (whichever the proxy servers weren't using) themselves.
  117. #
  118. # Either way, there is no way for us to determine which header is the
  119. # right one after the fact. Since we have no idea, if we are concerned
  120. # about IP spoofing we need to give up and explode. (If you're not
  121. # concerned about IP spoofing you can turn the +ip_spoofing_check+
  122. # option off.)
  123. 3 should_check_ip = @check_ip && client_ips.last && forwarded_ips.last
  124. 3 if should_check_ip && !forwarded_ips.include?(client_ips.last)
  125. # We don't know which came from the proxy, and which from the user
  126. raise IpSpoofAttackError, "IP spoofing attack?! " \
  127. "HTTP_CLIENT_IP=#{@req.client_ip.inspect} " \
  128. "HTTP_X_FORWARDED_FOR=#{@req.x_forwarded_for.inspect}"
  129. end
  130. # We assume these things about the IP headers:
  131. #
  132. # - X-Forwarded-For will be a list of IPs, one per proxy, or blank
  133. # - Client-Ip is propagated from the outermost proxy, or is blank
  134. # - REMOTE_ADDR will be the IP that made the request to Rack
  135. 3 ips = [forwarded_ips, client_ips, remote_addr].flatten.compact
  136. # If every single IP option is in the trusted list, just return REMOTE_ADDR
  137. 3 filter_proxies(ips).first || remote_addr
  138. end
  139. # Memoizes the value returned by #calculate_ip and returns it for
  140. # ActionDispatch::Request to use.
  141. 1 def to_s
  142. 3 @ip ||= calculate_ip
  143. end
  144. 1 private
  145. 1 def ips_from(header) # :doc:
  146. 9 return [] unless header
  147. # Split the comma-separated list into an array of strings.
  148. 3 ips = header.strip.split(/[,\s]+/)
  149. 3 ips.select do |ip|
  150. 3 begin
  151. # Only return IPs that are valid according to the IPAddr#new method.
  152. 3 range = IPAddr.new(ip).to_range
  153. # We want to make sure nobody is sneaking a netmask in.
  154. 3 range.begin == range.end
  155. rescue ArgumentError
  156. nil
  157. end
  158. end
  159. end
  160. 1 def filter_proxies(ips) # :doc:
  161. 3 ips.reject do |ip|
  162. 6 @proxies.any? { |proxy| proxy === ip }
  163. end
  164. end
  165. end
  166. end
  167. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/request_id.rb

94.44% lines covered

18 relevant lines. 17 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "securerandom"
  3. 1 require "active_support/core_ext/string/access"
  4. 1 module ActionDispatch
  5. # Makes a unique request id available to the +action_dispatch.request_id+ env variable (which is then accessible
  6. # through <tt>ActionDispatch::Request#request_id</tt> or the alias <tt>ActionDispatch::Request#uuid</tt>) and sends
  7. # the same id to the client via the X-Request-Id header.
  8. #
  9. # The unique request id is either based on the X-Request-Id header in the request, which would typically be generated
  10. # by a firewall, load balancer, or the web server, or, if this header is not available, a random uuid. If the
  11. # header is accepted from the outside world, we sanitize it to a max of 255 chars and alphanumeric and dashes only.
  12. #
  13. # The unique request id can be used to trace a request end-to-end and would typically end up being part of log files
  14. # from multiple pieces of the stack.
  15. 1 class RequestId
  16. 1 X_REQUEST_ID = "X-Request-Id".freeze #:nodoc:
  17. 1 def initialize(app)
  18. 1 @app = app
  19. end
  20. 1 def call(env)
  21. 3 req = ActionDispatch::Request.new env
  22. 3 req.request_id = make_request_id(req.x_request_id)
  23. 6 @app.call(env).tap { |_status, headers, _body| headers[X_REQUEST_ID] = req.request_id }
  24. end
  25. 1 private
  26. 1 def make_request_id(request_id)
  27. 3 if request_id.presence
  28. request_id.gsub(/[^\w\-@]/, "".freeze).first(255)
  29. else
  30. 3 internal_request_id
  31. end
  32. end
  33. 1 def internal_request_id
  34. 3 SecureRandom.uuid
  35. end
  36. end
  37. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/abstract_store.rb

76.47% lines covered

51 relevant lines. 39 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rack/utils"
  3. 1 require "rack/request"
  4. 1 require "rack/session/abstract/id"
  5. 1 require "action_dispatch/middleware/cookies"
  6. 1 require "action_dispatch/request/session"
  7. 1 module ActionDispatch
  8. 1 module Session
  9. 1 class SessionRestoreError < StandardError #:nodoc:
  10. 1 def initialize
  11. super("Session contains objects whose class definition isn't available.\n" \
  12. "Remember to require the classes for all objects kept in the session.\n" \
  13. "(Original exception: #{$!.message} [#{$!.class}])\n")
  14. set_backtrace $!.backtrace
  15. end
  16. end
  17. 1 module Compatibility
  18. 1 def initialize(app, options = {})
  19. 1 options[:key] ||= "_session_id"
  20. 1 super
  21. end
  22. 1 def generate_sid
  23. 2 sid = SecureRandom.hex(16)
  24. 2 sid.encode!(Encoding::UTF_8)
  25. 2 sid
  26. end
  27. 1 private
  28. 1 def initialize_sid # :doc:
  29. 1 @default_options.delete(:sidbits)
  30. 1 @default_options.delete(:secure_random)
  31. end
  32. 1 def make_request(env)
  33. 3 ActionDispatch::Request.new env
  34. end
  35. end
  36. 1 module StaleSessionCheck
  37. 1 def load_session(env)
  38. stale_session_check! { super }
  39. end
  40. 1 def extract_session_id(env)
  41. stale_session_check! { super }
  42. end
  43. 1 def stale_session_check!
  44. 4 yield
  45. rescue ArgumentError => argument_error
  46. if argument_error.message =~ %r{undefined class/module ([\w:]*\w)}
  47. begin
  48. # Note that the regexp does not allow $1 to end with a ':'.
  49. $1.constantize
  50. rescue LoadError, NameError
  51. raise ActionDispatch::Session::SessionRestoreError
  52. end
  53. retry
  54. else
  55. raise
  56. end
  57. end
  58. end
  59. 1 module SessionObject # :nodoc:
  60. 1 def prepare_session(req)
  61. 3 Request::Session.create(self, req, @default_options)
  62. end
  63. 1 def loaded_session?(session)
  64. 5 !session.is_a?(Request::Session) || session.loaded?
  65. end
  66. end
  67. 1 class AbstractStore < Rack::Session::Abstract::Persisted
  68. 1 include Compatibility
  69. 1 include StaleSessionCheck
  70. 1 include SessionObject
  71. 1 private
  72. 1 def set_cookie(request, session_id, cookie)
  73. request.cookie_jar[key] = cookie
  74. end
  75. end
  76. end
  77. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/session/cookie_store.rb

85.37% lines covered

41 relevant lines. 35 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/keys"
  3. 1 require "action_dispatch/middleware/session/abstract_store"
  4. 1 require "rack/session/cookie"
  5. 1 module ActionDispatch
  6. 1 module Session
  7. # This cookie-based session store is the Rails default. It is
  8. # dramatically faster than the alternatives.
  9. #
  10. # Sessions typically contain at most a user_id and flash message; both fit
  11. # within the 4K cookie size limit. A CookieOverflow exception is raised if
  12. # you attempt to store more than 4K of data.
  13. #
  14. # The cookie jar used for storage is automatically configured to be the
  15. # best possible option given your application's configuration.
  16. #
  17. # If you only have secret_token set, your cookies will be signed, but
  18. # not encrypted. This means a user cannot alter their +user_id+ without
  19. # knowing your app's secret key, but can easily read their +user_id+. This
  20. # was the default for Rails 3 apps.
  21. #
  22. # Your cookies will be encrypted using your apps secret_key_base. This
  23. # goes a step further than signed cookies in that encrypted cookies cannot
  24. # be altered or read by users. This is the default starting in Rails 4.
  25. #
  26. # Configure your session store in <tt>config/initializers/session_store.rb</tt>:
  27. #
  28. # Rails.application.config.session_store :cookie_store, key: '_your_app_session'
  29. #
  30. # In the development and test environments your application's secret key base is
  31. # generated by Rails and stored in a temporary file in <tt>tmp/development_secret.txt</tt>.
  32. # In all other environments, it is stored encrypted in the
  33. # <tt>config/credentials.yml.enc</tt> file.
  34. #
  35. # If your application was not updated to Rails 5.2 defaults, the secret_key_base
  36. # will be found in the old <tt>config/secrets.yml</tt> file.
  37. #
  38. # Note that changing your secret_key_base will invalidate all existing session.
  39. # Additionally, you should take care to make sure you are not relying on the
  40. # ability to decode signed cookies generated by your app in external
  41. # applications or JavaScript before changing it.
  42. #
  43. # Because CookieStore extends Rack::Session::Abstract::Persisted, many of the
  44. # options described there can be used to customize the session cookie that
  45. # is generated. For example:
  46. #
  47. # Rails.application.config.session_store :cookie_store, expire_after: 14.days
  48. #
  49. # would set the session cookie to expire automatically 14 days after creation.
  50. # Other useful options include <tt>:key</tt>, <tt>:secure</tt> and
  51. # <tt>:httponly</tt>.
  52. 1 class CookieStore < AbstractStore
  53. 1 def initialize(app, options = {})
  54. 1 super(app, options.merge!(cookie_only: true))
  55. end
  56. 1 def delete_session(req, session_id, options)
  57. new_sid = generate_sid unless options[:drop]
  58. # Reset hash and Assign the new session id
  59. req.set_header("action_dispatch.request.unsigned_session_cookie", new_sid ? { "session_id" => new_sid } : {})
  60. new_sid
  61. end
  62. 1 def load_session(req)
  63. 2 stale_session_check! do
  64. 2 data = unpacked_cookie_data(req)
  65. 2 data = persistent_session_id!(data)
  66. 2 [data["session_id"], data]
  67. end
  68. end
  69. 1 private
  70. 1 def extract_session_id(req)
  71. stale_session_check! do
  72. unpacked_cookie_data(req)["session_id"]
  73. end
  74. end
  75. 1 def unpacked_cookie_data(req)
  76. 2 req.fetch_header("action_dispatch.request.unsigned_session_cookie") do |k|
  77. 2 v = stale_session_check! do
  78. 2 if data = get_cookie(req)
  79. data.stringify_keys!
  80. end
  81. 2 data || {}
  82. end
  83. 2 req.set_header k, v
  84. end
  85. end
  86. 1 def persistent_session_id!(data, sid = nil)
  87. 2 data ||= {}
  88. 2 data["session_id"] ||= sid || generate_sid
  89. 2 data
  90. end
  91. 1 def write_session(req, sid, session_data, options)
  92. 2 session_data["session_id"] = sid
  93. 2 session_data
  94. end
  95. 1 def set_cookie(request, session_id, cookie)
  96. 2 cookie_jar(request)[@key] = cookie
  97. end
  98. 1 def get_cookie(req)
  99. 2 cookie_jar(req)[@key]
  100. end
  101. 1 def cookie_jar(request)
  102. 4 request.cookie_jar.signed_or_encrypted
  103. end
  104. end
  105. end
  106. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/show_exceptions.rb

50.0% lines covered

28 relevant lines. 14 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch/http/request"
  3. 1 require "action_dispatch/middleware/exception_wrapper"
  4. 1 module ActionDispatch
  5. # This middleware rescues any exception returned by the application
  6. # and calls an exceptions app that will wrap it in a format for the end user.
  7. #
  8. # The exceptions app should be passed as parameter on initialization
  9. # of ShowExceptions. Every time there is an exception, ShowExceptions will
  10. # store the exception in env["action_dispatch.exception"], rewrite the
  11. # PATH_INFO to the exception status code and call the Rack app.
  12. #
  13. # If the application returns a "X-Cascade" pass response, this middleware
  14. # will send an empty response as result with the correct status code.
  15. # If any exception happens inside the exceptions app, this middleware
  16. # catches the exceptions and returns a FAILSAFE_RESPONSE.
  17. 1 class ShowExceptions
  18. 1 FAILSAFE_RESPONSE = [500, { "Content-Type" => "text/plain" },
  19. ["500 Internal Server Error\n" \
  20. "If you are the administrator of this website, then please read this web " \
  21. "application's log file and/or the web server's log file to find out what " \
  22. "went wrong."]]
  23. 1 def initialize(app, exceptions_app)
  24. 1 @app = app
  25. 1 @exceptions_app = exceptions_app
  26. end
  27. 1 def call(env)
  28. 3 request = ActionDispatch::Request.new env
  29. 3 @app.call(env)
  30. rescue Exception => exception
  31. if request.show_exceptions?
  32. render_exception(request, exception)
  33. else
  34. raise exception
  35. end
  36. end
  37. 1 private
  38. 1 def render_exception(request, exception)
  39. backtrace_cleaner = request.get_header "action_dispatch.backtrace_cleaner"
  40. wrapper = ExceptionWrapper.new(backtrace_cleaner, exception)
  41. status = wrapper.status_code
  42. request.set_header "action_dispatch.exception", wrapper.exception
  43. request.set_header "action_dispatch.original_path", request.path_info
  44. request.path_info = "/#{status}"
  45. response = @exceptions_app.call(request.env)
  46. response[1]["X-Cascade"] == "pass" ? pass_response(status) : response
  47. rescue Exception => failsafe_error
  48. $stderr.puts "Error during failsafe response: #{failsafe_error}\n #{failsafe_error.backtrace * "\n "}"
  49. FAILSAFE_RESPONSE
  50. end
  51. 1 def pass_response(status)
  52. [status, { "Content-Type" => "text/html; charset=#{Response.default_charset}", "Content-Length" => "0" }, []]
  53. end
  54. end
  55. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/middleware/static.rb

58.33% lines covered

60 relevant lines. 35 lines covered and 25 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rack/utils"
  3. 1 require "active_support/core_ext/uri"
  4. 1 module ActionDispatch
  5. # This middleware returns a file's contents from disk in the body response.
  6. # When initialized, it can accept optional HTTP headers, which will be set
  7. # when a response containing a file's contents is delivered.
  8. #
  9. # This middleware will render the file specified in <tt>env["PATH_INFO"]</tt>
  10. # where the base path is in the +root+ directory. For example, if the +root+
  11. # is set to +public/+, then a request with <tt>env["PATH_INFO"]</tt> of
  12. # +assets/application.js+ will return a response with the contents of a file
  13. # located at +public/assets/application.js+ if the file exists. If the file
  14. # does not exist, a 404 "File not Found" response will be returned.
  15. 1 class FileHandler
  16. 1 def initialize(root, index: "index", headers: {})
  17. 1 @root = root.chomp("/").b
  18. 1 @file_server = ::Rack::File.new(@root, headers)
  19. 1 @index = index
  20. end
  21. # Takes a path to a file. If the file is found, has valid encoding, and has
  22. # correct read permissions, the return value is a URI-escaped string
  23. # representing the filename. Otherwise, false is returned.
  24. #
  25. # Used by the +Static+ class to check the existence of a valid file
  26. # in the server's +public/+ directory (see Static#call).
  27. 1 def match?(path)
  28. 1 path = ::Rack::Utils.unescape_path path
  29. 1 return false unless ::Rack::Utils.valid_path? path
  30. 1 path = ::Rack::Utils.clean_path_info path
  31. 1 paths = [path, "#{path}#{ext}", "#{path}/#{@index}#{ext}"]
  32. 1 if match = paths.detect { |p|
  33. 3 path = File.join(@root, p.b)
  34. 3 begin
  35. 3 File.file?(path) && File.readable?(path)
  36. rescue SystemCallError
  37. false
  38. end
  39. }
  40. return ::Rack::Utils.escape_path(match).b
  41. end
  42. end
  43. 1 def call(env)
  44. serve(Rack::Request.new(env))
  45. end
  46. 1 def serve(request)
  47. path = request.path_info
  48. gzip_path = gzip_file_path(path)
  49. if gzip_path && gzip_encoding_accepted?(request)
  50. request.path_info = gzip_path
  51. status, headers, body = @file_server.call(request.env)
  52. if status == 304
  53. return [status, headers, body]
  54. end
  55. headers["Content-Encoding"] = "gzip"
  56. headers["Content-Type"] = content_type(path)
  57. else
  58. status, headers, body = @file_server.call(request.env)
  59. end
  60. headers["Vary"] = "Accept-Encoding" if gzip_path
  61. return [status, headers, body]
  62. ensure
  63. request.path_info = path
  64. end
  65. 1 private
  66. 1 def ext
  67. 2 ::ActionController::Base.default_static_extension
  68. end
  69. 1 def content_type(path)
  70. ::Rack::Mime.mime_type(::File.extname(path), "text/plain".freeze)
  71. end
  72. 1 def gzip_encoding_accepted?(request)
  73. request.accept_encoding.any? { |enc, quality| enc =~ /\bgzip\b/i }
  74. end
  75. 1 def gzip_file_path(path)
  76. can_gzip_mime = content_type(path) =~ /\A(?:text\/|application\/javascript)/
  77. gzip_path = "#{path}.gz"
  78. if can_gzip_mime && File.exist?(File.join(@root, ::Rack::Utils.unescape_path(gzip_path).b))
  79. gzip_path.b
  80. else
  81. false
  82. end
  83. end
  84. end
  85. # This middleware will attempt to return the contents of a file's body from
  86. # disk in the response. If a file is not found on disk, the request will be
  87. # delegated to the application stack. This middleware is commonly initialized
  88. # to serve assets from a server's +public/+ directory.
  89. #
  90. # This middleware verifies the path to ensure that only files
  91. # living in the root directory can be rendered. A request cannot
  92. # produce a directory traversal using this middleware. Only 'GET' and 'HEAD'
  93. # requests will result in a file being returned.
  94. 1 class Static
  95. 1 def initialize(app, path, index: "index", headers: {})
  96. 1 @app = app
  97. 1 @file_handler = FileHandler.new(path, index: index, headers: headers)
  98. end
  99. 1 def call(env)
  100. 3 req = Rack::Request.new env
  101. 3 if req.get? || req.head?
  102. 1 path = req.path_info.chomp("/".freeze)
  103. 1 if match = @file_handler.match?(path)
  104. req.path_info = match
  105. return @file_handler.serve(req)
  106. end
  107. end
  108. 3 @app.call(req.env)
  109. end
  110. end
  111. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/session.rb

73.91% lines covered

115 relevant lines. 85 lines covered and 30 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rack/session/abstract/id"
  3. 1 module ActionDispatch
  4. 1 class Request
  5. # Session is responsible for lazily loading the session from store.
  6. 1 class Session # :nodoc:
  7. 1 ENV_SESSION_KEY = Rack::RACK_SESSION # :nodoc:
  8. 1 ENV_SESSION_OPTIONS_KEY = Rack::RACK_SESSION_OPTIONS # :nodoc:
  9. # Singleton object used to determine if an optional param wasn't specified.
  10. 1 Unspecified = Object.new
  11. # Creates a session hash, merging the properties of the previous session if any.
  12. 1 def self.create(store, req, default_options)
  13. 3 session_was = find req
  14. 3 session = Request::Session.new(store, req)
  15. 3 session.merge! session_was if session_was
  16. 3 set(req, session)
  17. 3 Options.set(req, Request::Session::Options.new(store, default_options))
  18. 3 session
  19. end
  20. 1 def self.find(req)
  21. 3 req.get_header ENV_SESSION_KEY
  22. end
  23. 1 def self.set(req, session)
  24. 3 req.set_header ENV_SESSION_KEY, session
  25. end
  26. 1 class Options #:nodoc:
  27. 1 def self.set(req, options)
  28. 3 req.set_header ENV_SESSION_OPTIONS_KEY, options
  29. end
  30. 1 def self.find(req)
  31. 7 req.get_header ENV_SESSION_OPTIONS_KEY
  32. end
  33. 1 def initialize(by, default_options)
  34. 3 @by = by
  35. 3 @delegate = default_options.dup
  36. end
  37. 1 def [](key)
  38. 17 @delegate[key]
  39. end
  40. 1 def id(req)
  41. 2 @delegate.fetch(:id) {
  42. @by.send(:extract_session_id, req)
  43. }
  44. end
  45. 3 def []=(k, v); @delegate[k] = v; end
  46. 3 def to_hash; @delegate.dup; end
  47. 2 def values_at(*args); @delegate.values_at(*args); end
  48. end
  49. 1 def initialize(by, req)
  50. 3 @by = by
  51. 3 @req = req
  52. 3 @delegate = {}
  53. 3 @loaded = false
  54. 3 @exists = nil # We haven't checked yet.
  55. end
  56. 1 def id
  57. 2 options.id(@req)
  58. end
  59. 1 def options
  60. 7 Options.find @req
  61. end
  62. 1 def destroy
  63. clear
  64. options = self.options || {}
  65. @by.send(:delete_session, @req, options.id(@req), options)
  66. # Load the new sid to be written with the response.
  67. @loaded = false
  68. load_for_write!
  69. end
  70. # Returns value of the key stored in the session or
  71. # +nil+ if the given key is not found in the session.
  72. 1 def [](key)
  73. 3 load_for_read!
  74. 3 @delegate[key.to_s]
  75. end
  76. # Returns true if the session has the given key or false.
  77. 1 def has_key?(key)
  78. 2 load_for_read!
  79. 2 @delegate.key?(key.to_s)
  80. end
  81. 1 alias :key? :has_key?
  82. 1 alias :include? :has_key?
  83. # Returns keys of the session as Array.
  84. 1 def keys
  85. load_for_read!
  86. @delegate.keys
  87. end
  88. # Returns values of the session as Array.
  89. 1 def values
  90. load_for_read!
  91. @delegate.values
  92. end
  93. # Writes given value to given key of the session.
  94. 1 def []=(key, value)
  95. 2 load_for_write!
  96. 2 @delegate[key.to_s] = value
  97. end
  98. # Clears the session.
  99. 1 def clear
  100. load_for_write!
  101. @delegate.clear
  102. end
  103. # Returns the session as Hash.
  104. 1 def to_hash
  105. 2 load_for_read!
  106. 6 @delegate.dup.delete_if { |_, v| v.nil? }
  107. end
  108. 1 alias :to_h :to_hash
  109. # Updates the session with given Hash.
  110. #
  111. # session.to_hash
  112. # # => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2"}
  113. #
  114. # session.update({ "foo" => "bar" })
  115. # # => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2", "foo" => "bar"}
  116. #
  117. # session.to_hash
  118. # # => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2", "foo" => "bar"}
  119. 1 def update(hash)
  120. load_for_write!
  121. @delegate.update stringify_keys(hash)
  122. end
  123. # Deletes given key from the session.
  124. 1 def delete(key)
  125. load_for_write!
  126. @delegate.delete key.to_s
  127. end
  128. # Returns value of the given key from the session, or raises +KeyError+
  129. # if can't find the given key and no default value is set.
  130. # Returns default value if specified.
  131. #
  132. # session.fetch(:foo)
  133. # # => KeyError: key not found: "foo"
  134. #
  135. # session.fetch(:foo, :bar)
  136. # # => :bar
  137. #
  138. # session.fetch(:foo) do
  139. # :bar
  140. # end
  141. # # => :bar
  142. 1 def fetch(key, default = Unspecified, &block)
  143. load_for_read!
  144. if default == Unspecified
  145. @delegate.fetch(key.to_s, &block)
  146. else
  147. @delegate.fetch(key.to_s, default, &block)
  148. end
  149. end
  150. 1 def inspect
  151. if loaded?
  152. super
  153. else
  154. "#<#{self.class}:0x#{(object_id << 1).to_s(16)} not yet loaded>"
  155. end
  156. end
  157. 1 def exists?
  158. return @exists unless @exists.nil?
  159. @exists = @by.send(:session_exists?, @req)
  160. end
  161. 1 def loaded?
  162. 17 @loaded
  163. end
  164. 1 def empty?
  165. load_for_read!
  166. @delegate.empty?
  167. end
  168. 1 def merge!(other)
  169. load_for_write!
  170. @delegate.merge!(other)
  171. end
  172. 1 def each(&block)
  173. to_hash.each(&block)
  174. end
  175. 1 private
  176. 1 def load_for_read!
  177. 7 load! if !loaded? && exists?
  178. end
  179. 1 def load_for_write!
  180. 2 load! unless loaded?
  181. end
  182. 1 def load!
  183. 2 id, session = @by.load_session @req
  184. 2 options[:id] = id
  185. 2 @delegate.replace(stringify_keys(session))
  186. 2 @loaded = true
  187. end
  188. 1 def stringify_keys(other)
  189. 2 other.each_with_object({}) { |(key, value), hash|
  190. 2 hash[key.to_s] = value
  191. }
  192. end
  193. end
  194. end
  195. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/request/utils.rb

63.89% lines covered

36 relevant lines. 23 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/indifferent_access"
  3. 1 module ActionDispatch
  4. 1 class Request
  5. 1 class Utils # :nodoc:
  6. 1 mattr_accessor :perform_deep_munge, default: true
  7. 1 def self.each_param_value(params, &block)
  8. case params
  9. when Array
  10. params.each { |element| each_param_value(element, &block) }
  11. when Hash
  12. params.each_value { |value| each_param_value(value, &block) }
  13. when String
  14. block.call params
  15. end
  16. end
  17. 1 def self.normalize_encode_params(params)
  18. 6 if perform_deep_munge
  19. 6 NoNilParamEncoder.normalize_encode_params params
  20. else
  21. ParamEncoder.normalize_encode_params params
  22. end
  23. end
  24. 1 def self.check_param_encoding(params)
  25. 12 case params
  26. when Array
  27. params.each { |element| check_param_encoding(element) }
  28. when Hash
  29. 12 params.each_value { |value| check_param_encoding(value) }
  30. when String
  31. 6 unless params.valid_encoding?
  32. # Raise Rack::Utils::InvalidParameterError for consistency with Rack.
  33. # ActionDispatch::Request#GET will re-raise as a BadRequest error.
  34. raise Rack::Utils::InvalidParameterError, "Invalid encoding for parameter: #{params.scrub}"
  35. end
  36. end
  37. end
  38. 1 class ParamEncoder # :nodoc:
  39. # Convert nested Hash to HashWithIndifferentAccess.
  40. 1 def self.normalize_encode_params(params)
  41. 16 case params
  42. when Array
  43. handle_array params
  44. when Hash
  45. 8 if params.has_key?(:tempfile)
  46. ActionDispatch::Http::UploadedFile.new(params)
  47. else
  48. 8 params.each_with_object({}) do |(key, val), new_hash|
  49. 10 new_hash[key] = normalize_encode_params(val)
  50. end.with_indifferent_access
  51. end
  52. else
  53. 8 params
  54. end
  55. end
  56. 1 def self.handle_array(params)
  57. params.map! { |el| normalize_encode_params(el) }
  58. end
  59. end
  60. # Remove nils from the params hash.
  61. 1 class NoNilParamEncoder < ParamEncoder # :nodoc:
  62. 1 def self.handle_array(params)
  63. list = super
  64. list.compact!
  65. list
  66. end
  67. end
  68. end
  69. end
  70. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/inspector.rb

37.27% lines covered

110 relevant lines. 41 lines covered and 69 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "delegate"
  3. 1 require "active_support/core_ext/string/strip"
  4. 1 module ActionDispatch
  5. 1 module Routing
  6. 1 class RouteWrapper < SimpleDelegator
  7. 1 def endpoint
  8. app.dispatcher? ? "#{controller}##{action}" : rack_app.inspect
  9. end
  10. 1 def constraints
  11. requirements.except(:controller, :action)
  12. end
  13. 1 def rack_app
  14. app.rack_app
  15. end
  16. 1 def path
  17. super.spec.to_s
  18. end
  19. 1 def name
  20. super.to_s
  21. end
  22. 1 def reqs
  23. @reqs ||= begin
  24. reqs = endpoint
  25. reqs += " #{constraints}" unless constraints.empty?
  26. reqs
  27. end
  28. end
  29. 1 def controller
  30. parts.include?(:controller) ? ":controller" : requirements[:controller]
  31. end
  32. 1 def action
  33. parts.include?(:action) ? ":action" : requirements[:action]
  34. end
  35. 1 def internal?
  36. internal
  37. end
  38. 1 def engine?
  39. app.engine?
  40. end
  41. end
  42. ##
  43. # This class is just used for displaying route information when someone
  44. # executes `rails routes` or looks at the RoutingError page.
  45. # People should not use this class.
  46. 1 class RoutesInspector # :nodoc:
  47. 1 def initialize(routes)
  48. @engines = {}
  49. @routes = routes
  50. end
  51. 1 def format(formatter, filter = nil)
  52. routes_to_display = filter_routes(normalize_filter(filter))
  53. routes = collect_routes(routes_to_display)
  54. if routes.none?
  55. formatter.no_routes(collect_routes(@routes))
  56. return formatter.result
  57. end
  58. formatter.header routes
  59. formatter.section routes
  60. @engines.each do |name, engine_routes|
  61. formatter.section_title "Routes for #{name}"
  62. formatter.section engine_routes
  63. end
  64. formatter.result
  65. end
  66. 1 private
  67. 1 def normalize_filter(filter)
  68. if filter.is_a?(Hash) && filter[:controller]
  69. { controller: /#{filter[:controller].underscore.sub(/_?controller\z/, "")}/ }
  70. elsif filter
  71. { controller: /#{filter}/, action: /#{filter}/, verb: /#{filter}/, name: /#{filter}/, path: /#{filter}/ }
  72. end
  73. end
  74. 1 def filter_routes(filter)
  75. if filter
  76. @routes.select do |route|
  77. route_wrapper = RouteWrapper.new(route)
  78. filter.any? { |default, value| route_wrapper.send(default) =~ value }
  79. end
  80. else
  81. @routes
  82. end
  83. end
  84. 1 def collect_routes(routes)
  85. routes.collect do |route|
  86. RouteWrapper.new(route)
  87. end.reject(&:internal?).collect do |route|
  88. collect_engine_routes(route)
  89. { name: route.name,
  90. verb: route.verb,
  91. path: route.path,
  92. reqs: route.reqs }
  93. end
  94. end
  95. 1 def collect_engine_routes(route)
  96. name = route.endpoint
  97. return unless route.engine?
  98. return if @engines[name]
  99. routes = route.rack_app.routes
  100. if routes.is_a?(ActionDispatch::Routing::RouteSet)
  101. @engines[name] = collect_routes(routes.routes)
  102. end
  103. end
  104. end
  105. 1 class ConsoleFormatter
  106. 1 def initialize
  107. @buffer = []
  108. end
  109. 1 def result
  110. @buffer.join("\n")
  111. end
  112. 1 def section_title(title)
  113. @buffer << "\n#{title}:"
  114. end
  115. 1 def section(routes)
  116. @buffer << draw_section(routes)
  117. end
  118. 1 def header(routes)
  119. @buffer << draw_header(routes)
  120. end
  121. 1 def no_routes(routes)
  122. @buffer <<
  123. if routes.none?
  124. <<-MESSAGE.strip_heredoc
  125. You don't have any routes defined!
  126. Please add some routes in config/routes.rb.
  127. MESSAGE
  128. else
  129. "No routes were found for this controller"
  130. end
  131. @buffer << "For more information about routes, see the Rails guide: http://guides.rubyonrails.org/routing.html."
  132. end
  133. 1 private
  134. 1 def draw_section(routes)
  135. header_lengths = ["Prefix", "Verb", "URI Pattern"].map(&:length)
  136. name_width, verb_width, path_width = widths(routes).zip(header_lengths).map(&:max)
  137. routes.map do |r|
  138. "#{r[:name].rjust(name_width)} #{r[:verb].ljust(verb_width)} #{r[:path].ljust(path_width)} #{r[:reqs]}"
  139. end
  140. end
  141. 1 def draw_header(routes)
  142. name_width, verb_width, path_width = widths(routes)
  143. "#{"Prefix".rjust(name_width)} #{"Verb".ljust(verb_width)} #{"URI Pattern".ljust(path_width)} Controller#Action"
  144. end
  145. 1 def widths(routes)
  146. [routes.map { |r| r[:name].length }.max || 0,
  147. routes.map { |r| r[:verb].length }.max || 0,
  148. routes.map { |r| r[:path].length }.max || 0]
  149. end
  150. end
  151. 1 class HtmlTableFormatter
  152. 1 def initialize(view)
  153. @view = view
  154. @buffer = []
  155. end
  156. 1 def section_title(title)
  157. @buffer << %(<tr><th colspan="4">#{title}</th></tr>)
  158. end
  159. 1 def section(routes)
  160. @buffer << @view.render(partial: "routes/route", collection: routes)
  161. end
  162. # The header is part of the HTML page, so we don't construct it here.
  163. 1 def header(routes)
  164. end
  165. 1 def no_routes(*)
  166. @buffer << <<-MESSAGE.strip_heredoc
  167. <p>You don't have any routes defined!</p>
  168. <ul>
  169. <li>Please add some routes in <tt>config/routes.rb</tt>.</li>
  170. <li>
  171. For more information about routes, please see the Rails guide
  172. <a href="http://guides.rubyonrails.org/routing.html">Rails Routing from the Outside In</a>.
  173. </li>
  174. </ul>
  175. MESSAGE
  176. end
  177. 1 def result
  178. @view.raw @view.render(layout: "routes/table") {
  179. @view.raw @buffer.join("\n")
  180. }
  181. end
  182. end
  183. end
  184. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb

68.46% lines covered

780 relevant lines. 534 lines covered and 246 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/slice"
  3. 1 require "active_support/core_ext/enumerable"
  4. 1 require "active_support/core_ext/array/extract_options"
  5. 1 require "active_support/core_ext/regexp"
  6. 1 require "action_dispatch/routing/redirection"
  7. 1 require "action_dispatch/routing/endpoint"
  8. 1 module ActionDispatch
  9. 1 module Routing
  10. 1 class Mapper
  11. 1 URL_OPTIONS = [:protocol, :subdomain, :domain, :host, :port]
  12. 1 class Constraints < Routing::Endpoint #:nodoc:
  13. 1 attr_reader :app, :constraints
  14. 1 SERVE = ->(app, req) { app.serve req }
  15. 1 CALL = ->(app, req) { app.call req.env }
  16. 1 def initialize(app, constraints, strategy)
  17. # Unwrap Constraints objects. I don't actually think it's possible
  18. # to pass a Constraints object to this constructor, but there were
  19. # multiple places that kept testing children of this object. I
  20. # *think* they were just being defensive, but I have no idea.
  21. 2 if app.is_a?(self.class)
  22. constraints += app.constraints
  23. app = app.app
  24. end
  25. 2 @strategy = strategy
  26. 2 @app, @constraints, = app, constraints
  27. end
  28. 1 def dispatcher?; @strategy == SERVE; end
  29. 1 def matches?(req)
  30. @constraints.all? do |constraint|
  31. (constraint.respond_to?(:matches?) && constraint.matches?(req)) ||
  32. (constraint.respond_to?(:call) && constraint.call(*constraint_args(constraint, req)))
  33. end
  34. end
  35. 1 def serve(req)
  36. return [ 404, { "X-Cascade" => "pass" }, [] ] unless matches?(req)
  37. @strategy.call @app, req
  38. end
  39. 1 private
  40. 1 def constraint_args(constraint, request)
  41. constraint.arity == 1 ? [request] : [request.path_parameters, request]
  42. end
  43. end
  44. 1 class Mapping #:nodoc:
  45. 1 ANCHOR_CHARACTERS_REGEX = %r{\A(\\A|\^)|(\\Z|\\z|\$)\Z}
  46. 1 OPTIONAL_FORMAT_REGEX = %r{(?:\(\.:format\)+|\.:format|/)\Z}
  47. 1 attr_reader :requirements, :defaults
  48. 1 attr_reader :to, :default_controller, :default_action
  49. 1 attr_reader :required_defaults, :ast
  50. 1 def self.build(scope, set, ast, controller, default_action, to, via, formatted, options_constraints, anchor, options)
  51. 13 options = scope[:options].merge(options) if scope[:options]
  52. 13 defaults = (scope[:defaults] || {}).dup
  53. 13 scope_constraints = scope[:constraints] || {}
  54. 13 new set, ast, defaults, controller, default_action, scope[:module], to, formatted, scope_constraints, scope[:blocks] || [], via, options_constraints, anchor, options
  55. end
  56. 1 def self.check_via(via)
  57. 13 if via.empty?
  58. msg = "You should not use the `match` method in your router without specifying an HTTP method.\n" \
  59. "If you want to expose your action to both GET and POST, add `via: [:get, :post]` option.\n" \
  60. "If you want to expose your action to GET, use `get` in the router:\n" \
  61. " Instead of: match \"controller#action\"\n" \
  62. " Do: get \"controller#action\""
  63. raise ArgumentError, msg
  64. end
  65. 13 via
  66. end
  67. 1 def self.normalize_path(path, format)
  68. 13 path = Mapper.normalize_path(path)
  69. 13 if format == true
  70. "#{path}.:format"
  71. 12 elsif optional_format?(path, format)
  72. 10 "#{path}(.:format)"
  73. else
  74. 3 path
  75. end
  76. end
  77. 1 def self.optional_format?(path, format)
  78. 13 format != false && path !~ OPTIONAL_FORMAT_REGEX
  79. end
  80. 1 def initialize(set, ast, defaults, controller, default_action, modyoule, to, formatted, scope_constraints, blocks, via, options_constraints, anchor, options)
  81. 13 @defaults = defaults
  82. 13 @set = set
  83. 13 @to = to
  84. 13 @default_controller = controller
  85. 13 @default_action = default_action
  86. 13 @ast = ast
  87. 13 @anchor = anchor
  88. 13 @via = via
  89. 13 @internal = options.delete(:internal)
  90. 13 path_params = ast.find_all(&:symbol?).map(&:to_sym)
  91. 13 options = add_wildcard_options(options, formatted, ast)
  92. 13 options = normalize_options!(options, path_params, modyoule)
  93. 13 split_options = constraints(options, path_params)
  94. 13 constraints = scope_constraints.merge Hash[split_options[:constraints] || []]
  95. 13 if options_constraints.is_a?(Hash)
  96. 13 @defaults = Hash[options_constraints.find_all { |key, default|
  97. URL_OPTIONS.include?(key) && (String === default || Integer === default)
  98. }].merge @defaults
  99. 13 @blocks = blocks
  100. 13 constraints.merge! options_constraints
  101. else
  102. @blocks = blocks(options_constraints)
  103. end
  104. 13 requirements, conditions = split_constraints path_params, constraints
  105. 13 verify_regexp_requirements requirements.map(&:last).grep(Regexp)
  106. 13 formats = normalize_format(formatted)
  107. 13 @requirements = formats[:requirements].merge Hash[requirements]
  108. 13 @conditions = Hash[conditions]
  109. 13 @defaults = formats[:defaults].merge(@defaults).merge(normalize_defaults(options))
  110. 13 if path_params.include?(:action) && !@requirements.key?(:action)
  111. @defaults[:action] ||= "index"
  112. end
  113. 13 @required_defaults = (split_options[:required_defaults] || []).map(&:first)
  114. end
  115. 1 def make_route(name, precedence)
  116. 26 route = Journey::Route.new(name,
  117. 12 application,
  118. 12 path,
  119. 12 conditions,
  120. 12 required_defaults,
  121. 12 defaults,
  122. 12 request_method,
  123. precedence,
  124. @internal)
  125. 13 route
  126. end
  127. 1 def application
  128. 13 app(@blocks)
  129. end
  130. 1 def path
  131. 13 build_path @ast, requirements, @anchor
  132. end
  133. 1 def conditions
  134. 13 build_conditions @conditions, @set.request_class
  135. end
  136. 1 def build_conditions(current_conditions, request_class)
  137. 13 conditions = current_conditions.dup
  138. 13 conditions.keep_if do |k, _|
  139. request_class.public_method_defined?(k)
  140. end
  141. end
  142. 1 private :build_conditions
  143. 1 def request_method
  144. 26 @via.map { |x| Journey::Route.verb_matcher(x) }
  145. end
  146. 1 private :request_method
  147. 1 JOINED_SEPARATORS = SEPARATORS.join # :nodoc:
  148. 1 def build_path(ast, requirements, anchor)
  149. 13 pattern = Journey::Path::Pattern.new(ast, requirements, JOINED_SEPARATORS, anchor)
  150. # Find all the symbol nodes that are adjacent to literal nodes and alter
  151. # the regexp so that Journey will partition them into custom routes.
  152. 13 ast.find_all { |node|
  153. 170 next unless node.cat?
  154. 72 if node.left.literal? && node.right.symbol?
  155. symbol = node.right
  156. 71 elsif node.left.literal? && node.right.cat? && node.right.left.symbol?
  157. symbol = node.right.left
  158. 71 elsif node.left.symbol? && node.right.literal?
  159. symbol = node.left
  160. 71 elsif node.left.symbol? && node.right.cat? && node.right.left.literal?
  161. symbol = node.left
  162. else
  163. 72 next
  164. end
  165. if symbol
  166. symbol.regexp = /(?:#{Regexp.union(symbol.regexp, '-')})+/
  167. end
  168. }
  169. 13 pattern
  170. end
  171. 1 private :build_path
  172. 1 private
  173. 1 def add_wildcard_options(options, formatted, path_ast)
  174. # Add a constraint for wildcard route to make it non-greedy and match the
  175. # optional format part of the route by default.
  176. 13 if formatted != false
  177. 11 path_ast.grep(Journey::Nodes::Star).each_with_object({}) { |node, hash|
  178. 3 hash[node.name.to_sym] ||= /.+?/
  179. }.merge options
  180. else
  181. 2 options
  182. end
  183. end
  184. 1 def normalize_options!(options, path_params, modyoule)
  185. 13 if path_params.include?(:controller)
  186. raise ArgumentError, ":controller segment is not allowed within a namespace block" if modyoule
  187. # Add a default constraint for :controller path segments that matches namespaced
  188. # controllers with default routes like :controller/:action/:id(.:format), e.g:
  189. # GET /admin/products/show/1
  190. # => { controller: 'admin/products', action: 'show', id: '1' }
  191. options[:controller] ||= /.+?/
  192. end
  193. 13 if to.respond_to?(:action) || to.respond_to?(:call)
  194. 2 options
  195. else
  196. 11 to_endpoint = split_to to
  197. 11 controller = to_endpoint[0] || default_controller
  198. 11 action = to_endpoint[1] || default_action
  199. 11 controller = add_controller_module(controller, modyoule)
  200. 11 options.merge! check_controller_and_action(path_params, controller, action)
  201. end
  202. end
  203. 1 def split_constraints(path_params, constraints)
  204. 13 constraints.partition do |key, requirement|
  205. 3 path_params.include?(key) || key == :controller
  206. end
  207. end
  208. 1 def normalize_format(formatted)
  209. 13 case formatted
  210. when true
  211. { requirements: { format: /.+/ },
  212. defaults: {} }
  213. when Regexp
  214. { requirements: { format: formatted },
  215. defaults: { format: nil } }
  216. when String
  217. { requirements: { format: Regexp.compile(formatted) },
  218. defaults: { format: formatted } }
  219. else
  220. 13 { requirements: {}, defaults: {} }
  221. end
  222. end
  223. 1 def verify_regexp_requirements(requirements)
  224. 13 requirements.each do |requirement|
  225. 3 if requirement.source =~ ANCHOR_CHARACTERS_REGEX
  226. raise ArgumentError, "Regexp anchor characters are not allowed in routing requirements: #{requirement.inspect}"
  227. end
  228. 3 if requirement.multiline?
  229. raise ArgumentError, "Regexp multiline option is not allowed in routing requirements: #{requirement.inspect}"
  230. end
  231. end
  232. end
  233. 1 def normalize_defaults(options)
  234. 38 Hash[options.reject { |_, default| Regexp === default }]
  235. end
  236. 1 def app(blocks)
  237. 13 if to.respond_to?(:action)
  238. Routing::RouteSet::StaticDispatcher.new to
  239. 12 elsif to.respond_to?(:call)
  240. 2 Constraints.new(to, blocks, Constraints::CALL)
  241. 10 elsif blocks.any?
  242. Constraints.new(dispatcher(defaults.key?(:controller)), blocks, Constraints::SERVE)
  243. else
  244. 11 dispatcher(defaults.key?(:controller))
  245. end
  246. end
  247. 1 def check_controller_and_action(path_params, controller, action)
  248. 11 hash = check_part(:controller, controller, path_params, {}) do |part|
  249. 11 translate_controller(part) {
  250. message = "'#{part}' is not a supported controller name. This can lead to potential routing problems.".dup
  251. message << " See http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use"
  252. raise ArgumentError, message
  253. }
  254. end
  255. 11 check_part(:action, action, path_params, hash) { |part|
  256. 11 part.is_a?(Regexp) ? part : part.to_s
  257. }
  258. end
  259. 1 def check_part(name, part, path_params, hash)
  260. 22 if part
  261. 22 hash[name] = yield(part)
  262. else
  263. unless path_params.include?(name)
  264. message = "Missing :#{name} key on routes definition, please check your routes."
  265. raise ArgumentError, message
  266. end
  267. end
  268. 22 hash
  269. end
  270. 1 def split_to(to)
  271. 11 if to =~ /#/
  272. 6 to.split("#")
  273. else
  274. 5 []
  275. end
  276. end
  277. 1 def add_controller_module(controller, modyoule)
  278. 11 if modyoule && !controller.is_a?(Regexp)
  279. if controller =~ %r{\A/}
  280. controller[1..-1]
  281. else
  282. [modyoule, controller].compact.join("/")
  283. end
  284. else
  285. 11 controller
  286. end
  287. end
  288. 1 def translate_controller(controller)
  289. 11 return controller if Regexp === controller
  290. 11 return controller.to_s if controller =~ /\A[a-z_0-9][a-z_0-9\/]*\z/
  291. yield
  292. end
  293. 1 def blocks(callable_constraint)
  294. unless callable_constraint.respond_to?(:call) || callable_constraint.respond_to?(:matches?)
  295. raise ArgumentError, "Invalid constraint: #{callable_constraint.inspect} must respond to :call or :matches?"
  296. end
  297. [callable_constraint]
  298. end
  299. 1 def constraints(options, path_params)
  300. 13 options.group_by do |key, option|
  301. 25 if Regexp === option
  302. 3 :constraints
  303. else
  304. 22 if path_params.include?(key)
  305. :path_params
  306. else
  307. 22 :required_defaults
  308. end
  309. end
  310. end
  311. end
  312. 1 def dispatcher(raise_on_name_error)
  313. 11 Routing::RouteSet::Dispatcher.new raise_on_name_error
  314. end
  315. end
  316. # Invokes Journey::Router::Utils.normalize_path and ensure that
  317. # (:locale) becomes (/:locale) instead of /(:locale). Except
  318. # for root cases, where the latter is the correct one.
  319. 1 def self.normalize_path(path)
  320. 26 path = Journey::Router::Utils.normalize_path(path)
  321. 26 path.gsub!(%r{/(\(+)/?}, '\1/') unless path =~ %r{^/(\(+[^)]+\)){1,}$}
  322. 26 path
  323. end
  324. 1 def self.normalize_name(name)
  325. 9 normalize_path(name)[1..-1].tr("/", "_")
  326. end
  327. 1 module Base
  328. # Matches a URL pattern to one or more routes.
  329. #
  330. # You should not use the +match+ method in your router
  331. # without specifying an HTTP method.
  332. #
  333. # If you want to expose your action to both GET and POST, use:
  334. #
  335. # # sets :controller, :action and :id in params
  336. # match ':controller/:action/:id', via: [:get, :post]
  337. #
  338. # Note that +:controller+, +:action+ and +:id+ are interpreted as URL
  339. # query parameters and thus available through +params+ in an action.
  340. #
  341. # If you want to expose your action to GET, use +get+ in the router:
  342. #
  343. # Instead of:
  344. #
  345. # match ":controller/:action/:id"
  346. #
  347. # Do:
  348. #
  349. # get ":controller/:action/:id"
  350. #
  351. # Two of these symbols are special, +:controller+ maps to the controller
  352. # and +:action+ to the controller's action. A pattern can also map
  353. # wildcard segments (globs) to params:
  354. #
  355. # get 'songs/*category/:title', to: 'songs#show'
  356. #
  357. # # 'songs/rock/classic/stairway-to-heaven' sets
  358. # # params[:category] = 'rock/classic'
  359. # # params[:title] = 'stairway-to-heaven'
  360. #
  361. # To match a wildcard parameter, it must have a name assigned to it.
  362. # Without a variable name to attach the glob parameter to, the route
  363. # can't be parsed.
  364. #
  365. # When a pattern points to an internal route, the route's +:action+ and
  366. # +:controller+ should be set in options or hash shorthand. Examples:
  367. #
  368. # match 'photos/:id' => 'photos#show', via: :get
  369. # match 'photos/:id', to: 'photos#show', via: :get
  370. # match 'photos/:id', controller: 'photos', action: 'show', via: :get
  371. #
  372. # A pattern can also point to a +Rack+ endpoint i.e. anything that
  373. # responds to +call+:
  374. #
  375. # match 'photos/:id', to: -> (hash) { [200, {}, ["Coming soon"]] }, via: :get
  376. # match 'photos/:id', to: PhotoRackApp, via: :get
  377. # # Yes, controller actions are just rack endpoints
  378. # match 'photos/:id', to: PhotosController.action(:show), via: :get
  379. #
  380. # Because requesting various HTTP verbs with a single action has security
  381. # implications, you must either specify the actions in
  382. # the via options or use one of the HttpHelpers[rdoc-ref:HttpHelpers]
  383. # instead +match+
  384. #
  385. # === Options
  386. #
  387. # Any options not seen here are passed on as params with the URL.
  388. #
  389. # [:controller]
  390. # The route's controller.
  391. #
  392. # [:action]
  393. # The route's action.
  394. #
  395. # [:param]
  396. # Overrides the default resource identifier +:id+ (name of the
  397. # dynamic segment used to generate the routes).
  398. # You can access that segment from your controller using
  399. # <tt>params[<:param>]</tt>.
  400. # In your router:
  401. #
  402. # resources :users, param: :name
  403. #
  404. # The +users+ resource here will have the following routes generated for it:
  405. #
  406. # GET /users(.:format)
  407. # POST /users(.:format)
  408. # GET /users/new(.:format)
  409. # GET /users/:name/edit(.:format)
  410. # GET /users/:name(.:format)
  411. # PATCH/PUT /users/:name(.:format)
  412. # DELETE /users/:name(.:format)
  413. #
  414. # You can override <tt>ActiveRecord::Base#to_param</tt> of a related
  415. # model to construct a URL:
  416. #
  417. # class User < ActiveRecord::Base
  418. # def to_param
  419. # name
  420. # end
  421. # end
  422. #
  423. # user = User.find_by(name: 'Phusion')
  424. # user_path(user) # => "/users/Phusion"
  425. #
  426. # [:path]
  427. # The path prefix for the routes.
  428. #
  429. # [:module]
  430. # The namespace for :controller.
  431. #
  432. # match 'path', to: 'c#a', module: 'sekret', controller: 'posts', via: :get
  433. # # => Sekret::PostsController
  434. #
  435. # See <tt>Scoping#namespace</tt> for its scope equivalent.
  436. #
  437. # [:as]
  438. # The name used to generate routing helpers.
  439. #
  440. # [:via]
  441. # Allowed HTTP verb(s) for route.
  442. #
  443. # match 'path', to: 'c#a', via: :get
  444. # match 'path', to: 'c#a', via: [:get, :post]
  445. # match 'path', to: 'c#a', via: :all
  446. #
  447. # [:to]
  448. # Points to a +Rack+ endpoint. Can be an object that responds to
  449. # +call+ or a string representing a controller's action.
  450. #
  451. # match 'path', to: 'controller#action', via: :get
  452. # match 'path', to: -> (env) { [200, {}, ["Success!"]] }, via: :get
  453. # match 'path', to: RackApp, via: :get
  454. #
  455. # [:on]
  456. # Shorthand for wrapping routes in a specific RESTful context. Valid
  457. # values are +:member+, +:collection+, and +:new+. Only use within
  458. # <tt>resource(s)</tt> block. For example:
  459. #
  460. # resource :bar do
  461. # match 'foo', to: 'c#a', on: :member, via: [:get, :post]
  462. # end
  463. #
  464. # Is equivalent to:
  465. #
  466. # resource :bar do
  467. # member do
  468. # match 'foo', to: 'c#a', via: [:get, :post]
  469. # end
  470. # end
  471. #
  472. # [:constraints]
  473. # Constrains parameters with a hash of regular expressions
  474. # or an object that responds to <tt>matches?</tt>. In addition, constraints
  475. # other than path can also be specified with any object
  476. # that responds to <tt>===</tt> (eg. String, Array, Range, etc.).
  477. #
  478. # match 'path/:id', constraints: { id: /[A-Z]\d{5}/ }, via: :get
  479. #
  480. # match 'json_only', constraints: { format: 'json' }, via: :get
  481. #
  482. # class Whitelist
  483. # def matches?(request) request.remote_ip == '1.2.3.4' end
  484. # end
  485. # match 'path', to: 'c#a', constraints: Whitelist.new, via: :get
  486. #
  487. # See <tt>Scoping#constraints</tt> for more examples with its scope
  488. # equivalent.
  489. #
  490. # [:defaults]
  491. # Sets defaults for parameters
  492. #
  493. # # Sets params[:format] to 'jpg' by default
  494. # match 'path', to: 'c#a', defaults: { format: 'jpg' }, via: :get
  495. #
  496. # See <tt>Scoping#defaults</tt> for its scope equivalent.
  497. #
  498. # [:anchor]
  499. # Boolean to anchor a <tt>match</tt> pattern. Default is true. When set to
  500. # false, the pattern matches any request prefixed with the given path.
  501. #
  502. # # Matches any request starting with 'path'
  503. # match 'path', to: 'c#a', anchor: false, via: :get
  504. #
  505. # [:format]
  506. # Allows you to specify the default value for optional +format+
  507. # segment or disable it by supplying +false+.
  508. 1 def match(path, options = nil)
  509. end
  510. # Mount a Rack-based application to be used within the application.
  511. #
  512. # mount SomeRackApp, at: "some_route"
  513. #
  514. # Alternatively:
  515. #
  516. # mount(SomeRackApp => "some_route")
  517. #
  518. # For options, see +match+, as +mount+ uses it internally.
  519. #
  520. # All mounted applications come with routing helpers to access them.
  521. # These are named after the class specified, so for the above example
  522. # the helper is either +some_rack_app_path+ or +some_rack_app_url+.
  523. # To customize this helper's name, use the +:as+ option:
  524. #
  525. # mount(SomeRackApp => "some_route", as: "exciting")
  526. #
  527. # This will generate the +exciting_path+ and +exciting_url+ helpers
  528. # which can be used to navigate to this mounted app.
  529. 1 def mount(app, options = nil)
  530. 2 if options
  531. path = options.delete(:at)
  532. 1 elsif Hash === app
  533. 2 options = app
  534. 4 app, path = options.find { |k, _| k.respond_to?(:call) }
  535. 2 options.delete(app) if app
  536. end
  537. 2 raise ArgumentError, "A rack application must be specified" unless app.respond_to?(:call)
  538. 2 raise ArgumentError, <<-MSG.strip_heredoc unless path
  539. Must be called with mount point
  540. mount SomeRackApp, at: "some_route"
  541. or
  542. mount(SomeRackApp => "some_route")
  543. MSG
  544. 2 rails_app = rails_app? app
  545. 2 options[:as] ||= app_name(app, rails_app)
  546. 2 target_as = name_for_action(options[:as], path)
  547. 2 options[:via] ||= :all
  548. 2 match(path, options.merge(to: app, anchor: false, format: false))
  549. 2 define_generate_prefix(app, target_as) if rails_app
  550. 2 self
  551. end
  552. 1 def default_url_options=(options)
  553. @set.default_url_options = options
  554. end
  555. 1 alias_method :default_url_options, :default_url_options=
  556. 1 def with_default_scope(scope, &block)
  557. scope(scope) do
  558. instance_exec(&block)
  559. end
  560. end
  561. # Query if the following named route was already defined.
  562. 1 def has_named_route?(name)
  563. 8 @set.named_routes.key? name
  564. end
  565. 1 private
  566. 1 def rails_app?(app)
  567. 2 app.is_a?(Class) && app < Rails::Railtie
  568. end
  569. 1 def app_name(app, rails_app)
  570. 2 if rails_app
  571. app.railtie_name
  572. 1 elsif app.is_a?(Class)
  573. class_name = app.name
  574. ActiveSupport::Inflector.underscore(class_name).tr("/", "_")
  575. end
  576. end
  577. 1 def define_generate_prefix(app, name)
  578. _route = @set.named_routes.get name
  579. _routes = @set
  580. _url_helpers = @set.url_helpers
  581. script_namer = ->(options) do
  582. prefix_options = options.slice(*_route.segment_keys)
  583. prefix_options[:relative_url_root] = "".freeze
  584. if options[:_recall]
  585. prefix_options.reverse_merge!(options[:_recall].slice(*_route.segment_keys))
  586. end
  587. # We must actually delete prefix segment keys to avoid passing them to next url_for.
  588. _route.segment_keys.each { |k| options.delete(k) }
  589. _url_helpers.send("#{name}_path", prefix_options)
  590. end
  591. app.routes.define_mounted_helper(name, script_namer)
  592. app.routes.extend Module.new {
  593. def optimize_routes_generation?; false; end
  594. define_method :find_script_name do |options|
  595. if options.key? :script_name
  596. super(options)
  597. else
  598. script_namer.call(options)
  599. end
  600. end
  601. }
  602. end
  603. end
  604. 1 module HttpHelpers
  605. # Define a route that only recognizes HTTP GET.
  606. # For supported arguments, see match[rdoc-ref:Base#match]
  607. #
  608. # get 'bacon', to: 'food#bacon'
  609. 1 def get(*args, &block)
  610. 5 map_method(:get, args, &block)
  611. end
  612. # Define a route that only recognizes HTTP POST.
  613. # For supported arguments, see match[rdoc-ref:Base#match]
  614. #
  615. # post 'bacon', to: 'food#bacon'
  616. 1 def post(*args, &block)
  617. 3 map_method(:post, args, &block)
  618. end
  619. # Define a route that only recognizes HTTP PATCH.
  620. # For supported arguments, see match[rdoc-ref:Base#match]
  621. #
  622. # patch 'bacon', to: 'food#bacon'
  623. 1 def patch(*args, &block)
  624. map_method(:patch, args, &block)
  625. end
  626. # Define a route that only recognizes HTTP PUT.
  627. # For supported arguments, see match[rdoc-ref:Base#match]
  628. #
  629. # put 'bacon', to: 'food#bacon'
  630. 1 def put(*args, &block)
  631. 1 map_method(:put, args, &block)
  632. end
  633. # Define a route that only recognizes HTTP DELETE.
  634. # For supported arguments, see match[rdoc-ref:Base#match]
  635. #
  636. # delete 'broccoli', to: 'food#broccoli'
  637. 1 def delete(*args, &block)
  638. 1 map_method(:delete, args, &block)
  639. end
  640. 1 private
  641. 1 def map_method(method, args, &block)
  642. 10 options = args.extract_options!
  643. 10 options[:via] = method
  644. 10 match(*args, options, &block)
  645. 10 self
  646. end
  647. end
  648. # You may wish to organize groups of controllers under a namespace.
  649. # Most commonly, you might group a number of administrative controllers
  650. # under an +admin+ namespace. You would place these controllers under
  651. # the <tt>app/controllers/admin</tt> directory, and you can group them
  652. # together in your router:
  653. #
  654. # namespace "admin" do
  655. # resources :posts, :comments
  656. # end
  657. #
  658. # This will create a number of routes for each of the posts and comments
  659. # controller. For <tt>Admin::PostsController</tt>, Rails will create:
  660. #
  661. # GET /admin/posts
  662. # GET /admin/posts/new
  663. # POST /admin/posts
  664. # GET /admin/posts/1
  665. # GET /admin/posts/1/edit
  666. # PATCH/PUT /admin/posts/1
  667. # DELETE /admin/posts/1
  668. #
  669. # If you want to route /posts (without the prefix /admin) to
  670. # <tt>Admin::PostsController</tt>, you could use
  671. #
  672. # scope module: "admin" do
  673. # resources :posts
  674. # end
  675. #
  676. # or, for a single case
  677. #
  678. # resources :posts, module: "admin"
  679. #
  680. # If you want to route /admin/posts to +PostsController+
  681. # (without the <tt>Admin::</tt> module prefix), you could use
  682. #
  683. # scope "/admin" do
  684. # resources :posts
  685. # end
  686. #
  687. # or, for a single case
  688. #
  689. # resources :posts, path: "/admin/posts"
  690. #
  691. # In each of these cases, the named routes remain the same as if you did
  692. # not use scope. In the last case, the following paths map to
  693. # +PostsController+:
  694. #
  695. # GET /admin/posts
  696. # GET /admin/posts/new
  697. # POST /admin/posts
  698. # GET /admin/posts/1
  699. # GET /admin/posts/1/edit
  700. # PATCH/PUT /admin/posts/1
  701. # DELETE /admin/posts/1
  702. 1 module Scoping
  703. # Scopes a set of routes to the given default options.
  704. #
  705. # Take the following route definition as an example:
  706. #
  707. # scope path: ":account_id", as: "account" do
  708. # resources :projects
  709. # end
  710. #
  711. # This generates helpers such as +account_projects_path+, just like +resources+ does.
  712. # The difference here being that the routes generated are like /:account_id/projects,
  713. # rather than /accounts/:account_id/projects.
  714. #
  715. # === Options
  716. #
  717. # Takes same options as <tt>Base#match</tt> and <tt>Resources#resources</tt>.
  718. #
  719. # # route /posts (without the prefix /admin) to <tt>Admin::PostsController</tt>
  720. # scope module: "admin" do
  721. # resources :posts
  722. # end
  723. #
  724. # # prefix the posts resource's requests with '/admin'
  725. # scope path: "/admin" do
  726. # resources :posts
  727. # end
  728. #
  729. # # prefix the routing helper name: +sekret_posts_path+ instead of +posts_path+
  730. # scope as: "sekret" do
  731. # resources :posts
  732. # end
  733. 1 def scope(*args)
  734. options = args.extract_options!.dup
  735. scope = {}
  736. options[:path] = args.flatten.join("/") if args.any?
  737. options[:constraints] ||= {}
  738. unless nested_scope?
  739. options[:shallow_path] ||= options[:path] if options.key?(:path)
  740. options[:shallow_prefix] ||= options[:as] if options.key?(:as)
  741. end
  742. if options[:constraints].is_a?(Hash)
  743. defaults = options[:constraints].select do |k, v|
  744. URL_OPTIONS.include?(k) && (v.is_a?(String) || v.is_a?(Integer))
  745. end
  746. options[:defaults] = defaults.merge(options[:defaults] || {})
  747. else
  748. block, options[:constraints] = options[:constraints], {}
  749. end
  750. if options.key?(:only) || options.key?(:except)
  751. scope[:action_options] = { only: options.delete(:only),
  752. except: options.delete(:except) }
  753. end
  754. if options.key? :anchor
  755. raise ArgumentError, "anchor is ignored unless passed to `match`"
  756. end
  757. @scope.options.each do |option|
  758. if option == :blocks
  759. value = block
  760. elsif option == :options
  761. value = options
  762. else
  763. value = options.delete(option) { POISON }
  764. end
  765. unless POISON == value
  766. scope[option] = send("merge_#{option}_scope", @scope[option], value)
  767. end
  768. end
  769. @scope = @scope.new scope
  770. yield
  771. self
  772. ensure
  773. @scope = @scope.parent
  774. end
  775. 1 POISON = Object.new # :nodoc:
  776. # Scopes routes to a specific controller
  777. #
  778. # controller "food" do
  779. # match "bacon", action: :bacon, via: :get
  780. # end
  781. 1 def controller(controller)
  782. 2 @scope = @scope.new(controller: controller)
  783. 2 yield
  784. ensure
  785. 2 @scope = @scope.parent
  786. end
  787. # Scopes routes to a specific namespace. For example:
  788. #
  789. # namespace :admin do
  790. # resources :posts
  791. # end
  792. #
  793. # This generates the following routes:
  794. #
  795. # admin_posts GET /admin/posts(.:format) admin/posts#index
  796. # admin_posts POST /admin/posts(.:format) admin/posts#create
  797. # new_admin_post GET /admin/posts/new(.:format) admin/posts#new
  798. # edit_admin_post GET /admin/posts/:id/edit(.:format) admin/posts#edit
  799. # admin_post GET /admin/posts/:id(.:format) admin/posts#show
  800. # admin_post PATCH/PUT /admin/posts/:id(.:format) admin/posts#update
  801. # admin_post DELETE /admin/posts/:id(.:format) admin/posts#destroy
  802. #
  803. # === Options
  804. #
  805. # The +:path+, +:as+, +:module+, +:shallow_path+ and +:shallow_prefix+
  806. # options all default to the name of the namespace.
  807. #
  808. # For options, see <tt>Base#match</tt>. For +:shallow_path+ option, see
  809. # <tt>Resources#resources</tt>.
  810. #
  811. # # accessible through /sekret/posts rather than /admin/posts
  812. # namespace :admin, path: "sekret" do
  813. # resources :posts
  814. # end
  815. #
  816. # # maps to <tt>Sekret::PostsController</tt> rather than <tt>Admin::PostsController</tt>
  817. # namespace :admin, module: "sekret" do
  818. # resources :posts
  819. # end
  820. #
  821. # # generates +sekret_posts_path+ rather than +admin_posts_path+
  822. # namespace :admin, as: "sekret" do
  823. # resources :posts
  824. # end
  825. 1 def namespace(path, options = {})
  826. path = path.to_s
  827. defaults = {
  828. module: path,
  829. as: options.fetch(:as, path),
  830. shallow_path: options.fetch(:path, path),
  831. shallow_prefix: options.fetch(:as, path)
  832. }
  833. path_scope(options.delete(:path) { path }) do
  834. scope(defaults.merge!(options)) { yield }
  835. end
  836. end
  837. # === Parameter Restriction
  838. # Allows you to constrain the nested routes based on a set of rules.
  839. # For instance, in order to change the routes to allow for a dot character in the +id+ parameter:
  840. #
  841. # constraints(id: /\d+\.\d+/) do
  842. # resources :posts
  843. # end
  844. #
  845. # Now routes such as +/posts/1+ will no longer be valid, but +/posts/1.1+ will be.
  846. # The +id+ parameter must match the constraint passed in for this example.
  847. #
  848. # You may use this to also restrict other parameters:
  849. #
  850. # resources :posts do
  851. # constraints(post_id: /\d+\.\d+/) do
  852. # resources :comments
  853. # end
  854. # end
  855. #
  856. # === Restricting based on IP
  857. #
  858. # Routes can also be constrained to an IP or a certain range of IP addresses:
  859. #
  860. # constraints(ip: /192\.168\.\d+\.\d+/) do
  861. # resources :posts
  862. # end
  863. #
  864. # Any user connecting from the 192.168.* range will be able to see this resource,
  865. # where as any user connecting outside of this range will be told there is no such route.
  866. #
  867. # === Dynamic request matching
  868. #
  869. # Requests to routes can be constrained based on specific criteria:
  870. #
  871. # constraints(-> (req) { req.env["HTTP_USER_AGENT"] =~ /iPhone/ }) do
  872. # resources :iphones
  873. # end
  874. #
  875. # You are able to move this logic out into a class if it is too complex for routes.
  876. # This class must have a +matches?+ method defined on it which either returns +true+
  877. # if the user should be given access to that route, or +false+ if the user should not.
  878. #
  879. # class Iphone
  880. # def self.matches?(request)
  881. # request.env["HTTP_USER_AGENT"] =~ /iPhone/
  882. # end
  883. # end
  884. #
  885. # An expected place for this code would be +lib/constraints+.
  886. #
  887. # This class is then used like this:
  888. #
  889. # constraints(Iphone) do
  890. # resources :iphones
  891. # end
  892. 1 def constraints(constraints = {})
  893. scope(constraints: constraints) { yield }
  894. end
  895. # Allows you to set default parameters for a route, such as this:
  896. # defaults id: 'home' do
  897. # match 'scoped_pages/(:id)', to: 'pages#show'
  898. # end
  899. # Using this, the +:id+ parameter here will default to 'home'.
  900. 1 def defaults(defaults = {})
  901. @scope = @scope.new(defaults: merge_defaults_scope(@scope[:defaults], defaults))
  902. yield
  903. ensure
  904. @scope = @scope.parent
  905. end
  906. 1 private
  907. 1 def merge_path_scope(parent, child)
  908. 4 Mapper.normalize_path("#{parent}/#{child}")
  909. end
  910. 1 def merge_shallow_path_scope(parent, child)
  911. Mapper.normalize_path("#{parent}/#{child}")
  912. end
  913. 1 def merge_as_scope(parent, child)
  914. parent ? "#{parent}_#{child}" : child
  915. end
  916. 1 def merge_shallow_prefix_scope(parent, child)
  917. parent ? "#{parent}_#{child}" : child
  918. end
  919. 1 def merge_module_scope(parent, child)
  920. parent ? "#{parent}/#{child}" : child
  921. end
  922. 1 def merge_controller_scope(parent, child)
  923. child
  924. end
  925. 1 def merge_action_scope(parent, child)
  926. child
  927. end
  928. 1 def merge_via_scope(parent, child)
  929. child
  930. end
  931. 1 def merge_format_scope(parent, child)
  932. child
  933. end
  934. 1 def merge_path_names_scope(parent, child)
  935. merge_options_scope(parent, child)
  936. end
  937. 1 def merge_constraints_scope(parent, child)
  938. merge_options_scope(parent, child)
  939. end
  940. 1 def merge_defaults_scope(parent, child)
  941. merge_options_scope(parent, child)
  942. end
  943. 1 def merge_blocks_scope(parent, child)
  944. merged = parent ? parent.dup : []
  945. merged << child if child
  946. merged
  947. end
  948. 1 def merge_options_scope(parent, child)
  949. (parent || {}).merge(child)
  950. end
  951. 1 def merge_shallow_scope(parent, child)
  952. child ? true : false
  953. end
  954. 1 def merge_to_scope(parent, child)
  955. child
  956. end
  957. end
  958. # Resource routing allows you to quickly declare all of the common routes
  959. # for a given resourceful controller. Instead of declaring separate routes
  960. # for your +index+, +show+, +new+, +edit+, +create+, +update+ and +destroy+
  961. # actions, a resourceful route declares them in a single line of code:
  962. #
  963. # resources :photos
  964. #
  965. # Sometimes, you have a resource that clients always look up without
  966. # referencing an ID. A common example, /profile always shows the profile of
  967. # the currently logged in user. In this case, you can use a singular resource
  968. # to map /profile (rather than /profile/:id) to the show action.
  969. #
  970. # resource :profile
  971. #
  972. # It's common to have resources that are logically children of other
  973. # resources:
  974. #
  975. # resources :magazines do
  976. # resources :ads
  977. # end
  978. #
  979. # You may wish to organize groups of controllers under a namespace. Most
  980. # commonly, you might group a number of administrative controllers under
  981. # an +admin+ namespace. You would place these controllers under the
  982. # <tt>app/controllers/admin</tt> directory, and you can group them together
  983. # in your router:
  984. #
  985. # namespace "admin" do
  986. # resources :posts, :comments
  987. # end
  988. #
  989. # By default the +:id+ parameter doesn't accept dots. If you need to
  990. # use dots as part of the +:id+ parameter add a constraint which
  991. # overrides this restriction, e.g:
  992. #
  993. # resources :articles, id: /[^\/]+/
  994. #
  995. # This allows any character other than a slash as part of your +:id+.
  996. #
  997. 1 module Resources
  998. # CANONICAL_ACTIONS holds all actions that does not need a prefix or
  999. # a path appended since they fit properly in their scope level.
  1000. 1 VALID_ON_OPTIONS = [:new, :collection, :member]
  1001. 1 RESOURCE_OPTIONS = [:as, :controller, :path, :only, :except, :param, :concerns]
  1002. 1 CANONICAL_ACTIONS = %w(index create new show update destroy)
  1003. 1 class Resource #:nodoc:
  1004. 1 attr_reader :controller, :path, :param
  1005. 1 def initialize(entities, api_only, shallow, options = {})
  1006. 2 @name = entities.to_s
  1007. 2 @path = (options[:path] || @name).to_s
  1008. 2 @controller = (options[:controller] || @name).to_s
  1009. 2 @as = options[:as]
  1010. 2 @param = (options[:param] || :id).to_sym
  1011. 2 @options = options
  1012. 2 @shallow = shallow
  1013. 2 @api_only = api_only
  1014. 2 @only = options.delete :only
  1015. 2 @except = options.delete :except
  1016. end
  1017. 1 def default_actions
  1018. if @api_only
  1019. [:index, :create, :show, :update, :destroy]
  1020. else
  1021. [:index, :create, :new, :show, :update, :destroy, :edit]
  1022. end
  1023. end
  1024. 1 def actions
  1025. 14 if @only
  1026. 14 Array(@only).map(&:to_sym)
  1027. elsif @except
  1028. default_actions - Array(@except).map(&:to_sym)
  1029. else
  1030. default_actions
  1031. end
  1032. end
  1033. 1 def name
  1034. 4 @as || @name
  1035. end
  1036. 1 def plural
  1037. 10 @plural ||= name.to_s
  1038. end
  1039. 1 def singular
  1040. 10 @singular ||= name.to_s.singularize
  1041. end
  1042. 1 alias :member_name :singular
  1043. # Checks for uncountable plurals, and appends "_index" if the plural
  1044. # and singular form are the same.
  1045. 1 def collection_name
  1046. 5 singular == plural ? "#{plural}_index" : plural
  1047. end
  1048. 1 def resource_scope
  1049. 2 controller
  1050. end
  1051. 1 alias :collection_scope :path
  1052. 1 def member_scope
  1053. 2 "#{path}/:#{param}"
  1054. end
  1055. 1 alias :shallow_scope :member_scope
  1056. 1 def new_scope(new_path)
  1057. "#{path}/#{new_path}"
  1058. end
  1059. 1 def nested_param
  1060. :"#{singular}_#{param}"
  1061. end
  1062. 1 def nested_scope
  1063. "#{path}/:#{nested_param}"
  1064. end
  1065. 1 def shallow?
  1066. @shallow
  1067. end
  1068. 3 def singleton?; false; end
  1069. end
  1070. 1 class SingletonResource < Resource #:nodoc:
  1071. 1 def initialize(entities, api_only, shallow, options)
  1072. super
  1073. @as = nil
  1074. @controller = (options[:controller] || plural).to_s
  1075. @as = options[:as]
  1076. end
  1077. 1 def default_actions
  1078. if @api_only
  1079. [:show, :create, :update, :destroy]
  1080. else
  1081. [:show, :create, :update, :destroy, :new, :edit]
  1082. end
  1083. end
  1084. 1 def plural
  1085. @plural ||= name.to_s.pluralize
  1086. end
  1087. 1 def singular
  1088. @singular ||= name.to_s
  1089. end
  1090. 1 alias :member_name :singular
  1091. 1 alias :collection_name :singular
  1092. 1 alias :member_scope :path
  1093. 1 alias :nested_scope :path
  1094. 1 def singleton?; true; end
  1095. end
  1096. 1 def resources_path_names(options)
  1097. @scope[:path_names].merge!(options)
  1098. end
  1099. # Sometimes, you have a resource that clients always look up without
  1100. # referencing an ID. A common example, /profile always shows the
  1101. # profile of the currently logged in user. In this case, you can use
  1102. # a singular resource to map /profile (rather than /profile/:id) to
  1103. # the show action:
  1104. #
  1105. # resource :profile
  1106. #
  1107. # This creates six different routes in your application, all mapping to
  1108. # the +Profiles+ controller (note that the controller is named after
  1109. # the plural):
  1110. #
  1111. # GET /profile/new
  1112. # GET /profile
  1113. # GET /profile/edit
  1114. # PATCH/PUT /profile
  1115. # DELETE /profile
  1116. # POST /profile
  1117. #
  1118. # === Options
  1119. # Takes same options as resources[rdoc-ref:#resources]
  1120. 1 def resource(*resources, &block)
  1121. options = resources.extract_options!.dup
  1122. if apply_common_behavior_for(:resource, resources, options, &block)
  1123. return self
  1124. end
  1125. with_scope_level(:resource) do
  1126. options = apply_action_options options
  1127. resource_scope(SingletonResource.new(resources.pop, api_only?, @scope[:shallow], options)) do
  1128. yield if block_given?
  1129. concerns(options[:concerns]) if options[:concerns]
  1130. new do
  1131. get :new
  1132. end if parent_resource.actions.include?(:new)
  1133. set_member_mappings_for_resource
  1134. collection do
  1135. post :create
  1136. end if parent_resource.actions.include?(:create)
  1137. end
  1138. end
  1139. self
  1140. end
  1141. # In Rails, a resourceful route provides a mapping between HTTP verbs
  1142. # and URLs and controller actions. By convention, each action also maps
  1143. # to particular CRUD operations in a database. A single entry in the
  1144. # routing file, such as
  1145. #
  1146. # resources :photos
  1147. #
  1148. # creates seven different routes in your application, all mapping to
  1149. # the +Photos+ controller:
  1150. #
  1151. # GET /photos
  1152. # GET /photos/new
  1153. # POST /photos
  1154. # GET /photos/:id
  1155. # GET /photos/:id/edit
  1156. # PATCH/PUT /photos/:id
  1157. # DELETE /photos/:id
  1158. #
  1159. # Resources can also be nested infinitely by using this block syntax:
  1160. #
  1161. # resources :photos do
  1162. # resources :comments
  1163. # end
  1164. #
  1165. # This generates the following comments routes:
  1166. #
  1167. # GET /photos/:photo_id/comments
  1168. # GET /photos/:photo_id/comments/new
  1169. # POST /photos/:photo_id/comments
  1170. # GET /photos/:photo_id/comments/:id
  1171. # GET /photos/:photo_id/comments/:id/edit
  1172. # PATCH/PUT /photos/:photo_id/comments/:id
  1173. # DELETE /photos/:photo_id/comments/:id
  1174. #
  1175. # === Options
  1176. # Takes same options as match[rdoc-ref:Base#match] as well as:
  1177. #
  1178. # [:path_names]
  1179. # Allows you to change the segment component of the +edit+ and +new+ actions.
  1180. # Actions not specified are not changed.
  1181. #
  1182. # resources :posts, path_names: { new: "brand_new" }
  1183. #
  1184. # The above example will now change /posts/new to /posts/brand_new.
  1185. #
  1186. # [:path]
  1187. # Allows you to change the path prefix for the resource.
  1188. #
  1189. # resources :posts, path: 'postings'
  1190. #
  1191. # The resource and all segments will now route to /postings instead of /posts.
  1192. #
  1193. # [:only]
  1194. # Only generate routes for the given actions.
  1195. #
  1196. # resources :cows, only: :show
  1197. # resources :cows, only: [:show, :index]
  1198. #
  1199. # [:except]
  1200. # Generate all routes except for the given actions.
  1201. #
  1202. # resources :cows, except: :show
  1203. # resources :cows, except: [:show, :index]
  1204. #
  1205. # [:shallow]
  1206. # Generates shallow routes for nested resource(s). When placed on a parent resource,
  1207. # generates shallow routes for all nested resources.
  1208. #
  1209. # resources :posts, shallow: true do
  1210. # resources :comments
  1211. # end
  1212. #
  1213. # Is the same as:
  1214. #
  1215. # resources :posts do
  1216. # resources :comments, except: [:show, :edit, :update, :destroy]
  1217. # end
  1218. # resources :comments, only: [:show, :edit, :update, :destroy]
  1219. #
  1220. # This allows URLs for resources that otherwise would be deeply nested such
  1221. # as a comment on a blog post like <tt>/posts/a-long-permalink/comments/1234</tt>
  1222. # to be shortened to just <tt>/comments/1234</tt>.
  1223. #
  1224. # [:shallow_path]
  1225. # Prefixes nested shallow routes with the specified path.
  1226. #
  1227. # scope shallow_path: "sekret" do
  1228. # resources :posts do
  1229. # resources :comments, shallow: true
  1230. # end
  1231. # end
  1232. #
  1233. # The +comments+ resource here will have the following routes generated for it:
  1234. #
  1235. # post_comments GET /posts/:post_id/comments(.:format)
  1236. # post_comments POST /posts/:post_id/comments(.:format)
  1237. # new_post_comment GET /posts/:post_id/comments/new(.:format)
  1238. # edit_comment GET /sekret/comments/:id/edit(.:format)
  1239. # comment GET /sekret/comments/:id(.:format)
  1240. # comment PATCH/PUT /sekret/comments/:id(.:format)
  1241. # comment DELETE /sekret/comments/:id(.:format)
  1242. #
  1243. # [:shallow_prefix]
  1244. # Prefixes nested shallow route names with specified prefix.
  1245. #
  1246. # scope shallow_prefix: "sekret" do
  1247. # resources :posts do
  1248. # resources :comments, shallow: true
  1249. # end
  1250. # end
  1251. #
  1252. # The +comments+ resource here will have the following routes generated for it:
  1253. #
  1254. # post_comments GET /posts/:post_id/comments(.:format)
  1255. # post_comments POST /posts/:post_id/comments(.:format)
  1256. # new_post_comment GET /posts/:post_id/comments/new(.:format)
  1257. # edit_sekret_comment GET /comments/:id/edit(.:format)
  1258. # sekret_comment GET /comments/:id(.:format)
  1259. # sekret_comment PATCH/PUT /comments/:id(.:format)
  1260. # sekret_comment DELETE /comments/:id(.:format)
  1261. #
  1262. # [:format]
  1263. # Allows you to specify the default value for optional +format+
  1264. # segment or disable it by supplying +false+.
  1265. #
  1266. # === Examples
  1267. #
  1268. # # routes call <tt>Admin::PostsController</tt>
  1269. # resources :posts, module: "admin"
  1270. #
  1271. # # resource actions are at /admin/posts.
  1272. # resources :posts, path: "admin/posts"
  1273. 1 def resources(*resources, &block)
  1274. 2 options = resources.extract_options!.dup
  1275. 2 if apply_common_behavior_for(:resources, resources, options, &block)
  1276. return self
  1277. end
  1278. 2 with_scope_level(:resources) do
  1279. 2 options = apply_action_options options
  1280. 2 resource_scope(Resource.new(resources.pop, api_only?, @scope[:shallow], options)) do
  1281. 2 yield if block_given?
  1282. 2 concerns(options[:concerns]) if options[:concerns]
  1283. 2 collection do
  1284. 2 get :index if parent_resource.actions.include?(:index)
  1285. 2 post :create if parent_resource.actions.include?(:create)
  1286. end
  1287. new do
  1288. get :new
  1289. 2 end if parent_resource.actions.include?(:new)
  1290. 2 set_member_mappings_for_resource
  1291. end
  1292. end
  1293. 2 self
  1294. end
  1295. # To add a route to the collection:
  1296. #
  1297. # resources :photos do
  1298. # collection do
  1299. # get 'search'
  1300. # end
  1301. # end
  1302. #
  1303. # This will enable Rails to recognize paths such as <tt>/photos/search</tt>
  1304. # with GET, and route to the search action of +PhotosController+. It will also
  1305. # create the <tt>search_photos_url</tt> and <tt>search_photos_path</tt>
  1306. # route helpers.
  1307. 1 def collection
  1308. 2 unless resource_scope?
  1309. raise ArgumentError, "can't use collection outside resource(s) scope"
  1310. end
  1311. 2 with_scope_level(:collection) do
  1312. 2 path_scope(parent_resource.collection_scope) do
  1313. 2 yield
  1314. end
  1315. end
  1316. end
  1317. # To add a member route, add a member block into the resource block:
  1318. #
  1319. # resources :photos do
  1320. # member do
  1321. # get 'preview'
  1322. # end
  1323. # end
  1324. #
  1325. # This will recognize <tt>/photos/1/preview</tt> with GET, and route to the
  1326. # preview action of +PhotosController+. It will also create the
  1327. # <tt>preview_photo_url</tt> and <tt>preview_photo_path</tt> helpers.
  1328. 1 def member
  1329. 2 unless resource_scope?
  1330. raise ArgumentError, "can't use member outside resource(s) scope"
  1331. end
  1332. 2 with_scope_level(:member) do
  1333. 2 if shallow?
  1334. shallow_scope {
  1335. path_scope(parent_resource.member_scope) { yield }
  1336. }
  1337. else
  1338. 4 path_scope(parent_resource.member_scope) { yield }
  1339. end
  1340. end
  1341. end
  1342. 1 def new
  1343. unless resource_scope?
  1344. raise ArgumentError, "can't use new outside resource(s) scope"
  1345. end
  1346. with_scope_level(:new) do
  1347. path_scope(parent_resource.new_scope(action_path(:new))) do
  1348. yield
  1349. end
  1350. end
  1351. end
  1352. 1 def nested
  1353. unless resource_scope?
  1354. raise ArgumentError, "can't use nested outside resource(s) scope"
  1355. end
  1356. with_scope_level(:nested) do
  1357. if shallow? && shallow_nesting_depth >= 1
  1358. shallow_scope do
  1359. path_scope(parent_resource.nested_scope) do
  1360. scope(nested_options) { yield }
  1361. end
  1362. end
  1363. else
  1364. path_scope(parent_resource.nested_scope) do
  1365. scope(nested_options) { yield }
  1366. end
  1367. end
  1368. end
  1369. end
  1370. # See ActionDispatch::Routing::Mapper::Scoping#namespace.
  1371. 1 def namespace(path, options = {})
  1372. if resource_scope?
  1373. nested { super }
  1374. else
  1375. super
  1376. end
  1377. end
  1378. 1 def shallow
  1379. @scope = @scope.new(shallow: true)
  1380. yield
  1381. ensure
  1382. @scope = @scope.parent
  1383. end
  1384. 1 def shallow?
  1385. 2 !parent_resource.singleton? && @scope[:shallow]
  1386. end
  1387. # Matches a URL pattern to one or more routes.
  1388. # For more information, see match[rdoc-ref:Base#match].
  1389. #
  1390. # match 'path' => 'controller#action', via: :patch
  1391. # match 'path', to: 'controller#action', via: :post
  1392. # match 'path', 'otherpath', on: :member, via: :get
  1393. 1 def match(path, *rest, &block)
  1394. 13 if rest.empty? && Hash === path
  1395. 5 options = path
  1396. 10 path, to = options.find { |name, _value| name.is_a?(String) }
  1397. 5 raise ArgumentError, "Route path not specified" if path.nil?
  1398. 5 case to
  1399. when Symbol
  1400. options[:action] = to
  1401. when String
  1402. 5 if to =~ /#/
  1403. 5 options[:to] = to
  1404. else
  1405. options[:controller] = to
  1406. end
  1407. else
  1408. options[:to] = to
  1409. end
  1410. 5 options.delete(path)
  1411. 5 paths = [path]
  1412. else
  1413. 8 options = rest.pop || {}
  1414. 8 paths = [path] + rest
  1415. end
  1416. 13 if options.key?(:defaults)
  1417. defaults(options.delete(:defaults)) { map_match(paths, options, &block) }
  1418. else
  1419. 13 map_match(paths, options, &block)
  1420. end
  1421. end
  1422. # You can specify what Rails should route "/" to with the root method:
  1423. #
  1424. # root to: 'pages#main'
  1425. #
  1426. # For options, see +match+, as +root+ uses it internally.
  1427. #
  1428. # You can also pass a string which will expand
  1429. #
  1430. # root 'pages#main'
  1431. #
  1432. # You should put the root route at the top of <tt>config/routes.rb</tt>,
  1433. # because this means it will be matched first. As this is the most popular route
  1434. # of most Rails applications, this is beneficial.
  1435. 1 def root(path, options = {})
  1436. 1 if path.is_a?(String)
  1437. options[:to] = path
  1438. elsif path.is_a?(Hash) && options.empty?
  1439. 1 options = path
  1440. else
  1441. raise ArgumentError, "must be called with a path and/or options"
  1442. end
  1443. 1 if @scope.resources?
  1444. with_scope_level(:root) do
  1445. path_scope(parent_resource.path) do
  1446. match_root_route(options)
  1447. end
  1448. end
  1449. else
  1450. 1 match_root_route(options)
  1451. end
  1452. end
  1453. 1 private
  1454. 1 def parent_resource
  1455. 44 @scope[:scope_level_resource]
  1456. end
  1457. 1 def apply_common_behavior_for(method, resources, options, &block)
  1458. 2 if resources.length > 1
  1459. resources.each { |r| send(method, r, options, &block) }
  1460. return true
  1461. end
  1462. 2 if options.delete(:shallow)
  1463. shallow do
  1464. send(method, resources.pop, options, &block)
  1465. end
  1466. return true
  1467. end
  1468. 2 if resource_scope?
  1469. nested { send(method, resources.pop, options, &block) }
  1470. return true
  1471. end
  1472. 2 options.keys.each do |k|
  1473. 2 (options[:constraints] ||= {})[k] = options.delete(k) if options[k].is_a?(Regexp)
  1474. end
  1475. 2 scope_options = options.slice!(*RESOURCE_OPTIONS)
  1476. 2 unless scope_options.empty?
  1477. scope(scope_options) do
  1478. send(method, resources.pop, options, &block)
  1479. end
  1480. return true
  1481. end
  1482. 2 false
  1483. end
  1484. 1 def apply_action_options(options)
  1485. 2 return options if action_options? options
  1486. options.merge scope_action_options
  1487. end
  1488. 1 def action_options?(options)
  1489. 2 options[:only] || options[:except]
  1490. end
  1491. 1 def scope_action_options
  1492. @scope[:action_options] || {}
  1493. end
  1494. 1 def resource_scope?
  1495. 6 @scope.resource_scope?
  1496. end
  1497. 1 def resource_method_scope?
  1498. 12 @scope.resource_method_scope?
  1499. end
  1500. 1 def nested_scope?
  1501. @scope.nested?
  1502. end
  1503. 1 def with_scope_level(kind) # :doc:
  1504. 6 @scope = @scope.new_level(kind)
  1505. 6 yield
  1506. ensure
  1507. 6 @scope = @scope.parent
  1508. end
  1509. 1 def resource_scope(resource)
  1510. 2 @scope = @scope.new(scope_level_resource: resource)
  1511. 4 controller(resource.resource_scope) { yield }
  1512. ensure
  1513. 2 @scope = @scope.parent
  1514. end
  1515. 1 def nested_options
  1516. options = { as: parent_resource.member_name }
  1517. options[:constraints] = {
  1518. parent_resource.nested_param => param_constraint
  1519. } if param_constraint?
  1520. options
  1521. end
  1522. 1 def shallow_nesting_depth
  1523. @scope.find_all { |node|
  1524. node.frame[:scope_level_resource]
  1525. }.count { |node| node.frame[:scope_level_resource].shallow? }
  1526. end
  1527. 1 def param_constraint?
  1528. @scope[:constraints] && @scope[:constraints][parent_resource.param].is_a?(Regexp)
  1529. end
  1530. 1 def param_constraint
  1531. @scope[:constraints][parent_resource.param]
  1532. end
  1533. 1 def canonical_action?(action)
  1534. 12 resource_method_scope? && CANONICAL_ACTIONS.include?(action.to_s)
  1535. end
  1536. 1 def shallow_scope
  1537. scope = { as: @scope[:shallow_prefix],
  1538. path: @scope[:shallow_path] }
  1539. @scope = @scope.new scope
  1540. yield
  1541. ensure
  1542. @scope = @scope.parent
  1543. end
  1544. 1 def path_for_action(action, path)
  1545. 13 return "#{@scope[:path]}/#{path}" if path
  1546. 5 if canonical_action?(action)
  1547. 5 @scope[:path].to_s
  1548. else
  1549. "#{@scope[:path]}/#{action_path(action)}"
  1550. end
  1551. end
  1552. 1 def action_path(name)
  1553. @scope[:path_names][name.to_sym] || name
  1554. end
  1555. 1 def prefix_name_for_action(as, action)
  1556. 14 if as
  1557. 7 prefix = as
  1558. 6 elsif !canonical_action?(action)
  1559. 2 prefix = action
  1560. end
  1561. 14 if prefix && prefix != "/" && !prefix.empty?
  1562. 9 Mapper.normalize_name prefix.to_s.tr("-", "_")
  1563. end
  1564. end
  1565. 1 def name_for_action(as, action)
  1566. 14 prefix = prefix_name_for_action(as, action)
  1567. 14 name_prefix = @scope[:as]
  1568. 14 if parent_resource
  1569. 5 return nil unless as || action
  1570. 5 collection_name = parent_resource.collection_name
  1571. 5 member_name = parent_resource.member_name
  1572. end
  1573. 14 action_name = @scope.action_name(name_prefix, prefix, collection_name, member_name)
  1574. 14 candidate = action_name.select(&:present?).join("_")
  1575. 14 unless candidate.empty?
  1576. # If a name was not explicitly given, we check if it is valid
  1577. # and return nil in case it isn't. Otherwise, we pass the invalid name
  1578. # forward so the underlying router engine treats it and raises an exception.
  1579. 14 if as.nil?
  1580. 7 candidate unless candidate !~ /\A[_a-z]/i || has_named_route?(candidate)
  1581. else
  1582. 7 candidate
  1583. end
  1584. end
  1585. end
  1586. 1 def set_member_mappings_for_resource # :doc:
  1587. 2 member do
  1588. 2 get :edit if parent_resource.actions.include?(:edit)
  1589. 2 get :show if parent_resource.actions.include?(:show)
  1590. 2 if parent_resource.actions.include?(:update)
  1591. patch :update
  1592. put :update
  1593. end
  1594. 2 delete :destroy if parent_resource.actions.include?(:destroy)
  1595. end
  1596. end
  1597. 1 def api_only? # :doc:
  1598. 2 @set.api_only?
  1599. end
  1600. 1 def path_scope(path)
  1601. 4 @scope = @scope.new(path: merge_path_scope(@scope[:path], path))
  1602. 4 yield
  1603. ensure
  1604. 4 @scope = @scope.parent
  1605. end
  1606. 1 def map_match(paths, options)
  1607. 13 if options[:on] && !VALID_ON_OPTIONS.include?(options[:on])
  1608. raise ArgumentError, "Unknown scope #{on.inspect} given to :on"
  1609. end
  1610. 13 if @scope[:to]
  1611. options[:to] ||= @scope[:to]
  1612. end
  1613. 13 if @scope[:controller] && @scope[:action]
  1614. options[:to] ||= "#{@scope[:controller]}##{@scope[:action]}"
  1615. end
  1616. 13 controller = options.delete(:controller) || @scope[:controller]
  1617. 13 option_path = options.delete :path
  1618. 13 to = options.delete :to
  1619. 13 via = Mapping.check_via Array(options.delete(:via) {
  1620. @scope[:via]
  1621. })
  1622. 24 formatted = options.delete(:format) { @scope[:format] }
  1623. 24 anchor = options.delete(:anchor) { true }
  1624. 13 options_constraints = options.delete(:constraints) || {}
  1625. 13 path_types = paths.group_by(&:class)
  1626. 13 path_types.fetch(String, []).each do |_path|
  1627. 8 route_options = options.dup
  1628. 8 if _path && option_path
  1629. raise ArgumentError, "Ambiguous route definition. Both :path and the route path were specified as strings."
  1630. end
  1631. 8 to = get_to_from_path(_path, to, route_options[:action])
  1632. 8 decomposed_match(_path, controller, route_options, _path, to, via, formatted, anchor, options_constraints)
  1633. end
  1634. 13 path_types.fetch(Symbol, []).each do |action|
  1635. 5 route_options = options.dup
  1636. 5 decomposed_match(action, controller, route_options, option_path, to, via, formatted, anchor, options_constraints)
  1637. end
  1638. 13 self
  1639. end
  1640. 1 def get_to_from_path(path, to, action)
  1641. 8 return to if to || action
  1642. path_without_format = path.sub(/\(\.:format\)$/, "")
  1643. if using_match_shorthand?(path_without_format)
  1644. path_without_format.gsub(%r{^/}, "").sub(%r{/([^/]*)$}, '#\1').tr("-", "_")
  1645. else
  1646. nil
  1647. end
  1648. end
  1649. 1 def using_match_shorthand?(path)
  1650. path =~ %r{^/?[-\w]+/[-\w/]+$}
  1651. end
  1652. 1 def decomposed_match(path, controller, options, _path, to, via, formatted, anchor, options_constraints)
  1653. 13 if on = options.delete(:on)
  1654. send(on) { decomposed_match(path, controller, options, _path, to, via, formatted, anchor, options_constraints) }
  1655. else
  1656. 13 case @scope.scope_level
  1657. when :resources
  1658. nested { decomposed_match(path, controller, options, _path, to, via, formatted, anchor, options_constraints) }
  1659. when :resource
  1660. member { decomposed_match(path, controller, options, _path, to, via, formatted, anchor, options_constraints) }
  1661. else
  1662. 13 add_route(path, controller, options, _path, to, via, formatted, anchor, options_constraints)
  1663. end
  1664. end
  1665. end
  1666. 1 def add_route(action, controller, options, _path, to, via, formatted, anchor, options_constraints)
  1667. 13 path = path_for_action(action, _path)
  1668. 13 raise ArgumentError, "path is required" if path.blank?
  1669. 13 action = action.to_s
  1670. 13 default_action = options.delete(:action) || @scope[:action]
  1671. 13 if action =~ /^[\w\-\/]+$/
  1672. 9 default_action ||= action.tr("-", "_") unless action.include?("/")
  1673. else
  1674. 4 action = nil
  1675. end
  1676. 13 as = if !options.fetch(:as, true) # if it's set to nil or false
  1677. 2 options.delete(:as)
  1678. else
  1679. 11 name_for_action(options.delete(:as), action)
  1680. end
  1681. 13 path = Mapping.normalize_path URI.parser.escape(path), formatted
  1682. 13 ast = Journey::Parser.parse path
  1683. 13 mapping = Mapping.build(@scope, @set, ast, controller, default_action, to, via, formatted, options_constraints, anchor, options)
  1684. 13 @set.add_route(mapping, as)
  1685. end
  1686. 1 def match_root_route(options)
  1687. 1 name = has_named_route?(name_for_action(:root, nil)) ? nil : :root
  1688. 1 args = ["/", { as: name, via: :get }.merge!(options)]
  1689. 1 match(*args)
  1690. end
  1691. end
  1692. # Routing Concerns allow you to declare common routes that can be reused
  1693. # inside others resources and routes.
  1694. #
  1695. # concern :commentable do
  1696. # resources :comments
  1697. # end
  1698. #
  1699. # concern :image_attachable do
  1700. # resources :images, only: :index
  1701. # end
  1702. #
  1703. # These concerns are used in Resources routing:
  1704. #
  1705. # resources :messages, concerns: [:commentable, :image_attachable]
  1706. #
  1707. # or in a scope or namespace:
  1708. #
  1709. # namespace :posts do
  1710. # concerns :commentable
  1711. # end
  1712. 1 module Concerns
  1713. # Define a routing concern using a name.
  1714. #
  1715. # Concerns may be defined inline, using a block, or handled by
  1716. # another object, by passing that object as the second parameter.
  1717. #
  1718. # The concern object, if supplied, should respond to <tt>call</tt>,
  1719. # which will receive two parameters:
  1720. #
  1721. # * The current mapper
  1722. # * A hash of options which the concern object may use
  1723. #
  1724. # Options may also be used by concerns defined in a block by accepting
  1725. # a block parameter. So, using a block, you might do something as
  1726. # simple as limit the actions available on certain resources, passing
  1727. # standard resource options through the concern:
  1728. #
  1729. # concern :commentable do |options|
  1730. # resources :comments, options
  1731. # end
  1732. #
  1733. # resources :posts, concerns: :commentable
  1734. # resources :archived_posts do
  1735. # # Don't allow comments on archived posts
  1736. # concerns :commentable, only: [:index, :show]
  1737. # end
  1738. #
  1739. # Or, using a callable object, you might implement something more
  1740. # specific to your application, which would be out of place in your
  1741. # routes file.
  1742. #
  1743. # # purchasable.rb
  1744. # class Purchasable
  1745. # def initialize(defaults = {})
  1746. # @defaults = defaults
  1747. # end
  1748. #
  1749. # def call(mapper, options = {})
  1750. # options = @defaults.merge(options)
  1751. # mapper.resources :purchases
  1752. # mapper.resources :receipts
  1753. # mapper.resources :returns if options[:returnable]
  1754. # end
  1755. # end
  1756. #
  1757. # # routes.rb
  1758. # concern :purchasable, Purchasable.new(returnable: true)
  1759. #
  1760. # resources :toys, concerns: :purchasable
  1761. # resources :electronics, concerns: :purchasable
  1762. # resources :pets do
  1763. # concerns :purchasable, returnable: false
  1764. # end
  1765. #
  1766. # Any routing helpers can be used inside a concern. If using a
  1767. # callable, they're accessible from the Mapper that's passed to
  1768. # <tt>call</tt>.
  1769. 1 def concern(name, callable = nil, &block)
  1770. callable ||= lambda { |mapper, options| mapper.instance_exec(options, &block) }
  1771. @concerns[name] = callable
  1772. end
  1773. # Use the named concerns
  1774. #
  1775. # resources :posts do
  1776. # concerns :commentable
  1777. # end
  1778. #
  1779. # Concerns also work in any routes helper that you want to use:
  1780. #
  1781. # namespace :posts do
  1782. # concerns :commentable
  1783. # end
  1784. 1 def concerns(*args)
  1785. options = args.extract_options!
  1786. args.flatten.each do |name|
  1787. if concern = @concerns[name]
  1788. concern.call(self, options)
  1789. else
  1790. raise ArgumentError, "No concern named #{name} was found!"
  1791. end
  1792. end
  1793. end
  1794. end
  1795. 1 module CustomUrls
  1796. # Define custom URL helpers that will be added to the application's
  1797. # routes. This allows you to override and/or replace the default behavior
  1798. # of routing helpers, e.g:
  1799. #
  1800. # direct :homepage do
  1801. # "http://www.rubyonrails.org"
  1802. # end
  1803. #
  1804. # direct :commentable do |model|
  1805. # [ model, anchor: model.dom_id ]
  1806. # end
  1807. #
  1808. # direct :main do
  1809. # { controller: "pages", action: "index", subdomain: "www" }
  1810. # end
  1811. #
  1812. # The return value from the block passed to +direct+ must be a valid set of
  1813. # arguments for +url_for+ which will actually build the URL string. This can
  1814. # be one of the following:
  1815. #
  1816. # * A string, which is treated as a generated URL
  1817. # * A hash, e.g. <tt>{ controller: "pages", action: "index" }</tt>
  1818. # * An array, which is passed to +polymorphic_url+
  1819. # * An Active Model instance
  1820. # * An Active Model class
  1821. #
  1822. # NOTE: Other URL helpers can be called in the block but be careful not to invoke
  1823. # your custom URL helper again otherwise it will result in a stack overflow error.
  1824. #
  1825. # You can also specify default options that will be passed through to
  1826. # your URL helper definition, e.g:
  1827. #
  1828. # direct :browse, page: 1, size: 10 do |options|
  1829. # [ :products, options.merge(params.permit(:page, :size).to_h.symbolize_keys) ]
  1830. # end
  1831. #
  1832. # In this instance the +params+ object comes from the context in which the
  1833. # block is executed, e.g. generating a URL inside a controller action or a view.
  1834. # If the block is executed where there isn't a +params+ object such as this:
  1835. #
  1836. # Rails.application.routes.url_helpers.browse_path
  1837. #
  1838. # then it will raise a +NameError+. Because of this you need to be aware of the
  1839. # context in which you will use your custom URL helper when defining it.
  1840. #
  1841. # NOTE: The +direct+ method can't be used inside of a scope block such as
  1842. # +namespace+ or +scope+ and will raise an error if it detects that it is.
  1843. 1 def direct(name, options = {}, &block)
  1844. 2 unless @scope.root?
  1845. raise RuntimeError, "The direct method can't be used inside a routes scope block"
  1846. end
  1847. 2 @set.add_url_helper(name, options, &block)
  1848. end
  1849. # Define custom polymorphic mappings of models to URLs. This alters the
  1850. # behavior of +polymorphic_url+ and consequently the behavior of
  1851. # +link_to+ and +form_for+ when passed a model instance, e.g:
  1852. #
  1853. # resource :basket
  1854. #
  1855. # resolve "Basket" do
  1856. # [:basket]
  1857. # end
  1858. #
  1859. # This will now generate "/basket" when a +Basket+ instance is passed to
  1860. # +link_to+ or +form_for+ instead of the standard "/baskets/:id".
  1861. #
  1862. # NOTE: This custom behavior only applies to simple polymorphic URLs where
  1863. # a single model instance is passed and not more complicated forms, e.g:
  1864. #
  1865. # # config/routes.rb
  1866. # resource :profile
  1867. # namespace :admin do
  1868. # resources :users
  1869. # end
  1870. #
  1871. # resolve("User") { [:profile] }
  1872. #
  1873. # # app/views/application/_menu.html.erb
  1874. # link_to "Profile", @current_user
  1875. # link_to "Profile", [:admin, @current_user]
  1876. #
  1877. # The first +link_to+ will generate "/profile" but the second will generate
  1878. # the standard polymorphic URL of "/admin/users/1".
  1879. #
  1880. # You can pass options to a polymorphic mapping - the arity for the block
  1881. # needs to be two as the instance is passed as the first argument, e.g:
  1882. #
  1883. # resolve "Basket", anchor: "items" do |basket, options|
  1884. # [:basket, options]
  1885. # end
  1886. #
  1887. # This generates the URL "/basket#items" because when the last item in an
  1888. # array passed to +polymorphic_url+ is a hash then it's treated as options
  1889. # to the URL helper that gets called.
  1890. #
  1891. # NOTE: The +resolve+ method can't be used inside of a scope block such as
  1892. # +namespace+ or +scope+ and will raise an error if it detects that it is.
  1893. 1 def resolve(*args, &block)
  1894. 4 unless @scope.root?
  1895. raise RuntimeError, "The resolve method can't be used inside a routes scope block"
  1896. end
  1897. 4 options = args.extract_options!
  1898. 4 args = args.flatten(1)
  1899. 4 args.each do |klass|
  1900. 4 @set.add_polymorphic_mapping(klass, options, &block)
  1901. end
  1902. end
  1903. end
  1904. 1 class Scope # :nodoc:
  1905. 1 OPTIONS = [:path, :shallow_path, :as, :shallow_prefix, :module,
  1906. :controller, :action, :path_names, :constraints,
  1907. :shallow, :blocks, :defaults, :via, :format, :options, :to]
  1908. 1 RESOURCE_SCOPES = [:resource, :resources]
  1909. 1 RESOURCE_METHOD_SCOPES = [:collection, :member, :new]
  1910. 1 attr_reader :parent, :scope_level
  1911. 1 def initialize(hash, parent = NULL, scope_level = nil)
  1912. 19 @hash = hash
  1913. 19 @parent = parent
  1914. 19 @scope_level = scope_level
  1915. end
  1916. 1 def nested?
  1917. scope_level == :nested
  1918. end
  1919. 1 def null?
  1920. 6 @hash.nil? && @parent.nil?
  1921. end
  1922. 1 def root?
  1923. 6 @parent.null?
  1924. end
  1925. 1 def resources?
  1926. 1 scope_level == :resources
  1927. end
  1928. 1 def resource_method_scope?
  1929. 12 RESOURCE_METHOD_SCOPES.include? scope_level
  1930. end
  1931. 1 def action_name(name_prefix, prefix, collection_name, member_name)
  1932. 14 case scope_level
  1933. when :nested
  1934. [name_prefix, prefix]
  1935. when :collection
  1936. 3 [prefix, name_prefix, collection_name]
  1937. when :new
  1938. [prefix, :new, name_prefix, member_name]
  1939. when :member
  1940. 2 [prefix, name_prefix, member_name]
  1941. when :root
  1942. [name_prefix, collection_name, prefix]
  1943. else
  1944. 9 [name_prefix, member_name, prefix]
  1945. end
  1946. end
  1947. 1 def resource_scope?
  1948. 6 RESOURCE_SCOPES.include? scope_level
  1949. end
  1950. 1 def options
  1951. OPTIONS
  1952. end
  1953. 1 def new(hash)
  1954. 8 self.class.new hash, self, scope_level
  1955. end
  1956. 1 def new_level(level)
  1957. 6 self.class.new(frame, self, level)
  1958. end
  1959. 1 def [](key)
  1960. 805 scope = find { |node| node.frame.key? key }
  1961. 212 scope && scope.frame[key]
  1962. end
  1963. 1 include Enumerable
  1964. 1 def each
  1965. 212 node = self
  1966. 212 until node.equal? NULL
  1967. 593 yield node
  1968. 543 node = node.parent
  1969. end
  1970. end
  1971. 650 def frame; @hash; end
  1972. 1 NULL = Scope.new(nil, nil)
  1973. end
  1974. 1 def initialize(set) #:nodoc:
  1975. 4 @set = set
  1976. 4 @scope = Scope.new(path_names: @set.resources_path_names)
  1977. 4 @concerns = {}
  1978. end
  1979. 1 include Base
  1980. 1 include HttpHelpers
  1981. 1 include Redirection
  1982. 1 include Scoping
  1983. 1 include Concerns
  1984. 1 include Resources
  1985. 1 include CustomUrls
  1986. end
  1987. end
  1988. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/routing/redirection.rb

40.74% lines covered

81 relevant lines. 33 lines covered and 48 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch/http/request"
  3. 1 require "active_support/core_ext/uri"
  4. 1 require "active_support/core_ext/array/extract_options"
  5. 1 require "rack/utils"
  6. 1 require "action_controller/metal/exceptions"
  7. 1 require "action_dispatch/routing/endpoint"
  8. 1 module ActionDispatch
  9. 1 module Routing
  10. 1 class Redirect < Endpoint # :nodoc:
  11. 1 attr_reader :status, :block
  12. 1 def initialize(status, block)
  13. @status = status
  14. @block = block
  15. end
  16. 1 def redirect?; true; end
  17. 1 def call(env)
  18. serve Request.new env
  19. end
  20. 1 def serve(req)
  21. uri = URI.parse(path(req.path_parameters, req))
  22. unless uri.host
  23. if relative_path?(uri.path)
  24. uri.path = "#{req.script_name}/#{uri.path}"
  25. elsif uri.path.empty?
  26. uri.path = req.script_name.empty? ? "/" : req.script_name
  27. end
  28. end
  29. uri.scheme ||= req.scheme
  30. uri.host ||= req.host
  31. uri.port ||= req.port unless req.standard_port?
  32. req.commit_flash
  33. body = %(<html><body>You are being <a href="#{ERB::Util.unwrapped_html_escape(uri.to_s)}">redirected</a>.</body></html>)
  34. headers = {
  35. "Location" => uri.to_s,
  36. "Content-Type" => "text/html",
  37. "Content-Length" => body.length.to_s
  38. }
  39. [ status, headers, [body] ]
  40. end
  41. 1 def path(params, request)
  42. block.call params, request
  43. end
  44. 1 def inspect
  45. "redirect(#{status})"
  46. end
  47. 1 private
  48. 1 def relative_path?(path)
  49. path && !path.empty? && path[0] != "/"
  50. end
  51. 1 def escape(params)
  52. Hash[params.map { |k, v| [k, Rack::Utils.escape(v)] }]
  53. end
  54. 1 def escape_fragment(params)
  55. Hash[params.map { |k, v| [k, Journey::Router::Utils.escape_fragment(v)] }]
  56. end
  57. 1 def escape_path(params)
  58. Hash[params.map { |k, v| [k, Journey::Router::Utils.escape_path(v)] }]
  59. end
  60. end
  61. 1 class PathRedirect < Redirect
  62. 1 URL_PARTS = /\A([^?]+)?(\?[^#]+)?(#.+)?\z/
  63. 1 def path(params, request)
  64. if block.match(URL_PARTS)
  65. path = interpolation_required?($1, params) ? $1 % escape_path(params) : $1
  66. query = interpolation_required?($2, params) ? $2 % escape(params) : $2
  67. fragment = interpolation_required?($3, params) ? $3 % escape_fragment(params) : $3
  68. "#{path}#{query}#{fragment}"
  69. else
  70. interpolation_required?(block, params) ? block % escape(params) : block
  71. end
  72. end
  73. 1 def inspect
  74. "redirect(#{status}, #{block})"
  75. end
  76. 1 private
  77. 1 def interpolation_required?(string, params)
  78. !params.empty? && string && string.match(/%\{\w*\}/)
  79. end
  80. end
  81. 1 class OptionRedirect < Redirect # :nodoc:
  82. 1 alias :options :block
  83. 1 def path(params, request)
  84. url_options = {
  85. protocol: request.protocol,
  86. host: request.host,
  87. port: request.optional_port,
  88. path: request.path,
  89. params: request.query_parameters
  90. }.merge! options
  91. if !params.empty? && url_options[:path].match(/%\{\w*\}/)
  92. url_options[:path] = (url_options[:path] % escape_path(params))
  93. end
  94. unless options[:host] || options[:domain]
  95. if relative_path?(url_options[:path])
  96. url_options[:path] = "/#{url_options[:path]}"
  97. url_options[:script_name] = request.script_name
  98. elsif url_options[:path].empty?
  99. url_options[:path] = request.script_name.empty? ? "/" : ""
  100. url_options[:script_name] = request.script_name
  101. end
  102. end
  103. ActionDispatch::Http::URL.url_for url_options
  104. end
  105. 1 def inspect
  106. "redirect(#{status}, #{options.map { |k, v| "#{k}: #{v}" }.join(', ')})"
  107. end
  108. end
  109. 1 module Redirection
  110. # Redirect any path to another path:
  111. #
  112. # get "/stories" => redirect("/posts")
  113. #
  114. # This will redirect the user, while ignoring certain parts of the request, including query string, etc.
  115. # <tt>/stories</tt>, <tt>/stories?foo=bar</tt>, etc all redirect to <tt>/posts</tt>.
  116. #
  117. # You can also use interpolation in the supplied redirect argument:
  118. #
  119. # get 'docs/:article', to: redirect('/wiki/%{article}')
  120. #
  121. # Note that if you return a path without a leading slash then the URL is prefixed with the
  122. # current SCRIPT_NAME environment variable. This is typically '/' but may be different in
  123. # a mounted engine or where the application is deployed to a subdirectory of a website.
  124. #
  125. # Alternatively you can use one of the other syntaxes:
  126. #
  127. # The block version of redirect allows for the easy encapsulation of any logic associated with
  128. # the redirect in question. Either the params and request are supplied as arguments, or just
  129. # params, depending of how many arguments your block accepts. A string is required as a
  130. # return value.
  131. #
  132. # get 'jokes/:number', to: redirect { |params, request|
  133. # path = (params[:number].to_i.even? ? "wheres-the-beef" : "i-love-lamp")
  134. # "http://#{request.host_with_port}/#{path}"
  135. # }
  136. #
  137. # Note that the +do end+ syntax for the redirect block wouldn't work, as Ruby would pass
  138. # the block to +get+ instead of +redirect+. Use <tt>{ ... }</tt> instead.
  139. #
  140. # The options version of redirect allows you to supply only the parts of the URL which need
  141. # to change, it also supports interpolation of the path similar to the first example.
  142. #
  143. # get 'stores/:name', to: redirect(subdomain: 'stores', path: '/%{name}')
  144. # get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
  145. # get '/stories', to: redirect(path: '/posts')
  146. #
  147. # This will redirect the user, while changing only the specified parts of the request,
  148. # for example the +path+ option in the last example.
  149. # <tt>/stories</tt>, <tt>/stories?foo=bar</tt>, redirect to <tt>/posts</tt> and <tt>/posts?foo=bar</tt> respectively.
  150. #
  151. # Finally, an object which responds to call can be supplied to redirect, allowing you to reuse
  152. # common redirect routes. The call method must accept two arguments, params and request, and return
  153. # a string.
  154. #
  155. # get 'accounts/:name' => redirect(SubdomainRedirector.new('api'))
  156. #
  157. 1 def redirect(*args, &block)
  158. options = args.extract_options!
  159. status = options.delete(:status) || 301
  160. path = args.shift
  161. return OptionRedirect.new(status, options) if options.any?
  162. return PathRedirect.new(status, path) if String === path
  163. block = path if path.respond_to? :call
  164. raise ArgumentError, "redirection argument not supported" unless block
  165. Redirect.new status, block
  166. end
  167. end
  168. end
  169. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/integration.rb

86.14% lines covered

202 relevant lines. 174 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "stringio"
  3. 1 require "uri"
  4. 1 require "active_support/core_ext/kernel/singleton_class"
  5. 1 require "active_support/core_ext/object/try"
  6. 1 require "rack/test"
  7. 1 require "minitest"
  8. 1 require "action_dispatch/testing/request_encoder"
  9. 1 module ActionDispatch
  10. 1 module Integration #:nodoc:
  11. 1 module RequestHelpers
  12. # Performs a GET request with the given parameters. See ActionDispatch::Integration::Session#process
  13. # for more details.
  14. 1 def get(path, **args)
  15. 1 process(:get, path, **args)
  16. end
  17. # Performs a POST request with the given parameters. See ActionDispatch::Integration::Session#process
  18. # for more details.
  19. 1 def post(path, **args)
  20. 2 process(:post, path, **args)
  21. end
  22. # Performs a PATCH request with the given parameters. See ActionDispatch::Integration::Session#process
  23. # for more details.
  24. 1 def patch(path, **args)
  25. process(:patch, path, **args)
  26. end
  27. # Performs a PUT request with the given parameters. See ActionDispatch::Integration::Session#process
  28. # for more details.
  29. 1 def put(path, **args)
  30. process(:put, path, **args)
  31. end
  32. # Performs a DELETE request with the given parameters. See ActionDispatch::Integration::Session#process
  33. # for more details.
  34. 1 def delete(path, **args)
  35. process(:delete, path, **args)
  36. end
  37. # Performs a HEAD request with the given parameters. See ActionDispatch::Integration::Session#process
  38. # for more details.
  39. 1 def head(path, *args)
  40. process(:head, path, *args)
  41. end
  42. # Follow a single redirect response. If the last response was not a
  43. # redirect, an exception will be raised. Otherwise, the redirect is
  44. # performed on the location header.
  45. 1 def follow_redirect!
  46. raise "not a redirect! #{status} #{status_message}" unless redirect?
  47. get(response.location)
  48. status
  49. end
  50. end
  51. # An instance of this class represents a set of requests and responses
  52. # performed sequentially by a test process. Because you can instantiate
  53. # multiple sessions and run them side-by-side, you can also mimic (to some
  54. # limited extent) multiple simultaneous users interacting with your system.
  55. #
  56. # Typically, you will instantiate a new session using
  57. # IntegrationTest#open_session, rather than instantiating
  58. # Integration::Session directly.
  59. 1 class Session
  60. 1 DEFAULT_HOST = "www.example.com"
  61. 1 include Minitest::Assertions
  62. 1 include TestProcess, RequestHelpers, Assertions
  63. 1 %w( status status_message headers body redirect? ).each do |method|
  64. 5 delegate method, to: :response, allow_nil: true
  65. end
  66. 1 %w( path ).each do |method|
  67. 1 delegate method, to: :request, allow_nil: true
  68. end
  69. # The hostname used in the last request.
  70. 1 def host
  71. 13 @host || DEFAULT_HOST
  72. end
  73. 1 attr_writer :host
  74. # The remote_addr used in the last request.
  75. 1 attr_accessor :remote_addr
  76. # The Accept header to send.
  77. 1 attr_accessor :accept
  78. # A map of the cookies returned by the last response, and which will be
  79. # sent with the next request.
  80. 1 def cookies
  81. _mock_session.cookie_jar
  82. end
  83. # A reference to the controller instance used by the last request.
  84. 1 attr_reader :controller
  85. # A reference to the request instance used by the last request.
  86. 1 attr_reader :request
  87. # A reference to the response instance used by the last request.
  88. 1 attr_reader :response
  89. # A running counter of the number of requests processed.
  90. 1 attr_accessor :request_count
  91. 1 include ActionDispatch::Routing::UrlFor
  92. # Create and initialize a new Session instance.
  93. 1 def initialize(app)
  94. 3 super()
  95. 3 @app = app
  96. 3 reset!
  97. end
  98. 1 def url_options
  99. 4 @url_options ||= default_url_options.dup.tap do |url_options|
  100. 4 url_options.reverse_merge!(controller.url_options) if controller
  101. 4 if @app.respond_to?(:routes)
  102. 4 url_options.reverse_merge!(@app.routes.default_url_options)
  103. end
  104. 4 url_options.reverse_merge!(host: host, protocol: https? ? "https" : "http")
  105. end
  106. end
  107. # Resets the instance. This can be used to reset the state information
  108. # in an existing session instance, so it can be used from a clean-slate
  109. # condition.
  110. #
  111. # session.reset!
  112. 1 def reset!
  113. 3 @https = false
  114. 3 @controller = @request = @response = nil
  115. 3 @_mock_session = nil
  116. 3 @request_count = 0
  117. 3 @url_options = nil
  118. 3 self.host = DEFAULT_HOST
  119. 3 self.remote_addr = "127.0.0.1"
  120. 3 self.accept = "text/xml,application/xml,application/xhtml+xml," \
  121. "text/html;q=0.9,text/plain;q=0.8,image/png," \
  122. "*/*;q=0.5"
  123. 3 unless defined? @named_routes_configured
  124. # the helpers are made protected by default--we make them public for
  125. # easier access during testing and troubleshooting.
  126. 3 @named_routes_configured = true
  127. end
  128. end
  129. # Specify whether or not the session should mimic a secure HTTPS request.
  130. #
  131. # session.https!
  132. # session.https!(false)
  133. 1 def https!(flag = true)
  134. 2 @https = flag
  135. end
  136. # Returns +true+ if the session is mimicking a secure HTTPS request.
  137. #
  138. # if session.https?
  139. # ...
  140. # end
  141. 1 def https?
  142. 13 @https
  143. end
  144. # Performs the actual request.
  145. #
  146. # - +method+: The HTTP method (GET, POST, PATCH, PUT, DELETE, HEAD, OPTIONS)
  147. # as a symbol.
  148. # - +path+: The URI (as a String) on which you want to perform the
  149. # request.
  150. # - +params+: The HTTP parameters that you want to pass. This may
  151. # be +nil+,
  152. # a Hash, or a String that is appropriately encoded
  153. # (<tt>application/x-www-form-urlencoded</tt> or
  154. # <tt>multipart/form-data</tt>).
  155. # - +headers+: Additional headers to pass, as a Hash. The headers will be
  156. # merged into the Rack env hash.
  157. # - +env+: Additional env to pass, as a Hash. The headers will be
  158. # merged into the Rack env hash.
  159. #
  160. # This method is rarely used directly. Use +#get+, +#post+, or other standard
  161. # HTTP methods in integration tests. +#process+ is only required when using a
  162. # request method that doesn't have a method defined in the integration tests.
  163. #
  164. # This method returns the response status, after performing the request.
  165. # Furthermore, if this method was called from an ActionDispatch::IntegrationTest object,
  166. # then that object's <tt>@response</tt> instance variable will point to a Response object
  167. # which one can use to inspect the details of the response.
  168. #
  169. # Example:
  170. # process :get, '/author', params: { since: 201501011400 }
  171. 1 def process(method, path, params: nil, headers: nil, env: nil, xhr: false, as: nil)
  172. 3 request_encoder = RequestEncoder.encoder(as)
  173. 3 headers ||= {}
  174. 3 if method == :get && as == :json && params
  175. headers["X-Http-Method-Override"] = "GET"
  176. method = :post
  177. end
  178. 3 if path =~ %r{://}
  179. 2 path = build_expanded_path(path) do |location|
  180. 2 https! URI::HTTPS === location if location.scheme
  181. 2 if url_host = location.host
  182. 2 default = Rack::Request::DEFAULT_PORTS[location.scheme]
  183. 2 url_host += ":#{location.port}" if default != location.port
  184. 2 host! url_host
  185. end
  186. end
  187. end
  188. 3 hostname, port = host.split(":")
  189. request_env = {
  190. :method => method,
  191. 2 :params => request_encoder.encode_params(params),
  192. "SERVER_NAME" => hostname,
  193. 3 "SERVER_PORT" => port || (https? ? "443" : "80"),
  194. 2 "HTTPS" => https? ? "on" : "off",
  195. 2 "rack.url_scheme" => https? ? "https" : "http",
  196. "REQUEST_URI" => path,
  197. 2 "HTTP_HOST" => host,
  198. 2 "REMOTE_ADDR" => remote_addr,
  199. 2 "CONTENT_TYPE" => request_encoder.content_type,
  200. 2 "HTTP_ACCEPT" => request_encoder.accept_header || accept
  201. }
  202. 3 wrapped_headers = Http::Headers.from_hash({})
  203. 3 wrapped_headers.merge!(headers) if headers
  204. 3 if xhr
  205. wrapped_headers["HTTP_X_REQUESTED_WITH"] = "XMLHttpRequest"
  206. wrapped_headers["HTTP_ACCEPT"] ||= [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
  207. end
  208. # This modifies the passed request_env directly.
  209. 3 if wrapped_headers.present?
  210. 3 Http::Headers.from_hash(request_env).merge!(wrapped_headers)
  211. end
  212. 3 if env.present?
  213. Http::Headers.from_hash(request_env).merge!(env)
  214. end
  215. 3 session = Rack::Test::Session.new(_mock_session)
  216. # NOTE: rack-test v0.5 doesn't build a default uri correctly
  217. # Make sure requested path is always a full URI.
  218. 3 session.request(build_full_uri(path, request_env), request_env)
  219. 3 @request_count += 1
  220. 3 @request = ActionDispatch::Request.new(session.last_request.env)
  221. 3 response = _mock_session.last_response
  222. 3 @response = ActionDispatch::TestResponse.from_response(response)
  223. 3 @response.request = @request
  224. 3 @html_document = nil
  225. 3 @url_options = nil
  226. 3 @controller = @request.controller_instance
  227. 3 response.status
  228. end
  229. # Set the host name to use in the next request.
  230. #
  231. # session.host! "www.example.com"
  232. 1 alias :host! :host=
  233. 1 private
  234. 1 def _mock_session
  235. 6 @_mock_session ||= Rack::MockSession.new(@app, host)
  236. end
  237. 1 def build_full_uri(path, env)
  238. 3 "#{env['rack.url_scheme']}://#{env['SERVER_NAME']}:#{env['SERVER_PORT']}#{path}"
  239. end
  240. 1 def build_expanded_path(path)
  241. 2 location = URI.parse(path)
  242. 2 yield location if block_given?
  243. 2 path = location.path
  244. 2 location.query ? "#{path}?#{location.query}" : path
  245. end
  246. end
  247. 1 module Runner
  248. 1 include ActionDispatch::Assertions
  249. 1 APP_SESSIONS = {}
  250. 1 attr_reader :app
  251. 1 def initialize(*args, &blk)
  252. 3 super(*args, &blk)
  253. 3 @integration_session = nil
  254. end
  255. 1 def before_setup # :nodoc:
  256. 3 @app = nil
  257. 3 super
  258. end
  259. 1 def integration_session
  260. 15 @integration_session ||= create_session(app)
  261. end
  262. # Reset the current session. This is useful for testing multiple sessions
  263. # in a single test case.
  264. 1 def reset!
  265. @integration_session = create_session(app)
  266. end
  267. 1 def create_session(app)
  268. 3 klass = APP_SESSIONS[app] ||= Class.new(Integration::Session) {
  269. # If the app is a Rails app, make url_helpers available on the session.
  270. # This makes app.url_for and app.foo_path available in the console.
  271. 1 if app.respond_to?(:routes)
  272. 1 include app.routes.url_helpers
  273. 1 include app.routes.mounted_helpers
  274. end
  275. }
  276. 3 klass.new(app)
  277. end
  278. 1 def remove! # :nodoc:
  279. @integration_session = nil
  280. end
  281. 1 %w(get post patch put head delete cookies assigns follow_redirect!).each do |method|
  282. 9 define_method(method) do |*args|
  283. # reset the html_document variable, except for cookies/assigns calls
  284. 3 unless method == "cookies" || method == "assigns"
  285. 3 @html_document = nil
  286. end
  287. 3 integration_session.__send__(method, *args).tap do
  288. 3 copy_session_variables!
  289. end
  290. end
  291. end
  292. # Open a new session instance. If a block is given, the new session is
  293. # yielded to the block before being returned.
  294. #
  295. # session = open_session do |sess|
  296. # sess.extend(CustomAssertions)
  297. # end
  298. #
  299. # By default, a single session is automatically created for you, but you
  300. # can use this method to open multiple sessions that ought to be tested
  301. # simultaneously.
  302. 1 def open_session
  303. dup.tap do |session|
  304. session.reset!
  305. yield session if block_given?
  306. end
  307. end
  308. # Copy the instance variables from the current session instance into the
  309. # test instance.
  310. 1 def copy_session_variables! #:nodoc:
  311. 9 @controller = @integration_session.controller
  312. 9 @response = @integration_session.response
  313. 9 @request = @integration_session.request
  314. end
  315. 1 def default_url_options
  316. integration_session.default_url_options
  317. end
  318. 1 def default_url_options=(options)
  319. integration_session.default_url_options = options
  320. end
  321. 1 private
  322. 1 def respond_to_missing?(method, _)
  323. integration_session.respond_to?(method) || super
  324. end
  325. # Delegate unhandled messages to the current session instance.
  326. 1 def method_missing(method, *args, &block)
  327. 6 if integration_session.respond_to?(method)
  328. 6 integration_session.public_send(method, *args, &block).tap do
  329. 6 copy_session_variables!
  330. end
  331. else
  332. super
  333. end
  334. end
  335. end
  336. end
  337. # An integration test spans multiple controllers and actions,
  338. # tying them all together to ensure they work together as expected. It tests
  339. # more completely than either unit or functional tests do, exercising the
  340. # entire stack, from the dispatcher to the database.
  341. #
  342. # At its simplest, you simply extend <tt>IntegrationTest</tt> and write your tests
  343. # using the get/post methods:
  344. #
  345. # require "test_helper"
  346. #
  347. # class ExampleTest < ActionDispatch::IntegrationTest
  348. # fixtures :people
  349. #
  350. # def test_login
  351. # # get the login page
  352. # get "/login"
  353. # assert_equal 200, status
  354. #
  355. # # post the login and follow through to the home page
  356. # post "/login", params: { username: people(:jamis).username,
  357. # password: people(:jamis).password }
  358. # follow_redirect!
  359. # assert_equal 200, status
  360. # assert_equal "/home", path
  361. # end
  362. # end
  363. #
  364. # However, you can also have multiple session instances open per test, and
  365. # even extend those instances with assertions and methods to create a very
  366. # powerful testing DSL that is specific for your application. You can even
  367. # reference any named routes you happen to have defined.
  368. #
  369. # require "test_helper"
  370. #
  371. # class AdvancedTest < ActionDispatch::IntegrationTest
  372. # fixtures :people, :rooms
  373. #
  374. # def test_login_and_speak
  375. # jamis, david = login(:jamis), login(:david)
  376. # room = rooms(:office)
  377. #
  378. # jamis.enter(room)
  379. # jamis.speak(room, "anybody home?")
  380. #
  381. # david.enter(room)
  382. # david.speak(room, "hello!")
  383. # end
  384. #
  385. # private
  386. #
  387. # module CustomAssertions
  388. # def enter(room)
  389. # # reference a named route, for maximum internal consistency!
  390. # get(room_url(id: room.id))
  391. # assert(...)
  392. # ...
  393. # end
  394. #
  395. # def speak(room, message)
  396. # post "/say/#{room.id}", xhr: true, params: { message: message }
  397. # assert(...)
  398. # ...
  399. # end
  400. # end
  401. #
  402. # def login(who)
  403. # open_session do |sess|
  404. # sess.extend(CustomAssertions)
  405. # who = people(who)
  406. # sess.post "/login", params: { username: who.username,
  407. # password: who.password }
  408. # assert(...)
  409. # end
  410. # end
  411. # end
  412. #
  413. # Another longer example would be:
  414. #
  415. # A simple integration test that exercises multiple controllers:
  416. #
  417. # require 'test_helper'
  418. #
  419. # class UserFlowsTest < ActionDispatch::IntegrationTest
  420. # test "login and browse site" do
  421. # # login via https
  422. # https!
  423. # get "/login"
  424. # assert_response :success
  425. #
  426. # post "/login", params: { username: users(:david).username, password: users(:david).password }
  427. # follow_redirect!
  428. # assert_equal '/welcome', path
  429. # assert_equal 'Welcome david!', flash[:notice]
  430. #
  431. # https!(false)
  432. # get "/articles/all"
  433. # assert_response :success
  434. # assert_select 'h1', 'Articles'
  435. # end
  436. # end
  437. #
  438. # As you can see the integration test involves multiple controllers and
  439. # exercises the entire stack from database to dispatcher. In addition you can
  440. # have multiple session instances open simultaneously in a test and extend
  441. # those instances with assertion methods to create a very powerful testing
  442. # DSL (domain-specific language) just for your application.
  443. #
  444. # Here's an example of multiple sessions and custom DSL in an integration test
  445. #
  446. # require 'test_helper'
  447. #
  448. # class UserFlowsTest < ActionDispatch::IntegrationTest
  449. # test "login and browse site" do
  450. # # User david logs in
  451. # david = login(:david)
  452. # # User guest logs in
  453. # guest = login(:guest)
  454. #
  455. # # Both are now available in different sessions
  456. # assert_equal 'Welcome david!', david.flash[:notice]
  457. # assert_equal 'Welcome guest!', guest.flash[:notice]
  458. #
  459. # # User david can browse site
  460. # david.browses_site
  461. # # User guest can browse site as well
  462. # guest.browses_site
  463. #
  464. # # Continue with other assertions
  465. # end
  466. #
  467. # private
  468. #
  469. # module CustomDsl
  470. # def browses_site
  471. # get "/products/all"
  472. # assert_response :success
  473. # assert_select 'h1', 'Products'
  474. # end
  475. # end
  476. #
  477. # def login(user)
  478. # open_session do |sess|
  479. # sess.extend(CustomDsl)
  480. # u = users(user)
  481. # sess.https!
  482. # sess.post "/login", params: { username: u.username, password: u.password }
  483. # assert_equal '/welcome', sess.path
  484. # sess.https!(false)
  485. # end
  486. # end
  487. # end
  488. #
  489. # See the {request helpers documentation}[rdoc-ref:ActionDispatch::Integration::RequestHelpers] for help on how to
  490. # use +get+, etc.
  491. #
  492. # === Changing the request encoding
  493. #
  494. # You can also test your JSON API easily by setting what the request should
  495. # be encoded as:
  496. #
  497. # require "test_helper"
  498. #
  499. # class ApiTest < ActionDispatch::IntegrationTest
  500. # test "creates articles" do
  501. # assert_difference -> { Article.count } do
  502. # post articles_path, params: { article: { title: "Ahoy!" } }, as: :json
  503. # end
  504. #
  505. # assert_response :success
  506. # assert_equal({ id: Article.last.id, title: "Ahoy!" }, response.parsed_body)
  507. # end
  508. # end
  509. #
  510. # The +as+ option passes an "application/json" Accept header (thereby setting
  511. # the request format to JSON unless overridden), sets the content type to
  512. # "application/json" and encodes the parameters as JSON.
  513. #
  514. # Calling +parsed_body+ on the response parses the response body based on the
  515. # last response MIME type.
  516. #
  517. # Out of the box, only <tt>:json</tt> is supported. But for any custom MIME
  518. # types you've registered, you can add your own encoders with:
  519. #
  520. # ActionDispatch::IntegrationTest.register_encoder :wibble,
  521. # param_encoder: -> params { params.to_wibble },
  522. # response_parser: -> body { body }
  523. #
  524. # Where +param_encoder+ defines how the params should be encoded and
  525. # +response_parser+ defines how the response body should be parsed through
  526. # +parsed_body+.
  527. #
  528. # Consult the Rails Testing Guide for more.
  529. 1 class IntegrationTest < ActiveSupport::TestCase
  530. 1 include TestProcess::FixtureFile
  531. 1 module UrlOptions
  532. 1 extend ActiveSupport::Concern
  533. 1 def url_options
  534. integration_session.url_options
  535. end
  536. end
  537. 1 module Behavior
  538. 1 extend ActiveSupport::Concern
  539. 1 include Integration::Runner
  540. 1 include ActionController::TemplateAssertions
  541. 1 included do
  542. 1 include ActionDispatch::Routing::UrlFor
  543. 1 include UrlOptions # don't let UrlFor override the url_options method
  544. 1 ActiveSupport.run_load_hooks(:action_dispatch_integration_test, self)
  545. 1 @@app = nil
  546. end
  547. 1 module ClassMethods
  548. 1 def app
  549. 3 if defined?(@@app) && @@app
  550. @@app
  551. else
  552. 3 ActionDispatch.test_app
  553. end
  554. end
  555. 1 def app=(app)
  556. @@app = app
  557. end
  558. 1 def register_encoder(*args)
  559. RequestEncoder.register_encoder(*args)
  560. end
  561. end
  562. 1 def app
  563. 3 super || self.class.app
  564. end
  565. 1 def document_root_element
  566. html_document.root
  567. end
  568. end
  569. 1 include Behavior
  570. end
  571. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/request_encoder.rb

83.33% lines covered

30 relevant lines. 25 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionDispatch
  3. 1 class RequestEncoder # :nodoc:
  4. 1 class IdentityEncoder
  5. 1 def content_type; end
  6. 1 def accept_header; end
  7. 4 def encode_params(params); params; end
  8. 3 def response_parser; -> body { body }; end
  9. end
  10. 1 @encoders = { identity: IdentityEncoder.new }
  11. 1 attr_reader :response_parser
  12. 1 def initialize(mime_name, param_encoder, response_parser)
  13. 1 @mime = Mime[mime_name]
  14. 1 unless @mime
  15. raise ArgumentError, "Can't register a request encoder for " \
  16. "unregistered MIME Type: #{mime_name}. See `Mime::Type.register`."
  17. end
  18. 1 @response_parser = response_parser || -> body { body }
  19. 1 @param_encoder = param_encoder || :"to_#{@mime.symbol}".to_proc
  20. end
  21. 1 def content_type
  22. @mime.to_s
  23. end
  24. 1 def accept_header
  25. @mime.to_s
  26. end
  27. 1 def encode_params(params)
  28. @param_encoder.call(params) if params
  29. end
  30. 1 def self.parser(content_type)
  31. 3 mime = Mime::Type.lookup(content_type)
  32. 3 encoder(mime ? mime.ref : nil).response_parser
  33. end
  34. 1 def self.encoder(name)
  35. 6 @encoders[name] || @encoders[:identity]
  36. end
  37. 1 def self.register_encoder(mime_name, param_encoder: nil, response_parser: nil)
  38. 1 @encoders[mime_name] = new(mime_name, param_encoder, response_parser)
  39. end
  40. 1 register_encoder :json, response_parser: -> body { JSON.parse(body) }
  41. end
  42. end

target/rubygems/gems/actionpack-5.2.3/lib/action_dispatch/testing/test_response.rb

63.16% lines covered

19 relevant lines. 12 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch/testing/request_encoder"
  3. 1 module ActionDispatch
  4. # Integration test methods such as ActionDispatch::Integration::Session#get
  5. # and ActionDispatch::Integration::Session#post return objects of class
  6. # TestResponse, which represent the HTTP response results of the requested
  7. # controller actions.
  8. #
  9. # See Response for more information on controller response objects.
  10. 1 class TestResponse < Response
  11. 1 def self.from_response(response)
  12. 3 new response.status, response.headers, response.body
  13. end
  14. 1 def initialize(*) # :nodoc:
  15. 3 super
  16. 3 @response_parser = RequestEncoder.parser(content_type)
  17. end
  18. # Was the response successful?
  19. 1 def success?
  20. ActiveSupport::Deprecation.warn(<<-MSG.squish)
  21. The success? predicate is deprecated and will be removed in Rails 6.0.
  22. Please use successful? as provided by Rack::Response::Helpers.
  23. MSG
  24. successful?
  25. end
  26. # Was the URL not found?
  27. 1 def missing?
  28. ActiveSupport::Deprecation.warn(<<-MSG.squish)
  29. The missing? predicate is deprecated and will be removed in Rails 6.0.
  30. Please use not_found? as provided by Rack::Response::Helpers.
  31. MSG
  32. not_found?
  33. end
  34. # Was there a server-side error?
  35. 1 def error?
  36. ActiveSupport::Deprecation.warn(<<-MSG.squish)
  37. The error? predicate is deprecated and will be removed in Rails 6.0.
  38. Please use server_error? as provided by Rack::Response::Helpers.
  39. MSG
  40. server_error?
  41. end
  42. 1 def parsed_body
  43. @parsed_body ||= @response_parser.call(body)
  44. end
  45. end
  46. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/buffers.rb

56.67% lines covered

30 relevant lines. 17 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/output_safety"
  3. 1 module ActionView
  4. 1 class OutputBuffer < ActiveSupport::SafeBuffer #:nodoc:
  5. 1 def initialize(*)
  6. super
  7. encode!
  8. end
  9. 1 def <<(value)
  10. return self if value.nil?
  11. super(value.to_s)
  12. end
  13. 1 alias :append= :<<
  14. 1 def safe_expr_append=(val)
  15. return self if val.nil?
  16. safe_concat val.to_s
  17. end
  18. 1 alias :safe_append= :safe_concat
  19. end
  20. 1 class StreamingBuffer #:nodoc:
  21. 1 def initialize(block)
  22. @block = block
  23. end
  24. 1 def <<(value)
  25. value = value.to_s
  26. value = ERB::Util.h(value) unless value.html_safe?
  27. @block.call(value)
  28. end
  29. 1 alias :concat :<<
  30. 1 alias :append= :<<
  31. 1 def safe_concat(value)
  32. @block.call(value.to_s)
  33. end
  34. 1 alias :safe_append= :safe_concat
  35. 1 def html_safe?
  36. true
  37. end
  38. 1 def html_safe
  39. self
  40. end
  41. end
  42. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/dependency_tracker.rb

51.32% lines covered

76 relevant lines. 39 lines covered and 37 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "concurrent/map"
  3. 1 require "action_view/path_set"
  4. 1 module ActionView
  5. 1 class DependencyTracker # :nodoc:
  6. 1 @trackers = Concurrent::Map.new
  7. 1 def self.find_dependencies(name, template, view_paths = nil)
  8. tracker = @trackers[template.handler]
  9. return [] unless tracker
  10. tracker.call(name, template, view_paths)
  11. end
  12. 1 def self.register_tracker(extension, tracker)
  13. 2 handler = Template.handler_for_extension(extension)
  14. 2 if tracker.respond_to?(:supports_view_paths?)
  15. 2 @trackers[handler] = tracker
  16. else
  17. @trackers[handler] = lambda { |name, template, _|
  18. tracker.call(name, template)
  19. }
  20. end
  21. end
  22. 1 def self.remove_tracker(handler)
  23. @trackers.delete(handler)
  24. end
  25. 1 class ERBTracker # :nodoc:
  26. 1 EXPLICIT_DEPENDENCY = /# Template Dependency: (\S+)/
  27. # A valid ruby identifier - suitable for class, method and specially variable names
  28. 1 IDENTIFIER = /
  29. [[:alpha:]_] # at least one uppercase letter, lowercase letter or underscore
  30. [[:word:]]* # followed by optional letters, numbers or underscores
  31. /x
  32. # Any kind of variable name. e.g. @instance, @@class, $global or local.
  33. # Possibly following a method call chain
  34. VARIABLE_OR_METHOD_CHAIN = /
  35. (?:\$|@{1,2})? # optional global, instance or class variable indicator
  36. 1 (?:#{IDENTIFIER}\.)* # followed by an optional chain of zero-argument method calls
  37. 1 (?<dynamic>#{IDENTIFIER}) # and a final valid identifier, captured as DYNAMIC
  38. /x
  39. # A simple string literal. e.g. "School's out!"
  40. 1 STRING = /
  41. (?<quote>['"]) # an opening quote
  42. (?<static>.*?) # with anything inside, captured as STATIC
  43. \k<quote> # and a matching closing quote
  44. /x
  45. # Part of any hash containing the :partial key
  46. 1 PARTIAL_HASH_KEY = /
  47. (?:\bpartial:|:partial\s*=>) # partial key in either old or new style hash syntax
  48. \s* # followed by optional spaces
  49. /x
  50. # Part of any hash containing the :layout key
  51. 1 LAYOUT_HASH_KEY = /
  52. (?:\blayout:|:layout\s*=>) # layout key in either old or new style hash syntax
  53. \s* # followed by optional spaces
  54. /x
  55. # Matches:
  56. # partial: "comments/comment", collection: @all_comments => "comments/comment"
  57. # (object: @single_comment, partial: "comments/comment") => "comments/comment"
  58. #
  59. # "comments/comments"
  60. # 'comments/comments'
  61. # ('comments/comments')
  62. #
  63. # (@topic) => "topics/topic"
  64. # topics => "topics/topic"
  65. # (message.topics) => "topics/topic"
  66. RENDER_ARGUMENTS = /\A
  67. (?:\s*\(?\s*) # optional opening paren surrounded by spaces
  68. 1 (?:.*?#{PARTIAL_HASH_KEY}|#{LAYOUT_HASH_KEY})? # optional hash, up to the partial or layout key declaration
  69. 1 (?:#{STRING}|#{VARIABLE_OR_METHOD_CHAIN}) # finally, the dependency name of interest
  70. /xm
  71. LAYOUT_DEPENDENCY = /\A
  72. (?:\s*\(?\s*) # optional opening paren surrounded by spaces
  73. 1 (?:.*?#{LAYOUT_HASH_KEY}) # check if the line has layout key declaration
  74. 1 (?:#{STRING}|#{VARIABLE_OR_METHOD_CHAIN}) # finally, the dependency name of interest
  75. /xm
  76. 1 def self.supports_view_paths? # :nodoc:
  77. true
  78. end
  79. 1 def self.call(name, template, view_paths = nil)
  80. new(name, template, view_paths).dependencies
  81. end
  82. 1 def initialize(name, template, view_paths = nil)
  83. @name, @template, @view_paths = name, template, view_paths
  84. end
  85. 1 def dependencies
  86. render_dependencies + explicit_dependencies
  87. end
  88. 1 attr_reader :name, :template
  89. 1 private :name, :template
  90. 1 private
  91. 1 def source
  92. template.source
  93. end
  94. 1 def directory
  95. name.split("/")[0..-2].join("/")
  96. end
  97. 1 def render_dependencies
  98. render_dependencies = []
  99. render_calls = source.split(/\brender\b/).drop(1)
  100. render_calls.each do |arguments|
  101. add_dependencies(render_dependencies, arguments, LAYOUT_DEPENDENCY)
  102. add_dependencies(render_dependencies, arguments, RENDER_ARGUMENTS)
  103. end
  104. render_dependencies.uniq
  105. end
  106. 1 def add_dependencies(render_dependencies, arguments, pattern)
  107. arguments.scan(pattern) do
  108. add_dynamic_dependency(render_dependencies, Regexp.last_match[:dynamic])
  109. add_static_dependency(render_dependencies, Regexp.last_match[:static])
  110. end
  111. end
  112. 1 def add_dynamic_dependency(dependencies, dependency)
  113. if dependency
  114. dependencies << "#{dependency.pluralize}/#{dependency.singularize}"
  115. end
  116. end
  117. 1 def add_static_dependency(dependencies, dependency)
  118. if dependency
  119. if dependency.include?("/")
  120. dependencies << dependency
  121. else
  122. dependencies << "#{directory}/#{dependency}"
  123. end
  124. end
  125. end
  126. 1 def resolve_directories(wildcard_dependencies)
  127. return [] unless @view_paths
  128. wildcard_dependencies.flat_map { |query, templates|
  129. @view_paths.find_all_with_query(query).map do |template|
  130. "#{File.dirname(query)}/#{File.basename(template).split('.').first}"
  131. end
  132. }.sort
  133. end
  134. 1 def explicit_dependencies
  135. dependencies = source.scan(EXPLICIT_DEPENDENCY).flatten.uniq
  136. wildcards, explicits = dependencies.partition { |dependency| dependency[-1] == "*" }
  137. (explicits + resolve_directories(wildcards)).uniq
  138. end
  139. end
  140. 1 register_tracker :erb, ERBTracker
  141. end
  142. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/digestor.rb

40.85% lines covered

71 relevant lines. 29 lines covered and 42 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "concurrent/map"
  3. 1 require "action_view/dependency_tracker"
  4. 1 require "monitor"
  5. 1 module ActionView
  6. 1 class Digestor
  7. 1 @@digest_mutex = Mutex.new
  8. 1 module PerExecutionDigestCacheExpiry
  9. 1 def self.before(target)
  10. ActionView::LookupContext::DetailsKey.clear
  11. end
  12. end
  13. 1 class << self
  14. # Supported options:
  15. #
  16. # * <tt>name</tt> - Template name
  17. # * <tt>finder</tt> - An instance of <tt>ActionView::LookupContext</tt>
  18. # * <tt>dependencies</tt> - An array of dependent views
  19. 1 def digest(name:, finder:, dependencies: [])
  20. dependencies ||= []
  21. cache_key = [ name, finder.rendered_format, dependencies ].flatten.compact.join(".")
  22. # this is a correctly done double-checked locking idiom
  23. # (Concurrent::Map's lookups have volatile semantics)
  24. finder.digest_cache[cache_key] || @@digest_mutex.synchronize do
  25. finder.digest_cache.fetch(cache_key) do # re-check under lock
  26. partial = name.include?("/_")
  27. root = tree(name, finder, partial)
  28. dependencies.each do |injected_dep|
  29. root.children << Injected.new(injected_dep, nil, nil)
  30. end
  31. finder.digest_cache[cache_key] = root.digest(finder)
  32. end
  33. end
  34. end
  35. 1 def logger
  36. ActionView::Base.logger || NullLogger
  37. end
  38. # Create a dependency tree for template named +name+.
  39. 1 def tree(name, finder, partial = false, seen = {})
  40. logical_name = name.gsub(%r|/_|, "/")
  41. if template = find_template(finder, logical_name, [], partial, [])
  42. finder.rendered_format ||= template.formats.first
  43. if node = seen[template.identifier] # handle cycles in the tree
  44. node
  45. else
  46. node = seen[template.identifier] = Node.create(name, logical_name, template, partial)
  47. deps = DependencyTracker.find_dependencies(name, template, finder.view_paths)
  48. deps.uniq { |n| n.gsub(%r|/_|, "/") }.each do |dep_file|
  49. node.children << tree(dep_file, finder, true, seen)
  50. end
  51. node
  52. end
  53. else
  54. unless name.include?("#") # Dynamic template partial names can never be tracked
  55. logger.error " Couldn't find template for digesting: #{name}"
  56. end
  57. seen[name] ||= Missing.new(name, logical_name, nil)
  58. end
  59. end
  60. 1 private
  61. 1 def find_template(finder, name, prefixes, partial, keys)
  62. finder.disable_cache do
  63. format = finder.rendered_format
  64. result = finder.find_all(name, prefixes, partial, keys, formats: [format]).first if format
  65. result || finder.find_all(name, prefixes, partial, keys).first
  66. end
  67. end
  68. end
  69. 1 class Node
  70. 1 attr_reader :name, :logical_name, :template, :children
  71. 1 def self.create(name, logical_name, template, partial)
  72. klass = partial ? Partial : Node
  73. klass.new(name, logical_name, template, [])
  74. end
  75. 1 def initialize(name, logical_name, template, children = [])
  76. @name = name
  77. @logical_name = logical_name
  78. @template = template
  79. @children = children
  80. end
  81. 1 def digest(finder, stack = [])
  82. ActiveSupport::Digest.hexdigest("#{template.source}-#{dependency_digest(finder, stack)}")
  83. end
  84. 1 def dependency_digest(finder, stack)
  85. children.map do |node|
  86. if stack.include?(node)
  87. false
  88. else
  89. finder.digest_cache[node.name] ||= begin
  90. stack.push node
  91. node.digest(finder, stack).tap { stack.pop }
  92. end
  93. end
  94. end.join("-")
  95. end
  96. 1 def to_dep_map
  97. children.any? ? { name => children.map(&:to_dep_map) } : name
  98. end
  99. end
  100. 1 class Partial < Node; end
  101. 1 class Missing < Node
  102. 1 def digest(finder, _ = []) "" end
  103. end
  104. 1 class Injected < Node
  105. 1 def digest(finder, _ = []) name end
  106. end
  107. 1 class NullLogger
  108. 1 def self.debug(_); end
  109. 1 def self.error(_); end
  110. end
  111. end
  112. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/flows.rb

39.47% lines covered

38 relevant lines. 15 lines covered and 23 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/output_safety"
  3. 1 module ActionView
  4. 1 class OutputFlow #:nodoc:
  5. 1 attr_reader :content
  6. 1 def initialize
  7. @content = Hash.new { |h, k| h[k] = ActiveSupport::SafeBuffer.new }
  8. end
  9. # Called by _layout_for to read stored values.
  10. 1 def get(key)
  11. @content[key]
  12. end
  13. # Called by each renderer object to set the layout contents.
  14. 1 def set(key, value)
  15. @content[key] = ActiveSupport::SafeBuffer.new(value)
  16. end
  17. # Called by content_for
  18. 1 def append(key, value)
  19. @content[key] << value
  20. end
  21. 1 alias_method :append!, :append
  22. end
  23. 1 class StreamingFlow < OutputFlow #:nodoc:
  24. 1 def initialize(view, fiber)
  25. @view = view
  26. @parent = nil
  27. @child = view.output_buffer
  28. @content = view.view_flow.content
  29. @fiber = fiber
  30. @root = Fiber.current.object_id
  31. end
  32. # Try to get stored content. If the content
  33. # is not available and we're inside the layout fiber,
  34. # then it will begin waiting for the given key and yield.
  35. 1 def get(key)
  36. return super if @content.key?(key)
  37. if inside_fiber?
  38. view = @view
  39. begin
  40. @waiting_for = key
  41. view.output_buffer, @parent = @child, view.output_buffer
  42. Fiber.yield
  43. ensure
  44. @waiting_for = nil
  45. view.output_buffer, @child = @parent, view.output_buffer
  46. end
  47. end
  48. super
  49. end
  50. # Appends the contents for the given key. This is called
  51. # by providing and resuming back to the fiber,
  52. # if that's the key it's waiting for.
  53. 1 def append!(key, value)
  54. super
  55. @fiber.resume if @waiting_for == key
  56. end
  57. 1 private
  58. 1 def inside_fiber?
  59. Fiber.current.object_id != @root
  60. end
  61. end
  62. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags.rb

100.0% lines covered

37 relevant lines. 37 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers #:nodoc:
  4. 1 module Tags #:nodoc:
  5. 1 extend ActiveSupport::Autoload
  6. 1 eager_autoload do
  7. 1 autoload :Base
  8. 1 autoload :Translator
  9. 1 autoload :CheckBox
  10. 1 autoload :CollectionCheckBoxes
  11. 1 autoload :CollectionRadioButtons
  12. 1 autoload :CollectionSelect
  13. 1 autoload :ColorField
  14. 1 autoload :DateField
  15. 1 autoload :DateSelect
  16. 1 autoload :DatetimeField
  17. 1 autoload :DatetimeLocalField
  18. 1 autoload :DatetimeSelect
  19. 1 autoload :EmailField
  20. 1 autoload :FileField
  21. 1 autoload :GroupedCollectionSelect
  22. 1 autoload :HiddenField
  23. 1 autoload :Label
  24. 1 autoload :MonthField
  25. 1 autoload :NumberField
  26. 1 autoload :PasswordField
  27. 1 autoload :RadioButton
  28. 1 autoload :RangeField
  29. 1 autoload :SearchField
  30. 1 autoload :Select
  31. 1 autoload :TelField
  32. 1 autoload :TextArea
  33. 1 autoload :TextField
  34. 1 autoload :TimeField
  35. 1 autoload :TimeSelect
  36. 1 autoload :TimeZoneSelect
  37. 1 autoload :UrlField
  38. 1 autoload :WeekField
  39. end
  40. end
  41. end
  42. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/base.rb

26.47% lines covered

102 relevant lines. 27 lines covered and 75 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class Base # :nodoc:
  6. 1 include Helpers::ActiveModelInstanceTag, Helpers::TagHelper, Helpers::FormTagHelper
  7. 1 include FormOptionsHelper
  8. 1 attr_reader :object
  9. 1 def initialize(object_name, method_name, template_object, options = {})
  10. @object_name, @method_name = object_name.to_s.dup, method_name.to_s.dup
  11. @template_object = template_object
  12. @object_name.sub!(/\[\]$/, "") || @object_name.sub!(/\[\]\]$/, "]")
  13. @object = retrieve_object(options.delete(:object))
  14. @skip_default_ids = options.delete(:skip_default_ids)
  15. @allow_method_names_outside_object = options.delete(:allow_method_names_outside_object)
  16. @options = options
  17. if Regexp.last_match
  18. @generate_indexed_names = true
  19. @auto_index = retrieve_autoindex(Regexp.last_match.pre_match)
  20. else
  21. @generate_indexed_names = false
  22. @auto_index = nil
  23. end
  24. end
  25. # This is what child classes implement.
  26. 1 def render
  27. raise NotImplementedError, "Subclasses must implement a render method"
  28. end
  29. 1 private
  30. 1 def value
  31. if @allow_method_names_outside_object
  32. object.public_send @method_name if object && object.respond_to?(@method_name)
  33. else
  34. object.public_send @method_name if object
  35. end
  36. end
  37. 1 def value_before_type_cast
  38. unless object.nil?
  39. method_before_type_cast = @method_name + "_before_type_cast"
  40. if value_came_from_user? && object.respond_to?(method_before_type_cast)
  41. object.public_send(method_before_type_cast)
  42. else
  43. value
  44. end
  45. end
  46. end
  47. 1 def value_came_from_user?
  48. method_name = "#{@method_name}_came_from_user?"
  49. !object.respond_to?(method_name) || object.public_send(method_name)
  50. end
  51. 1 def retrieve_object(object)
  52. if object
  53. object
  54. elsif @template_object.instance_variable_defined?("@#{@object_name}")
  55. @template_object.instance_variable_get("@#{@object_name}")
  56. end
  57. rescue NameError
  58. # As @object_name may contain the nested syntax (item[subobject]) we need to fallback to nil.
  59. nil
  60. end
  61. 1 def retrieve_autoindex(pre_match)
  62. object = self.object || @template_object.instance_variable_get("@#{pre_match}")
  63. if object && object.respond_to?(:to_param)
  64. object.to_param
  65. else
  66. raise ArgumentError, "object[] naming but object param and @object var don't exist or don't respond to to_param: #{object.inspect}"
  67. end
  68. end
  69. 1 def add_default_name_and_id_for_value(tag_value, options)
  70. if tag_value.nil?
  71. add_default_name_and_id(options)
  72. else
  73. specified_id = options["id"]
  74. add_default_name_and_id(options)
  75. if specified_id.blank? && options["id"].present?
  76. options["id"] += "_#{sanitized_value(tag_value)}"
  77. end
  78. end
  79. end
  80. 1 def add_default_name_and_id(options)
  81. index = name_and_id_index(options)
  82. options["name"] = options.fetch("name") { tag_name(options["multiple"], index) }
  83. if generate_ids?
  84. options["id"] = options.fetch("id") { tag_id(index) }
  85. if namespace = options.delete("namespace")
  86. options["id"] = options["id"] ? "#{namespace}_#{options['id']}" : namespace
  87. end
  88. end
  89. end
  90. 1 def tag_name(multiple = false, index = nil)
  91. # a little duplication to construct less strings
  92. case
  93. when @object_name.empty?
  94. "#{sanitized_method_name}#{"[]" if multiple}"
  95. when index
  96. "#{@object_name}[#{index}][#{sanitized_method_name}]#{"[]" if multiple}"
  97. else
  98. "#{@object_name}[#{sanitized_method_name}]#{"[]" if multiple}"
  99. end
  100. end
  101. 1 def tag_id(index = nil)
  102. # a little duplication to construct less strings
  103. case
  104. when @object_name.empty?
  105. sanitized_method_name.dup
  106. when index
  107. "#{sanitized_object_name}_#{index}_#{sanitized_method_name}"
  108. else
  109. "#{sanitized_object_name}_#{sanitized_method_name}"
  110. end
  111. end
  112. 1 def sanitized_object_name
  113. @sanitized_object_name ||= @object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
  114. end
  115. 1 def sanitized_method_name
  116. @sanitized_method_name ||= @method_name.sub(/\?$/, "")
  117. end
  118. 1 def sanitized_value(value)
  119. value.to_s.gsub(/\s/, "_").gsub(/[^-[[:word:]]]/, "").mb_chars.downcase.to_s
  120. end
  121. 1 def select_content_tag(option_tags, options, html_options)
  122. html_options = html_options.stringify_keys
  123. add_default_name_and_id(html_options)
  124. if placeholder_required?(html_options)
  125. raise ArgumentError, "include_blank cannot be false for a required field." if options[:include_blank] == false
  126. options[:include_blank] ||= true unless options[:prompt]
  127. end
  128. value = options.fetch(:selected) { value() }
  129. select = content_tag("select", add_options(option_tags, options, value), html_options)
  130. if html_options["multiple"] && options.fetch(:include_hidden, true)
  131. tag("input", disabled: html_options["disabled"], name: html_options["name"], type: "hidden", value: "") + select
  132. else
  133. select
  134. end
  135. end
  136. 1 def placeholder_required?(html_options)
  137. # See https://html.spec.whatwg.org/multipage/forms.html#attr-select-required
  138. html_options["required"] && !html_options["multiple"] && html_options.fetch("size", 1).to_i == 1
  139. end
  140. 1 def add_options(option_tags, options, value = nil)
  141. if options[:include_blank]
  142. option_tags = tag_builder.content_tag_string("option", options[:include_blank].kind_of?(String) ? options[:include_blank] : nil, value: "") + "\n" + option_tags
  143. end
  144. if value.blank? && options[:prompt]
  145. option_tags = tag_builder.content_tag_string("option", prompt_text(options[:prompt]), value: "") + "\n" + option_tags
  146. end
  147. option_tags
  148. end
  149. 1 def name_and_id_index(options)
  150. if options.key?("index")
  151. options.delete("index") || ""
  152. elsif @generate_indexed_names
  153. @auto_index || ""
  154. end
  155. end
  156. 1 def generate_ids?
  157. !@skip_default_ids
  158. end
  159. end
  160. end
  161. end
  162. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/check_box.rb

30.56% lines covered

36 relevant lines. 11 lines covered and 25 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/checkable"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class CheckBox < Base #:nodoc:
  7. 1 include Checkable
  8. 1 def initialize(object_name, method_name, template_object, checked_value, unchecked_value, options)
  9. @checked_value = checked_value
  10. @unchecked_value = unchecked_value
  11. super(object_name, method_name, template_object, options)
  12. end
  13. 1 def render
  14. options = @options.stringify_keys
  15. options["type"] = "checkbox"
  16. options["value"] = @checked_value
  17. options["checked"] = "checked" if input_checked?(options)
  18. if options["multiple"]
  19. add_default_name_and_id_for_value(@checked_value, options)
  20. options.delete("multiple")
  21. else
  22. add_default_name_and_id(options)
  23. end
  24. include_hidden = options.delete("include_hidden") { true }
  25. checkbox = tag("input", options)
  26. if include_hidden
  27. hidden = hidden_field_for_checkbox(options)
  28. hidden + checkbox
  29. else
  30. checkbox
  31. end
  32. end
  33. 1 private
  34. 1 def checked?(value)
  35. case value
  36. when TrueClass, FalseClass
  37. value == !!@checked_value
  38. when NilClass
  39. false
  40. when String
  41. value == @checked_value
  42. else
  43. if value.respond_to?(:include?)
  44. value.include?(@checked_value)
  45. else
  46. value.to_i == @checked_value.to_i
  47. end
  48. end
  49. end
  50. 1 def hidden_field_for_checkbox(options)
  51. @unchecked_value ? tag("input", options.slice("name", "disabled", "form").merge!("type" => "hidden", "value" => @unchecked_value)) : "".html_safe
  52. end
  53. end
  54. end
  55. end
  56. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/checkable.rb

55.56% lines covered

9 relevant lines. 5 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 module Checkable # :nodoc:
  6. 1 def input_checked?(options)
  7. if options.has_key?("checked")
  8. checked = options.delete "checked"
  9. checked == true || checked == "checked"
  10. else
  11. checked?(value)
  12. end
  13. end
  14. end
  15. end
  16. end
  17. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_check_boxes.rb

63.16% lines covered

19 relevant lines. 12 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/collection_helpers"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class CollectionCheckBoxes < Base # :nodoc:
  7. 1 include CollectionHelpers
  8. 1 class CheckBoxBuilder < Builder # :nodoc:
  9. 1 def check_box(extra_html_options = {})
  10. html_options = extra_html_options.merge(@input_html_options)
  11. html_options[:multiple] = true
  12. html_options[:skip_default_ids] = false
  13. @template_object.check_box(@object_name, @method_name, html_options, @value, nil)
  14. end
  15. end
  16. 1 def render(&block)
  17. render_collection_for(CheckBoxBuilder, &block)
  18. end
  19. 1 private
  20. 1 def render_component(builder)
  21. builder.check_box + builder.label
  22. end
  23. 1 def hidden_field_name
  24. "#{super}[]"
  25. end
  26. end
  27. end
  28. end
  29. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_helpers.rb

26.15% lines covered

65 relevant lines. 17 lines covered and 48 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 module CollectionHelpers # :nodoc:
  6. 1 class Builder # :nodoc:
  7. 1 attr_reader :object, :text, :value
  8. 1 def initialize(template_object, object_name, method_name, object,
  9. sanitized_attribute_name, text, value, input_html_options)
  10. @template_object = template_object
  11. @object_name = object_name
  12. @method_name = method_name
  13. @object = object
  14. @sanitized_attribute_name = sanitized_attribute_name
  15. @text = text
  16. @value = value
  17. @input_html_options = input_html_options
  18. end
  19. 1 def label(label_html_options = {}, &block)
  20. html_options = @input_html_options.slice(:index, :namespace).merge(label_html_options)
  21. html_options[:for] ||= @input_html_options[:id] if @input_html_options[:id]
  22. @template_object.label(@object_name, @sanitized_attribute_name, @text, html_options, &block)
  23. end
  24. end
  25. 1 def initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)
  26. @collection = collection
  27. @value_method = value_method
  28. @text_method = text_method
  29. @html_options = html_options
  30. super(object_name, method_name, template_object, options)
  31. end
  32. 1 private
  33. 1 def instantiate_builder(builder_class, item, value, text, html_options)
  34. builder_class.new(@template_object, @object_name, @method_name, item,
  35. sanitize_attribute_name(value), text, value, html_options)
  36. end
  37. # Generate default options for collection helpers, such as :checked and
  38. # :disabled.
  39. 1 def default_html_options_for_collection(item, value)
  40. html_options = @html_options.dup
  41. [:checked, :selected, :disabled, :readonly].each do |option|
  42. current_value = @options[option]
  43. next if current_value.nil?
  44. accept = if current_value.respond_to?(:call)
  45. current_value.call(item)
  46. else
  47. Array(current_value).map(&:to_s).include?(value.to_s)
  48. end
  49. if accept
  50. html_options[option] = true
  51. elsif option == :checked
  52. html_options[option] = false
  53. end
  54. end
  55. html_options[:object] = @object
  56. html_options
  57. end
  58. 1 def sanitize_attribute_name(value)
  59. "#{sanitized_method_name}_#{sanitized_value(value)}"
  60. end
  61. 1 def render_collection
  62. @collection.map do |item|
  63. value = value_for_collection(item, @value_method)
  64. text = value_for_collection(item, @text_method)
  65. default_html_options = default_html_options_for_collection(item, value)
  66. additional_html_options = option_html_attributes(item)
  67. yield item, value, text, default_html_options.merge(additional_html_options)
  68. end.join.html_safe
  69. end
  70. 1 def render_collection_for(builder_class, &block)
  71. options = @options.stringify_keys
  72. rendered_collection = render_collection do |item, value, text, default_html_options|
  73. builder = instantiate_builder(builder_class, item, value, text, default_html_options)
  74. if block_given?
  75. @template_object.capture(builder, &block)
  76. else
  77. render_component(builder)
  78. end
  79. end
  80. # Prepend a hidden field to make sure something will be sent back to the
  81. # server if all radio buttons are unchecked.
  82. if options.fetch("include_hidden", true)
  83. hidden_field + rendered_collection
  84. else
  85. rendered_collection
  86. end
  87. end
  88. 1 def hidden_field
  89. hidden_name = @html_options[:name] || hidden_field_name
  90. @template_object.hidden_field_tag(hidden_name, "", id: nil)
  91. end
  92. 1 def hidden_field_name
  93. "#{tag_name(false, @options[:index])}"
  94. end
  95. end
  96. end
  97. end
  98. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_radio_buttons.rb

68.75% lines covered

16 relevant lines. 11 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/collection_helpers"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class CollectionRadioButtons < Base # :nodoc:
  7. 1 include CollectionHelpers
  8. 1 class RadioButtonBuilder < Builder # :nodoc:
  9. 1 def radio_button(extra_html_options = {})
  10. html_options = extra_html_options.merge(@input_html_options)
  11. html_options[:skip_default_ids] = false
  12. @template_object.radio_button(@object_name, @method_name, @value, html_options)
  13. end
  14. end
  15. 1 def render(&block)
  16. render_collection_for(RadioButtonBuilder, &block)
  17. end
  18. 1 private
  19. 1 def render_component(builder)
  20. builder.radio_button + builder.label
  21. end
  22. end
  23. end
  24. end
  25. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/collection_select.rb

42.86% lines covered

14 relevant lines. 6 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class CollectionSelect < Base #:nodoc:
  6. 1 def initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)
  7. @collection = collection
  8. @value_method = value_method
  9. @text_method = text_method
  10. @html_options = html_options
  11. super(object_name, method_name, template_object, options)
  12. end
  13. 1 def render
  14. option_tags_options = {
  15. selected: @options.fetch(:selected) { value },
  16. disabled: @options[:disabled]
  17. }
  18. select_content_tag(
  19. options_from_collection_for_select(@collection, @value_method, @text_method, option_tags_options),
  20. @options, @html_options
  21. )
  22. end
  23. end
  24. end
  25. end
  26. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/color_field.rb

46.67% lines covered

15 relevant lines. 7 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class ColorField < TextField # :nodoc:
  6. 1 def render
  7. options = @options.stringify_keys
  8. options["value"] ||= validate_color_string(value)
  9. @options = options
  10. super
  11. end
  12. 1 private
  13. 1 def validate_color_string(string)
  14. regex = /#[0-9a-fA-F]{6}/
  15. if regex.match(string)
  16. string.downcase
  17. else
  18. "#000000"
  19. end
  20. end
  21. end
  22. end
  23. end
  24. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_field.rb

85.71% lines covered

7 relevant lines. 6 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class DateField < DatetimeField # :nodoc:
  6. 1 private
  7. 1 def format_date(value)
  8. value.try(:strftime, "%Y-%m-%d")
  9. end
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/date_select.rb

35.14% lines covered

37 relevant lines. 13 lines covered and 24 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/time/calculations"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class DateSelect < Base # :nodoc:
  7. 1 def initialize(object_name, method_name, template_object, options, html_options)
  8. @html_options = html_options
  9. super(object_name, method_name, template_object, options)
  10. end
  11. 1 def render
  12. error_wrapping(datetime_selector(@options, @html_options).send("select_#{select_type}").html_safe)
  13. end
  14. 1 class << self
  15. 1 def select_type
  16. @select_type ||= name.split("::").last.sub("Select", "").downcase
  17. end
  18. end
  19. 1 private
  20. 1 def select_type
  21. self.class.select_type
  22. end
  23. 1 def datetime_selector(options, html_options)
  24. datetime = options.fetch(:selected) { value || default_datetime(options) }
  25. @auto_index ||= nil
  26. options = options.dup
  27. options[:field_name] = @method_name
  28. options[:include_position] = true
  29. options[:prefix] ||= @object_name
  30. options[:index] = @auto_index if @auto_index && !options.has_key?(:index)
  31. DateTimeSelector.new(datetime, options, html_options)
  32. end
  33. 1 def default_datetime(options)
  34. return if options[:include_blank] || options[:prompt]
  35. case options[:default]
  36. when nil
  37. Time.current
  38. when Date, Time
  39. options[:default]
  40. else
  41. default = options[:default].dup
  42. # Rename :minute and :second to :min and :sec
  43. default[:min] ||= default[:minute]
  44. default[:sec] ||= default[:second]
  45. time = Time.current
  46. [:year, :month, :day, :hour, :min, :sec].each do |key|
  47. default[key] ||= time.send(key)
  48. end
  49. Time.utc(
  50. default[:year], default[:month], default[:day],
  51. default[:hour], default[:min], default[:sec]
  52. )
  53. end
  54. end
  55. end
  56. end
  57. end
  58. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_field.rb

44.44% lines covered

18 relevant lines. 8 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class DatetimeField < TextField # :nodoc:
  6. 1 def render
  7. options = @options.stringify_keys
  8. options["value"] ||= format_date(value)
  9. options["min"] = format_date(datetime_value(options["min"]))
  10. options["max"] = format_date(datetime_value(options["max"]))
  11. @options = options
  12. super
  13. end
  14. 1 private
  15. 1 def format_date(value)
  16. raise NotImplementedError
  17. end
  18. 1 def datetime_value(value)
  19. if value.is_a? String
  20. DateTime.parse(value) rescue nil
  21. else
  22. value
  23. end
  24. end
  25. end
  26. end
  27. end
  28. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_local_field.rb

80.0% lines covered

10 relevant lines. 8 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class DatetimeLocalField < DatetimeField # :nodoc:
  6. 1 class << self
  7. 1 def field_type
  8. @field_type ||= "datetime-local"
  9. end
  10. end
  11. 1 private
  12. 1 def format_date(value)
  13. value.try(:strftime, "%Y-%m-%dT%T")
  14. end
  15. end
  16. end
  17. end
  18. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/datetime_select.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class DatetimeSelect < DateSelect # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/email_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class EmailField < TextField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/file_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class FileField < TextField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/grouped_collection_select.rb

37.5% lines covered

16 relevant lines. 6 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class GroupedCollectionSelect < Base # :nodoc:
  6. 1 def initialize(object_name, method_name, template_object, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
  7. @collection = collection
  8. @group_method = group_method
  9. @group_label_method = group_label_method
  10. @option_key_method = option_key_method
  11. @option_value_method = option_value_method
  12. @html_options = html_options
  13. super(object_name, method_name, template_object, options)
  14. end
  15. 1 def render
  16. option_tags_options = {
  17. selected: @options.fetch(:selected) { value },
  18. disabled: @options[:disabled]
  19. }
  20. select_content_tag(
  21. option_groups_from_collection_for_select(@collection, @group_method, @group_label_method, @option_key_method, @option_value_method, option_tags_options), @options, @html_options
  22. )
  23. end
  24. end
  25. end
  26. end
  27. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/hidden_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class HiddenField < TextField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/label.rb

26.67% lines covered

45 relevant lines. 12 lines covered and 33 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class Label < Base # :nodoc:
  6. 1 class LabelBuilder # :nodoc:
  7. 1 attr_reader :object
  8. 1 def initialize(template_object, object_name, method_name, object, tag_value)
  9. @template_object = template_object
  10. @object_name = object_name
  11. @method_name = method_name
  12. @object = object
  13. @tag_value = tag_value
  14. end
  15. 1 def translation
  16. method_and_value = @tag_value.present? ? "#{@method_name}.#{@tag_value}" : @method_name
  17. content ||= Translator
  18. .new(object, @object_name, method_and_value, scope: "helpers.label")
  19. .translate
  20. content ||= @method_name.humanize
  21. content
  22. end
  23. end
  24. 1 def initialize(object_name, method_name, template_object, content_or_options = nil, options = nil)
  25. options ||= {}
  26. content_is_options = content_or_options.is_a?(Hash)
  27. if content_is_options
  28. options.merge! content_or_options
  29. @content = nil
  30. else
  31. @content = content_or_options
  32. end
  33. super(object_name, method_name, template_object, options)
  34. end
  35. 1 def render(&block)
  36. options = @options.stringify_keys
  37. tag_value = options.delete("value")
  38. name_and_id = options.dup
  39. if name_and_id["for"]
  40. name_and_id["id"] = name_and_id["for"]
  41. else
  42. name_and_id.delete("id")
  43. end
  44. add_default_name_and_id_for_value(tag_value, name_and_id)
  45. options.delete("index")
  46. options.delete("namespace")
  47. options["for"] = name_and_id["id"] unless options.key?("for")
  48. builder = LabelBuilder.new(@template_object, @object_name, @method_name, @object, tag_value)
  49. content = if block_given?
  50. @template_object.capture(builder, &block)
  51. elsif @content.present?
  52. @content.to_s
  53. else
  54. render_component(builder)
  55. end
  56. label_tag(name_and_id["id"], content, options)
  57. end
  58. 1 private
  59. 1 def render_component(builder)
  60. builder.translation
  61. end
  62. end
  63. end
  64. end
  65. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/month_field.rb

85.71% lines covered

7 relevant lines. 6 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class MonthField < DatetimeField # :nodoc:
  6. 1 private
  7. 1 def format_date(value)
  8. value.try(:strftime, "%Y-%m")
  9. end
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/number_field.rb

50.0% lines covered

10 relevant lines. 5 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class NumberField < TextField # :nodoc:
  6. 1 def render
  7. options = @options.stringify_keys
  8. if range = options.delete("in") || options.delete("within")
  9. options.update("min" => range.min, "max" => range.max)
  10. end
  11. @options = options
  12. super
  13. end
  14. end
  15. end
  16. end
  17. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/password_field.rb

71.43% lines covered

7 relevant lines. 5 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class PasswordField < TextField # :nodoc:
  6. 1 def render
  7. @options = { value: nil }.merge!(@options)
  8. super
  9. end
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/placeholderable.rb

41.67% lines covered

12 relevant lines. 5 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 module Placeholderable # :nodoc:
  6. 1 def initialize(*)
  7. super
  8. if tag_value = @options[:placeholder]
  9. placeholder = tag_value if tag_value.is_a?(String)
  10. method_and_value = tag_value.is_a?(TrueClass) ? @method_name : "#{@method_name}.#{tag_value}"
  11. placeholder ||= Tags::Translator
  12. .new(object, @object_name, method_and_value, scope: "helpers.placeholder")
  13. .translate
  14. placeholder ||= @method_name.humanize
  15. @options[:placeholder] = placeholder
  16. end
  17. end
  18. end
  19. end
  20. end
  21. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/radio_button.rb

52.63% lines covered

19 relevant lines. 10 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/checkable"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class RadioButton < Base # :nodoc:
  7. 1 include Checkable
  8. 1 def initialize(object_name, method_name, template_object, tag_value, options)
  9. @tag_value = tag_value
  10. super(object_name, method_name, template_object, options)
  11. end
  12. 1 def render
  13. options = @options.stringify_keys
  14. options["type"] = "radio"
  15. options["value"] = @tag_value
  16. options["checked"] = "checked" if input_checked?(options)
  17. add_default_name_and_id_for_value(@tag_value, options)
  18. tag("input", options)
  19. end
  20. 1 private
  21. 1 def checked?(value)
  22. value.to_s == @tag_value.to_s
  23. end
  24. end
  25. end
  26. end
  27. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/range_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class RangeField < NumberField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/search_field.rb

35.71% lines covered

14 relevant lines. 5 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class SearchField < TextField # :nodoc:
  6. 1 def render
  7. options = @options.stringify_keys
  8. if options["autosave"]
  9. if options["autosave"] == true
  10. options["autosave"] = request.host.split(".").reverse.join(".")
  11. end
  12. options["results"] ||= 10
  13. end
  14. if options["onsearch"]
  15. options["incremental"] = true unless options.has_key?("incremental")
  16. end
  17. @options = options
  18. super
  19. end
  20. end
  21. end
  22. end
  23. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/select.rb

42.11% lines covered

19 relevant lines. 8 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class Select < Base # :nodoc:
  6. 1 def initialize(object_name, method_name, template_object, choices, options, html_options)
  7. @choices = block_given? ? template_object.capture { yield || "" } : choices
  8. @choices = @choices.to_a if @choices.is_a?(Range)
  9. @html_options = html_options
  10. super(object_name, method_name, template_object, options)
  11. end
  12. 1 def render
  13. option_tags_options = {
  14. selected: @options.fetch(:selected) { value },
  15. disabled: @options[:disabled]
  16. }
  17. option_tags = if grouped_choices?
  18. grouped_options_for_select(@choices, option_tags_options)
  19. else
  20. options_for_select(@choices, option_tags_options)
  21. end
  22. select_content_tag(option_tags, @options, @html_options)
  23. end
  24. 1 private
  25. # Grouped choices look like this:
  26. #
  27. # [nil, []]
  28. # { nil => [] }
  29. 1 def grouped_choices?
  30. !@choices.blank? && @choices.first.respond_to?(:last) && Array === @choices.first.last
  31. end
  32. end
  33. end
  34. end
  35. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/tel_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class TelField < TextField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_area.rb

58.33% lines covered

12 relevant lines. 7 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/placeholderable"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class TextArea < Base # :nodoc:
  7. 1 include Placeholderable
  8. 1 def render
  9. options = @options.stringify_keys
  10. add_default_name_and_id(options)
  11. if size = options.delete("size")
  12. options["cols"], options["rows"] = size.split("x") if size.respond_to?(:split)
  13. end
  14. content_tag("textarea", options.delete("value") { value_before_type_cast }, options)
  15. end
  16. end
  17. end
  18. end
  19. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/text_field.rb

57.89% lines covered

19 relevant lines. 11 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_view/helpers/tags/placeholderable"
  3. 1 module ActionView
  4. 1 module Helpers
  5. 1 module Tags # :nodoc:
  6. 1 class TextField < Base # :nodoc:
  7. 1 include Placeholderable
  8. 1 def render
  9. options = @options.stringify_keys
  10. options["size"] = options["maxlength"] unless options.key?("size")
  11. options["type"] ||= field_type
  12. options["value"] = options.fetch("value") { value_before_type_cast } unless field_type == "file"
  13. add_default_name_and_id(options)
  14. tag("input", options)
  15. end
  16. 1 class << self
  17. 1 def field_type
  18. @field_type ||= name.split("::").last.sub("Field", "").downcase
  19. end
  20. end
  21. 1 private
  22. 1 def field_type
  23. self.class.field_type
  24. end
  25. end
  26. end
  27. end
  28. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_field.rb

85.71% lines covered

7 relevant lines. 6 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class TimeField < DatetimeField # :nodoc:
  6. 1 private
  7. 1 def format_date(value)
  8. value.try(:strftime, "%T.%L")
  9. end
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_select.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class TimeSelect < DateSelect # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/time_zone_select.rb

60.0% lines covered

10 relevant lines. 6 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class TimeZoneSelect < Base # :nodoc:
  6. 1 def initialize(object_name, method_name, template_object, priority_zones, options, html_options)
  7. @priority_zones = priority_zones
  8. @html_options = html_options
  9. super(object_name, method_name, template_object, options)
  10. end
  11. 1 def render
  12. select_content_tag(
  13. time_zone_options_for_select(value || @options[:default], @priority_zones, @options[:model] || ActiveSupport::TimeZone), @options, @html_options
  14. )
  15. end
  16. end
  17. end
  18. end
  19. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/translator.rb

47.83% lines covered

23 relevant lines. 11 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class Translator # :nodoc:
  6. 1 def initialize(object, object_name, method_and_value, scope:)
  7. @object_name = object_name.gsub(/\[(.*)_attributes\]\[\d+\]/, '.\1')
  8. @method_and_value = method_and_value
  9. @scope = scope
  10. @model = object.respond_to?(:to_model) ? object.to_model : nil
  11. end
  12. 1 def translate
  13. translated_attribute = I18n.t("#{object_name}.#{method_and_value}", default: i18n_default, scope: scope).presence
  14. translated_attribute || human_attribute_name
  15. end
  16. # TODO Change this to private once we've dropped Ruby 2.2 support.
  17. # Workaround for Ruby 2.2 "private attribute?" warning.
  18. 1 protected
  19. 1 attr_reader :object_name, :method_and_value, :scope, :model
  20. 1 private
  21. 1 def i18n_default
  22. if model
  23. key = model.model_name.i18n_key
  24. ["#{key}.#{method_and_value}".to_sym, ""]
  25. else
  26. ""
  27. end
  28. end
  29. 1 def human_attribute_name
  30. if model && model.class.respond_to?(:human_attribute_name)
  31. model.class.human_attribute_name(method_and_value)
  32. end
  33. end
  34. end
  35. end
  36. end
  37. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/url_field.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class UrlField < TextField # :nodoc:
  6. end
  7. end
  8. end
  9. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/helpers/tags/week_field.rb

85.71% lines covered

7 relevant lines. 6 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module Helpers
  4. 1 module Tags # :nodoc:
  5. 1 class WeekField < DatetimeField # :nodoc:
  6. 1 private
  7. 1 def format_date(value)
  8. value.try(:strftime, "%Y-W%V")
  9. end
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/abstract_renderer.rb

45.0% lines covered

20 relevant lines. 9 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. # This class defines the interface for a renderer. Each class that
  4. # subclasses +AbstractRenderer+ is used by the base +Renderer+ class to
  5. # render a specific type of object.
  6. #
  7. # The base +Renderer+ class uses its +render+ method to delegate to the
  8. # renderers. These currently consist of
  9. #
  10. # PartialRenderer - Used for rendering partials
  11. # TemplateRenderer - Used for rendering other types of templates
  12. # StreamingTemplateRenderer - Used for streaming
  13. #
  14. # Whenever the +render+ method is called on the base +Renderer+ class, a new
  15. # renderer object of the correct type is created, and the +render+ method on
  16. # that new object is called in turn. This abstracts the setup and rendering
  17. # into a separate classes for partials and templates.
  18. 1 class AbstractRenderer #:nodoc:
  19. 1 delegate :find_template, :find_file, :template_exists?, :any_templates?, :with_fallbacks, :with_layout_format, :formats, to: :@lookup_context
  20. 1 def initialize(lookup_context)
  21. @lookup_context = lookup_context
  22. end
  23. 1 def render
  24. raise NotImplementedError
  25. end
  26. 1 private
  27. 1 def extract_details(options) # :doc:
  28. @lookup_context.registered_details.each_with_object({}) do |key, details|
  29. value = options[key]
  30. details[key] = Array(value) if value
  31. end
  32. end
  33. 1 def instrument(name, **options) # :doc:
  34. options[:identifier] ||= (@template && @template.identifier) || @path
  35. ActiveSupport::Notifications.instrument("render_#{name}.action_view", options) do |payload|
  36. yield payload
  37. end
  38. end
  39. 1 def prepend_formats(formats) # :doc:
  40. formats = Array(formats)
  41. return if formats.empty? || @lookup_context.html_fallback_for_js
  42. @lookup_context.formats = formats | @lookup_context.formats
  43. end
  44. end
  45. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer.rb

20.86% lines covered

163 relevant lines. 34 lines covered and 129 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "concurrent/map"
  3. 1 require "action_view/renderer/partial_renderer/collection_caching"
  4. 1 module ActionView
  5. 1 class PartialIteration
  6. # The number of iterations that will be done by the partial.
  7. 1 attr_reader :size
  8. # The current iteration of the partial.
  9. 1 attr_reader :index
  10. 1 def initialize(size)
  11. @size = size
  12. @index = 0
  13. end
  14. # Check if this is the first iteration of the partial.
  15. 1 def first?
  16. index == 0
  17. end
  18. # Check if this is the last iteration of the partial.
  19. 1 def last?
  20. index == size - 1
  21. end
  22. 1 def iterate! # :nodoc:
  23. @index += 1
  24. end
  25. end
  26. # = Action View Partials
  27. #
  28. # There's also a convenience method for rendering sub templates within the current controller that depends on a
  29. # single object (we call this kind of sub templates for partials). It relies on the fact that partials should
  30. # follow the naming convention of being prefixed with an underscore -- as to separate them from regular
  31. # templates that could be rendered on their own.
  32. #
  33. # In a template for Advertiser#account:
  34. #
  35. # <%= render partial: "account" %>
  36. #
  37. # This would render "advertiser/_account.html.erb".
  38. #
  39. # In another template for Advertiser#buy, we could have:
  40. #
  41. # <%= render partial: "account", locals: { account: @buyer } %>
  42. #
  43. # <% @advertisements.each do |ad| %>
  44. # <%= render partial: "ad", locals: { ad: ad } %>
  45. # <% end %>
  46. #
  47. # This would first render <tt>advertiser/_account.html.erb</tt> with <tt>@buyer</tt> passed in as the local variable +account+, then
  48. # render <tt>advertiser/_ad.html.erb</tt> and pass the local variable +ad+ to the template for display.
  49. #
  50. # == The :as and :object options
  51. #
  52. # By default ActionView::PartialRenderer doesn't have any local variables.
  53. # The <tt>:object</tt> option can be used to pass an object to the partial. For instance:
  54. #
  55. # <%= render partial: "account", object: @buyer %>
  56. #
  57. # would provide the <tt>@buyer</tt> object to the partial, available under the local variable +account+ and is
  58. # equivalent to:
  59. #
  60. # <%= render partial: "account", locals: { account: @buyer } %>
  61. #
  62. # With the <tt>:as</tt> option we can specify a different name for said local variable. For example, if we
  63. # wanted it to be +user+ instead of +account+ we'd do:
  64. #
  65. # <%= render partial: "account", object: @buyer, as: 'user' %>
  66. #
  67. # This is equivalent to
  68. #
  69. # <%= render partial: "account", locals: { user: @buyer } %>
  70. #
  71. # == \Rendering a collection of partials
  72. #
  73. # The example of partial use describes a familiar pattern where a template needs to iterate over an array and
  74. # render a sub template for each of the elements. This pattern has been implemented as a single method that
  75. # accepts an array and renders a partial by the same name as the elements contained within. So the three-lined
  76. # example in "Using partials" can be rewritten with a single line:
  77. #
  78. # <%= render partial: "ad", collection: @advertisements %>
  79. #
  80. # This will render <tt>advertiser/_ad.html.erb</tt> and pass the local variable +ad+ to the template for display. An
  81. # iteration object will automatically be made available to the template with a name of the form
  82. # +partial_name_iteration+. The iteration object has knowledge about which index the current object has in
  83. # the collection and the total size of the collection. The iteration object also has two convenience methods,
  84. # +first?+ and +last?+. In the case of the example above, the template would be fed +ad_iteration+.
  85. # For backwards compatibility the +partial_name_counter+ is still present and is mapped to the iteration's
  86. # +index+ method.
  87. #
  88. # The <tt>:as</tt> option may be used when rendering partials.
  89. #
  90. # You can specify a partial to be rendered between elements via the <tt>:spacer_template</tt> option.
  91. # The following example will render <tt>advertiser/_ad_divider.html.erb</tt> between each ad partial:
  92. #
  93. # <%= render partial: "ad", collection: @advertisements, spacer_template: "ad_divider" %>
  94. #
  95. # If the given <tt>:collection</tt> is +nil+ or empty, <tt>render</tt> will return +nil+. This will allow you
  96. # to specify a text which will be displayed instead by using this form:
  97. #
  98. # <%= render(partial: "ad", collection: @advertisements) || "There's no ad to be displayed" %>
  99. #
  100. # NOTE: Due to backwards compatibility concerns, the collection can't be one of hashes. Normally you'd also
  101. # just keep domain objects, like Active Records, in there.
  102. #
  103. # == \Rendering shared partials
  104. #
  105. # Two controllers can share a set of partials and render them like this:
  106. #
  107. # <%= render partial: "advertisement/ad", locals: { ad: @advertisement } %>
  108. #
  109. # This will render the partial <tt>advertisement/_ad.html.erb</tt> regardless of which controller this is being called from.
  110. #
  111. # == \Rendering objects that respond to +to_partial_path+
  112. #
  113. # Instead of explicitly naming the location of a partial, you can also let PartialRenderer do the work
  114. # and pick the proper path by checking +to_partial_path+ method.
  115. #
  116. # # @account.to_partial_path returns 'accounts/account', so it can be used to replace:
  117. # # <%= render partial: "accounts/account", locals: { account: @account} %>
  118. # <%= render partial: @account %>
  119. #
  120. # # @posts is an array of Post instances, so every post record returns 'posts/post' on +to_partial_path+,
  121. # # that's why we can replace:
  122. # # <%= render partial: "posts/post", collection: @posts %>
  123. # <%= render partial: @posts %>
  124. #
  125. # == \Rendering the default case
  126. #
  127. # If you're not going to be using any of the options like collections or layouts, you can also use the short-hand
  128. # defaults of render to render partials. Examples:
  129. #
  130. # # Instead of <%= render partial: "account" %>
  131. # <%= render "account" %>
  132. #
  133. # # Instead of <%= render partial: "account", locals: { account: @buyer } %>
  134. # <%= render "account", account: @buyer %>
  135. #
  136. # # @account.to_partial_path returns 'accounts/account', so it can be used to replace:
  137. # # <%= render partial: "accounts/account", locals: { account: @account} %>
  138. # <%= render @account %>
  139. #
  140. # # @posts is an array of Post instances, so every post record returns 'posts/post' on +to_partial_path+,
  141. # # that's why we can replace:
  142. # # <%= render partial: "posts/post", collection: @posts %>
  143. # <%= render @posts %>
  144. #
  145. # == \Rendering partials with layouts
  146. #
  147. # Partials can have their own layouts applied to them. These layouts are different than the ones that are
  148. # specified globally for the entire action, but they work in a similar fashion. Imagine a list with two types
  149. # of users:
  150. #
  151. # <%# app/views/users/index.html.erb %>
  152. # Here's the administrator:
  153. # <%= render partial: "user", layout: "administrator", locals: { user: administrator } %>
  154. #
  155. # Here's the editor:
  156. # <%= render partial: "user", layout: "editor", locals: { user: editor } %>
  157. #
  158. # <%# app/views/users/_user.html.erb %>
  159. # Name: <%= user.name %>
  160. #
  161. # <%# app/views/users/_administrator.html.erb %>
  162. # <div id="administrator">
  163. # Budget: $<%= user.budget %>
  164. # <%= yield %>
  165. # </div>
  166. #
  167. # <%# app/views/users/_editor.html.erb %>
  168. # <div id="editor">
  169. # Deadline: <%= user.deadline %>
  170. # <%= yield %>
  171. # </div>
  172. #
  173. # ...this will return:
  174. #
  175. # Here's the administrator:
  176. # <div id="administrator">
  177. # Budget: $<%= user.budget %>
  178. # Name: <%= user.name %>
  179. # </div>
  180. #
  181. # Here's the editor:
  182. # <div id="editor">
  183. # Deadline: <%= user.deadline %>
  184. # Name: <%= user.name %>
  185. # </div>
  186. #
  187. # If a collection is given, the layout will be rendered once for each item in
  188. # the collection. For example, these two snippets have the same output:
  189. #
  190. # <%# app/views/users/_user.html.erb %>
  191. # Name: <%= user.name %>
  192. #
  193. # <%# app/views/users/index.html.erb %>
  194. # <%# This does not use layouts %>
  195. # <ul>
  196. # <% users.each do |user| -%>
  197. # <li>
  198. # <%= render partial: "user", locals: { user: user } %>
  199. # </li>
  200. # <% end -%>
  201. # </ul>
  202. #
  203. # <%# app/views/users/_li_layout.html.erb %>
  204. # <li>
  205. # <%= yield %>
  206. # </li>
  207. #
  208. # <%# app/views/users/index.html.erb %>
  209. # <ul>
  210. # <%= render partial: "user", layout: "li_layout", collection: users %>
  211. # </ul>
  212. #
  213. # Given two users whose names are Alice and Bob, these snippets return:
  214. #
  215. # <ul>
  216. # <li>
  217. # Name: Alice
  218. # </li>
  219. # <li>
  220. # Name: Bob
  221. # </li>
  222. # </ul>
  223. #
  224. # The current object being rendered, as well as the object_counter, will be
  225. # available as local variables inside the layout template under the same names
  226. # as available in the partial.
  227. #
  228. # You can also apply a layout to a block within any template:
  229. #
  230. # <%# app/views/users/_chief.html.erb %>
  231. # <%= render(layout: "administrator", locals: { user: chief }) do %>
  232. # Title: <%= chief.title %>
  233. # <% end %>
  234. #
  235. # ...this will return:
  236. #
  237. # <div id="administrator">
  238. # Budget: $<%= user.budget %>
  239. # Title: <%= chief.name %>
  240. # </div>
  241. #
  242. # As you can see, the <tt>:locals</tt> hash is shared between both the partial and its layout.
  243. #
  244. # If you pass arguments to "yield" then this will be passed to the block. One way to use this is to pass
  245. # an array to layout and treat it as an enumerable.
  246. #
  247. # <%# app/views/users/_user.html.erb %>
  248. # <div class="user">
  249. # Budget: $<%= user.budget %>
  250. # <%= yield user %>
  251. # </div>
  252. #
  253. # <%# app/views/users/index.html.erb %>
  254. # <%= render layout: @users do |user| %>
  255. # Title: <%= user.title %>
  256. # <% end %>
  257. #
  258. # This will render the layout for each user and yield to the block, passing the user, each time.
  259. #
  260. # You can also yield multiple times in one layout and use block arguments to differentiate the sections.
  261. #
  262. # <%# app/views/users/_user.html.erb %>
  263. # <div class="user">
  264. # <%= yield user, :header %>
  265. # Budget: $<%= user.budget %>
  266. # <%= yield user, :footer %>
  267. # </div>
  268. #
  269. # <%# app/views/users/index.html.erb %>
  270. # <%= render layout: @users do |user, section| %>
  271. # <%- case section when :header -%>
  272. # Title: <%= user.title %>
  273. # <%- when :footer -%>
  274. # Deadline: <%= user.deadline %>
  275. # <%- end -%>
  276. # <% end %>
  277. 1 class PartialRenderer < AbstractRenderer
  278. 1 include CollectionCaching
  279. 1 PREFIXED_PARTIAL_NAMES = Concurrent::Map.new do |h, k|
  280. h[k] = Concurrent::Map.new
  281. end
  282. 1 def initialize(*)
  283. super
  284. @context_prefix = @lookup_context.prefixes.first
  285. end
  286. 1 def render(context, options, block)
  287. setup(context, options, block)
  288. @template = find_partial
  289. @lookup_context.rendered_format ||= begin
  290. if @template && @template.formats.present?
  291. @template.formats.first
  292. else
  293. formats.first
  294. end
  295. end
  296. if @collection
  297. render_collection
  298. else
  299. render_partial
  300. end
  301. end
  302. 1 private
  303. 1 def render_collection
  304. instrument(:collection, count: @collection.size) do |payload|
  305. return nil if @collection.blank?
  306. if @options.key?(:spacer_template)
  307. spacer = find_template(@options[:spacer_template], @locals.keys).render(@view, @locals)
  308. end
  309. cache_collection_render(payload) do
  310. @template ? collection_with_template : collection_without_template
  311. end.join(spacer).html_safe
  312. end
  313. end
  314. 1 def render_partial
  315. instrument(:partial) do |payload|
  316. view, locals, block = @view, @locals, @block
  317. object, as = @object, @variable
  318. if !block && (layout = @options[:layout])
  319. layout = find_template(layout.to_s, @template_keys)
  320. end
  321. object = locals[as] if object.nil? # Respect object when object is false
  322. locals[as] = object if @has_object
  323. content = @template.render(view, locals) do |*name|
  324. view._layout_for(*name, &block)
  325. end
  326. content = layout.render(view, locals) { content } if layout
  327. payload[:cache_hit] = view.view_renderer.cache_hits[@template.virtual_path]
  328. content
  329. end
  330. end
  331. # Sets up instance variables needed for rendering a partial. This method
  332. # finds the options and details and extracts them. The method also contains
  333. # logic that handles the type of object passed in as the partial.
  334. #
  335. # If +options[:partial]+ is a string, then the <tt>@path</tt> instance variable is
  336. # set to that string. Otherwise, the +options[:partial]+ object must
  337. # respond to +to_partial_path+ in order to setup the path.
  338. 1 def setup(context, options, block)
  339. @view = context
  340. @options = options
  341. @block = block
  342. @locals = options[:locals] || {}
  343. @details = extract_details(options)
  344. prepend_formats(options[:formats])
  345. partial = options[:partial]
  346. if String === partial
  347. @has_object = options.key?(:object)
  348. @object = options[:object]
  349. @collection = collection_from_options
  350. @path = partial
  351. else
  352. @has_object = true
  353. @object = partial
  354. @collection = collection_from_object || collection_from_options
  355. if @collection
  356. paths = @collection_data = @collection.map { |o| partial_path(o) }
  357. @path = paths.uniq.one? ? paths.first : nil
  358. else
  359. @path = partial_path
  360. end
  361. end
  362. if as = options[:as]
  363. raise_invalid_option_as(as) unless /\A[a-z_]\w*\z/.match?(as.to_s)
  364. as = as.to_sym
  365. end
  366. if @path
  367. @variable, @variable_counter, @variable_iteration = retrieve_variable(@path, as)
  368. @template_keys = retrieve_template_keys
  369. else
  370. paths.map! { |path| retrieve_variable(path, as).unshift(path) }
  371. end
  372. self
  373. end
  374. 1 def collection_from_options
  375. if @options.key?(:collection)
  376. collection = @options[:collection]
  377. collection ? collection.to_a : []
  378. end
  379. end
  380. 1 def collection_from_object
  381. @object.to_ary if @object.respond_to?(:to_ary)
  382. end
  383. 1 def find_partial
  384. find_template(@path, @template_keys) if @path
  385. end
  386. 1 def find_template(path, locals)
  387. prefixes = path.include?(?/) ? [] : @lookup_context.prefixes
  388. @lookup_context.find_template(path, prefixes, true, locals, @details)
  389. end
  390. 1 def collection_with_template
  391. view, locals, template = @view, @locals, @template
  392. as, counter, iteration = @variable, @variable_counter, @variable_iteration
  393. if layout = @options[:layout]
  394. layout = find_template(layout, @template_keys)
  395. end
  396. partial_iteration = PartialIteration.new(@collection.size)
  397. locals[iteration] = partial_iteration
  398. @collection.map do |object|
  399. locals[as] = object
  400. locals[counter] = partial_iteration.index
  401. content = template.render(view, locals)
  402. content = layout.render(view, locals) { content } if layout
  403. partial_iteration.iterate!
  404. content
  405. end
  406. end
  407. 1 def collection_without_template
  408. view, locals, collection_data = @view, @locals, @collection_data
  409. cache = {}
  410. keys = @locals.keys
  411. partial_iteration = PartialIteration.new(@collection.size)
  412. @collection.map do |object|
  413. index = partial_iteration.index
  414. path, as, counter, iteration = collection_data[index]
  415. locals[as] = object
  416. locals[counter] = index
  417. locals[iteration] = partial_iteration
  418. template = (cache[path] ||= find_template(path, keys + [as, counter, iteration]))
  419. content = template.render(view, locals)
  420. partial_iteration.iterate!
  421. content
  422. end
  423. end
  424. # Obtains the path to where the object's partial is located. If the object
  425. # responds to +to_partial_path+, then +to_partial_path+ will be called and
  426. # will provide the path. If the object does not respond to +to_partial_path+,
  427. # then an +ArgumentError+ is raised.
  428. #
  429. # If +prefix_partial_path_with_controller_namespace+ is true, then this
  430. # method will prefix the partial paths with a namespace.
  431. 1 def partial_path(object = @object)
  432. object = object.to_model if object.respond_to?(:to_model)
  433. path = if object.respond_to?(:to_partial_path)
  434. object.to_partial_path
  435. else
  436. raise ArgumentError.new("'#{object.inspect}' is not an ActiveModel-compatible object. It must implement :to_partial_path.")
  437. end
  438. if @view.prefix_partial_path_with_controller_namespace
  439. prefixed_partial_names[path] ||= merge_prefix_into_object_path(@context_prefix, path.dup)
  440. else
  441. path
  442. end
  443. end
  444. 1 def prefixed_partial_names
  445. @prefixed_partial_names ||= PREFIXED_PARTIAL_NAMES[@context_prefix]
  446. end
  447. 1 def merge_prefix_into_object_path(prefix, object_path)
  448. if prefix.include?(?/) && object_path.include?(?/)
  449. prefixes = []
  450. prefix_array = File.dirname(prefix).split("/")
  451. object_path_array = object_path.split("/")[0..-3] # skip model dir & partial
  452. prefix_array.each_with_index do |dir, index|
  453. break if dir == object_path_array[index]
  454. prefixes << dir
  455. end
  456. (prefixes << object_path).join("/")
  457. else
  458. object_path
  459. end
  460. end
  461. 1 def retrieve_template_keys
  462. keys = @locals.keys
  463. keys << @variable if @has_object || @collection
  464. if @collection
  465. keys << @variable_counter
  466. keys << @variable_iteration
  467. end
  468. keys
  469. end
  470. 1 def retrieve_variable(path, as)
  471. variable = as || begin
  472. base = path[-1] == "/".freeze ? "".freeze : File.basename(path)
  473. raise_invalid_identifier(path) unless base =~ /\A_?(.*?)(?:\.\w+)*\z/
  474. $1.to_sym
  475. end
  476. if @collection
  477. variable_counter = :"#{variable}_counter"
  478. variable_iteration = :"#{variable}_iteration"
  479. end
  480. [variable, variable_counter, variable_iteration]
  481. end
  482. 1 IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) is not a valid Ruby identifier; " \
  483. "make sure your partial name starts with underscore."
  484. 1 OPTION_AS_ERROR_MESSAGE = "The value (%s) of the option `as` is not a valid Ruby identifier; " \
  485. "make sure it starts with lowercase letter, " \
  486. "and is followed by any combination of letters, numbers and underscores."
  487. 1 def raise_invalid_identifier(path)
  488. raise ArgumentError.new(IDENTIFIER_ERROR_MESSAGE % (path))
  489. end
  490. 1 def raise_invalid_option_as(as)
  491. raise ArgumentError.new(OPTION_AS_ERROR_MESSAGE % (as))
  492. end
  493. end
  494. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/partial_renderer/collection_caching.rb

36.67% lines covered

30 relevant lines. 11 lines covered and 19 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. 1 module CollectionCaching # :nodoc:
  4. 1 extend ActiveSupport::Concern
  5. 1 included do
  6. # Fallback cache store if Action View is used without Rails.
  7. # Otherwise overridden in Railtie to use Rails.cache.
  8. 1 mattr_accessor :collection_cache, default: ActiveSupport::Cache::MemoryStore.new
  9. end
  10. 1 private
  11. 1 def cache_collection_render(instrumentation_payload)
  12. return yield unless @options[:cached]
  13. keyed_collection = collection_by_cache_keys
  14. cached_partials = collection_cache.read_multi(*keyed_collection.keys)
  15. instrumentation_payload[:cache_hits] = cached_partials.size
  16. @collection = keyed_collection.reject { |key, _| cached_partials.key?(key) }.values
  17. rendered_partials = @collection.empty? ? [] : yield
  18. index = 0
  19. fetch_or_cache_partial(cached_partials, order_by: keyed_collection.each_key) do
  20. rendered_partials[index].tap { index += 1 }
  21. end
  22. end
  23. 1 def callable_cache_key?
  24. @options[:cached].respond_to?(:call)
  25. end
  26. 1 def collection_by_cache_keys
  27. seed = callable_cache_key? ? @options[:cached] : ->(i) { i }
  28. @collection.each_with_object({}) do |item, hash|
  29. hash[expanded_cache_key(seed.call(item))] = item
  30. end
  31. end
  32. 1 def expanded_cache_key(key)
  33. key = @view.combined_fragment_cache_key(@view.cache_fragment_name(key, virtual_path: @template.virtual_path))
  34. key.frozen? ? key.dup : key # #read_multi & #write may require mutability, Dalli 2.6.0.
  35. end
  36. 1 def fetch_or_cache_partial(cached_partials, order_by:)
  37. order_by.map do |cache_key|
  38. cached_partials.fetch(cache_key) do
  39. yield.tap do |rendered_partial|
  40. collection_cache.write(cache_key, rendered_partial)
  41. end
  42. end
  43. end
  44. end
  45. end
  46. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/renderer.rb

47.37% lines covered

19 relevant lines. 9 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView
  3. # This is the main entry point for rendering. It basically delegates
  4. # to other objects like TemplateRenderer and PartialRenderer which
  5. # actually renders the template.
  6. #
  7. # The Renderer will parse the options from the +render+ or +render_body+
  8. # method and render a partial or a template based on the options. The
  9. # +TemplateRenderer+ and +PartialRenderer+ objects are wrappers which do all
  10. # the setup and logic necessary to render a view and a new object is created
  11. # each time +render+ is called.
  12. 1 class Renderer
  13. 1 attr_accessor :lookup_context
  14. 1 def initialize(lookup_context)
  15. @lookup_context = lookup_context
  16. end
  17. # Main render entry point shared by Action View and Action Controller.
  18. 1 def render(context, options)
  19. if options.key?(:partial)
  20. render_partial(context, options)
  21. else
  22. render_template(context, options)
  23. end
  24. end
  25. # Render but returns a valid Rack body. If fibers are defined, we return
  26. # a streaming body that renders the template piece by piece.
  27. #
  28. # Note that partials are not supported to be rendered with streaming,
  29. # so in such cases, we just wrap them in an array.
  30. 1 def render_body(context, options)
  31. if options.key?(:partial)
  32. [render_partial(context, options)]
  33. else
  34. StreamingTemplateRenderer.new(@lookup_context).render(context, options)
  35. end
  36. end
  37. # Direct access to template rendering.
  38. 1 def render_template(context, options) #:nodoc:
  39. TemplateRenderer.new(@lookup_context).render(context, options)
  40. end
  41. # Direct access to partial rendering.
  42. 1 def render_partial(context, options, &block) #:nodoc:
  43. PartialRenderer.new(@lookup_context).render(context, options, block)
  44. end
  45. 1 def cache_hits # :nodoc:
  46. @cache_hits ||= {}
  47. end
  48. end
  49. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/streaming_template_renderer.rb

25.58% lines covered

43 relevant lines. 11 lines covered and 32 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "fiber"
  3. 1 module ActionView
  4. # == TODO
  5. #
  6. # * Support streaming from child templates, partials and so on.
  7. # * Rack::Cache needs to support streaming bodies
  8. 1 class StreamingTemplateRenderer < TemplateRenderer #:nodoc:
  9. # A valid Rack::Body (i.e. it responds to each).
  10. # It is initialized with a block that, when called, starts
  11. # rendering the template.
  12. 1 class Body #:nodoc:
  13. 1 def initialize(&start)
  14. @start = start
  15. end
  16. 1 def each(&block)
  17. begin
  18. @start.call(block)
  19. rescue Exception => exception
  20. log_error(exception)
  21. block.call ActionView::Base.streaming_completion_on_exception
  22. end
  23. self
  24. end
  25. 1 private
  26. # This is the same logging logic as in ShowExceptions middleware.
  27. 1 def log_error(exception)
  28. logger = ActionView::Base.logger
  29. return unless logger
  30. message = "\n#{exception.class} (#{exception.message}):\n".dup
  31. message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code)
  32. message << " " << exception.backtrace.join("\n ")
  33. logger.fatal("#{message}\n\n")
  34. end
  35. end
  36. # For streaming, instead of rendering a given a template, we return a Body
  37. # object that responds to each. This object is initialized with a block
  38. # that knows how to render the template.
  39. 1 def render_template(template, layout_name = nil, locals = {}) #:nodoc:
  40. return [super] unless layout_name && template.supports_streaming?
  41. locals ||= {}
  42. layout = layout_name && find_layout(layout_name, locals.keys, [formats.first])
  43. Body.new do |buffer|
  44. delayed_render(buffer, template, layout, @view, locals)
  45. end
  46. end
  47. 1 private
  48. 1 def delayed_render(buffer, template, layout, view, locals)
  49. # Wrap the given buffer in the StreamingBuffer and pass it to the
  50. # underlying template handler. Now, every time something is concatenated
  51. # to the buffer, it is not appended to an array, but streamed straight
  52. # to the client.
  53. output = ActionView::StreamingBuffer.new(buffer)
  54. yielder = lambda { |*name| view._layout_for(*name) }
  55. instrument(:template, identifier: template.identifier, layout: layout.try(:virtual_path)) do
  56. outer_config = I18n.config
  57. fiber = Fiber.new do
  58. I18n.config = outer_config
  59. if layout
  60. layout.render(view, locals, output, &yielder)
  61. else
  62. # If you don't have a layout, just render the thing
  63. # and concatenate the final result. This is the same
  64. # as a layout with just <%= yield %>
  65. output.safe_concat view._layout_for
  66. end
  67. end
  68. # Set the view flow to support streaming. It will be aware
  69. # when to stop rendering the layout because it needs to search
  70. # something in the template and vice-versa.
  71. view.view_flow = StreamingFlow.new(view, fiber)
  72. # Yo! Start the fiber!
  73. fiber.resume
  74. # If the fiber is still alive, it means we need something
  75. # from the template, so start rendering it. If not, it means
  76. # the layout exited without requiring anything from the template.
  77. if fiber.alive?
  78. content = template.render(view, locals, &yielder)
  79. # Once rendering the template is done, sets its content in the :layout key.
  80. view.view_flow.set(:layout, content)
  81. # In case the layout continues yielding, we need to resume
  82. # the fiber until all yields are handled.
  83. fiber.resume while fiber.alive?
  84. end
  85. end
  86. end
  87. end
  88. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/renderer/template_renderer.rb

19.61% lines covered

51 relevant lines. 10 lines covered and 41 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/object/try"
  3. 1 module ActionView
  4. 1 class TemplateRenderer < AbstractRenderer #:nodoc:
  5. 1 def render(context, options)
  6. @view = context
  7. @details = extract_details(options)
  8. template = determine_template(options)
  9. prepend_formats(template.formats)
  10. @lookup_context.rendered_format ||= (template.formats.first || formats.first)
  11. render_template(template, options[:layout], options[:locals])
  12. end
  13. 1 private
  14. # Determine the template to be rendered using the given options.
  15. 1 def determine_template(options)
  16. keys = options.has_key?(:locals) ? options[:locals].keys : []
  17. if options.key?(:body)
  18. Template::Text.new(options[:body])
  19. elsif options.key?(:plain)
  20. Template::Text.new(options[:plain])
  21. elsif options.key?(:html)
  22. Template::HTML.new(options[:html], formats.first)
  23. elsif options.key?(:file)
  24. with_fallbacks { find_file(options[:file], nil, false, keys, @details) }
  25. elsif options.key?(:inline)
  26. handler = Template.handler_for_extension(options[:type] || "erb")
  27. Template.new(options[:inline], "inline template", handler, locals: keys)
  28. elsif options.key?(:template)
  29. if options[:template].respond_to?(:render)
  30. options[:template]
  31. else
  32. find_template(options[:template], options[:prefixes], false, keys, @details)
  33. end
  34. else
  35. raise ArgumentError, "You invoked render but did not give any of :partial, :template, :inline, :file, :plain, :html or :body option."
  36. end
  37. end
  38. # Renders the given template. A string representing the layout can be
  39. # supplied as well.
  40. 1 def render_template(template, layout_name = nil, locals = nil)
  41. view, locals = @view, locals || {}
  42. render_with_layout(layout_name, locals) do |layout|
  43. instrument(:template, identifier: template.identifier, layout: layout.try(:virtual_path)) do
  44. template.render(view, locals) { |*name| view._layout_for(*name) }
  45. end
  46. end
  47. end
  48. 1 def render_with_layout(path, locals)
  49. layout = path && find_layout(path, locals.keys, [formats.first])
  50. content = yield(layout)
  51. if layout
  52. view = @view
  53. view.view_flow.set(:layout, content)
  54. layout.render(view, locals) { |*name| view._layout_for(*name) }
  55. else
  56. content
  57. end
  58. end
  59. # This is the method which actually finds the layout using details in the lookup
  60. # context object. If no layout is found, it checks if at least a layout with
  61. # the given name exists across all details before raising the error.
  62. 1 def find_layout(layout, keys, formats)
  63. resolve_layout(layout, keys, formats)
  64. end
  65. 1 def resolve_layout(layout, keys, formats)
  66. details = @details.dup
  67. details[:formats] = formats
  68. case layout
  69. when String
  70. begin
  71. if layout.start_with?("/")
  72. with_fallbacks { find_template(layout, nil, false, [], details) }
  73. else
  74. find_template(layout, nil, false, [], details)
  75. end
  76. rescue ActionView::MissingTemplate
  77. all_details = @details.merge(formats: @lookup_context.default_formats)
  78. raise unless template_exists?(layout, nil, false, [], all_details)
  79. end
  80. when Proc
  81. resolve_layout(layout.call(formats), keys, formats)
  82. else
  83. layout
  84. end
  85. end
  86. end
  87. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/routing_url_for.rb

27.03% lines covered

37 relevant lines. 10 lines covered and 27 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch/routing/polymorphic_routes"
  3. 1 module ActionView
  4. 1 module RoutingUrlFor
  5. # Returns the URL for the set of +options+ provided. This takes the
  6. # same options as +url_for+ in Action Controller (see the
  7. # documentation for <tt>ActionController::Base#url_for</tt>). Note that by default
  8. # <tt>:only_path</tt> is <tt>true</tt> so you'll get the relative "/controller/action"
  9. # instead of the fully qualified URL like "http://example.com/controller/action".
  10. #
  11. # ==== Options
  12. # * <tt>:anchor</tt> - Specifies the anchor name to be appended to the path.
  13. # * <tt>:only_path</tt> - If true, returns the relative URL (omitting the protocol, host name, and port) (<tt>true</tt> by default unless <tt>:host</tt> is specified).
  14. # * <tt>:trailing_slash</tt> - If true, adds a trailing slash, as in "/archive/2005/". Note that this
  15. # is currently not recommended since it breaks caching.
  16. # * <tt>:host</tt> - Overrides the default (current) host if provided.
  17. # * <tt>:protocol</tt> - Overrides the default (current) protocol if provided.
  18. # * <tt>:user</tt> - Inline HTTP authentication (only plucked out if <tt>:password</tt> is also present).
  19. # * <tt>:password</tt> - Inline HTTP authentication (only plucked out if <tt>:user</tt> is also present).
  20. #
  21. # ==== Relying on named routes
  22. #
  23. # Passing a record (like an Active Record) instead of a hash as the options parameter will
  24. # trigger the named route for that record. The lookup will happen on the name of the class. So passing a
  25. # Workshop object will attempt to use the +workshop_path+ route. If you have a nested route, such as
  26. # +admin_workshop_path+ you'll have to call that explicitly (it's impossible for +url_for+ to guess that route).
  27. #
  28. # ==== Implicit Controller Namespacing
  29. #
  30. # Controllers passed in using the +:controller+ option will retain their namespace unless it is an absolute one.
  31. #
  32. # ==== Examples
  33. # <%= url_for(action: 'index') %>
  34. # # => /blogs/
  35. #
  36. # <%= url_for(action: 'find', controller: 'books') %>
  37. # # => /books/find
  38. #
  39. # <%= url_for(action: 'login', controller: 'members', only_path: false, protocol: 'https') %>
  40. # # => https://www.example.com/members/login/
  41. #
  42. # <%= url_for(action: 'play', anchor: 'player') %>
  43. # # => /messages/play/#player
  44. #
  45. # <%= url_for(action: 'jump', anchor: 'tax&ship') %>
  46. # # => /testing/jump/#tax&ship
  47. #
  48. # <%= url_for(Workshop.new) %>
  49. # # relies on Workshop answering a persisted? call (and in this case returning false)
  50. # # => /workshops
  51. #
  52. # <%= url_for(@workshop) %>
  53. # # calls @workshop.to_param which by default returns the id
  54. # # => /workshops/5
  55. #
  56. # # to_param can be re-defined in a model to provide different URL names:
  57. # # => /workshops/1-workshop-name
  58. #
  59. # <%= url_for("http://www.example.com") %>
  60. # # => http://www.example.com
  61. #
  62. # <%= url_for(:back) %>
  63. # # if request.env["HTTP_REFERER"] is set to "http://www.example.com"
  64. # # => http://www.example.com
  65. #
  66. # <%= url_for(:back) %>
  67. # # if request.env["HTTP_REFERER"] is not set or is blank
  68. # # => javascript:history.back()
  69. #
  70. # <%= url_for(action: 'index', controller: 'users') %>
  71. # # Assuming an "admin" namespace
  72. # # => /admin/users
  73. #
  74. # <%= url_for(action: 'index', controller: '/users') %>
  75. # # Specify absolute path with beginning slash
  76. # # => /users
  77. 1 def url_for(options = nil)
  78. case options
  79. when String
  80. options
  81. when nil
  82. super(only_path: _generate_paths_by_default)
  83. when Hash
  84. options = options.symbolize_keys
  85. unless options.key?(:only_path)
  86. options[:only_path] = only_path?(options[:host])
  87. end
  88. super(options)
  89. when ActionController::Parameters
  90. unless options.key?(:only_path)
  91. options[:only_path] = only_path?(options[:host])
  92. end
  93. super(options)
  94. when :back
  95. _back_url
  96. when Array
  97. components = options.dup
  98. if _generate_paths_by_default
  99. polymorphic_path(components, components.extract_options!)
  100. else
  101. polymorphic_url(components, components.extract_options!)
  102. end
  103. else
  104. method = _generate_paths_by_default ? :path : :url
  105. builder = ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.send(method)
  106. case options
  107. when Symbol
  108. builder.handle_string_call(self, options)
  109. when Class
  110. builder.handle_class_call(self, options)
  111. else
  112. builder.handle_model_call(self, options)
  113. end
  114. end
  115. end
  116. 1 def url_options #:nodoc:
  117. return super unless controller.respond_to?(:url_options)
  118. controller.url_options
  119. end
  120. 1 private
  121. 1 def _routes_context
  122. controller
  123. end
  124. 1 def optimize_routes_generation?
  125. controller.respond_to?(:optimize_routes_generation?, true) ?
  126. controller.optimize_routes_generation? : super
  127. end
  128. 1 def _generate_paths_by_default
  129. true
  130. end
  131. 1 def only_path?(host)
  132. _generate_paths_by_default unless host
  133. end
  134. end
  135. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/template/error.rb

34.25% lines covered

73 relevant lines. 25 lines covered and 48 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/enumerable"
  3. 1 module ActionView
  4. # = Action View Errors
  5. 1 class ActionViewError < StandardError #:nodoc:
  6. end
  7. 1 class EncodingError < StandardError #:nodoc:
  8. end
  9. 1 class WrongEncodingError < EncodingError #:nodoc:
  10. 1 def initialize(string, encoding)
  11. @string, @encoding = string, encoding
  12. end
  13. 1 def message
  14. @string.force_encoding(Encoding::ASCII_8BIT)
  15. "Your template was not saved as valid #{@encoding}. Please " \
  16. "either specify #{@encoding} as the encoding for your template " \
  17. "in your text editor, or mark the template with its " \
  18. "encoding by inserting the following as the first line " \
  19. "of the template:\n\n# encoding: <name of correct encoding>.\n\n" \
  20. "The source of your template was:\n\n#{@string}"
  21. end
  22. end
  23. 1 class MissingTemplate < ActionViewError #:nodoc:
  24. 1 attr_reader :path
  25. 1 def initialize(paths, path, prefixes, partial, details, *)
  26. @path = path
  27. prefixes = Array(prefixes)
  28. template_type = if partial
  29. "partial"
  30. elsif /layouts/i.match?(path)
  31. "layout"
  32. else
  33. "template"
  34. end
  35. if partial && path.present?
  36. path = path.sub(%r{([^/]+)$}, "_\\1")
  37. end
  38. searched_paths = prefixes.map { |prefix| [prefix, path].join("/") }
  39. out = "Missing #{template_type} #{searched_paths.join(", ")} with #{details.inspect}. Searched in:\n"
  40. out += paths.compact.map { |p| " * #{p.to_s.inspect}\n" }.join
  41. super out
  42. end
  43. end
  44. 1 class Template
  45. # The Template::Error exception is raised when the compilation or rendering of the template
  46. # fails. This exception then gathers a bunch of intimate details and uses it to report a
  47. # precise exception message.
  48. 1 class Error < ActionViewError #:nodoc:
  49. 1 SOURCE_CODE_RADIUS = 3
  50. # Override to prevent #cause resetting during re-raise.
  51. 1 attr_reader :cause
  52. 1 def initialize(template)
  53. super($!.message)
  54. set_backtrace($!.backtrace)
  55. @cause = $!
  56. @template, @sub_templates = template, nil
  57. end
  58. 1 def file_name
  59. @template.identifier
  60. end
  61. 1 def sub_template_message
  62. if @sub_templates
  63. "Trace of template inclusion: " +
  64. @sub_templates.collect(&:inspect).join(", ")
  65. else
  66. ""
  67. end
  68. end
  69. 1 def source_extract(indentation = 0, output = :console)
  70. return unless num = line_number
  71. num = num.to_i
  72. source_code = @template.source.split("\n")
  73. start_on_line = [ num - SOURCE_CODE_RADIUS - 1, 0 ].max
  74. end_on_line = [ num + SOURCE_CODE_RADIUS - 1, source_code.length].min
  75. indent = end_on_line.to_s.size + indentation
  76. return unless source_code = source_code[start_on_line..end_on_line]
  77. formatted_code_for(source_code, start_on_line, indent, output)
  78. end
  79. 1 def sub_template_of(template_path)
  80. @sub_templates ||= []
  81. @sub_templates << template_path
  82. end
  83. 1 def line_number
  84. @line_number ||=
  85. if file_name
  86. regexp = /#{Regexp.escape File.basename(file_name)}:(\d+)/
  87. $1 if message =~ regexp || backtrace.find { |line| line =~ regexp }
  88. end
  89. end
  90. 1 def annoted_source_code
  91. source_extract(4)
  92. end
  93. 1 private
  94. 1 def source_location
  95. if line_number
  96. "on line ##{line_number} of "
  97. else
  98. "in "
  99. end + file_name
  100. end
  101. 1 def formatted_code_for(source_code, line_counter, indent, output)
  102. start_value = (output == :html) ? {} : []
  103. source_code.inject(start_value) do |result, line|
  104. line_counter += 1
  105. if output == :html
  106. result.update(line_counter.to_s => "%#{indent}s %s\n" % ["", line])
  107. else
  108. result << "%#{indent}s: %s" % [line_counter, line]
  109. end
  110. end
  111. end
  112. end
  113. end
  114. 1 TemplateError = Template::Error
  115. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/template/html.rb

58.82% lines covered

17 relevant lines. 10 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView #:nodoc:
  3. # = Action View HTML Template
  4. 1 class Template #:nodoc:
  5. 1 class HTML #:nodoc:
  6. 1 attr_accessor :type
  7. 1 def initialize(string, type = nil)
  8. @string = string.to_s
  9. @type = Types[type] || type if type
  10. @type ||= Types[:html]
  11. end
  12. 1 def identifier
  13. "html template"
  14. end
  15. 1 alias_method :inspect, :identifier
  16. 1 def to_str
  17. ERB::Util.h(@string)
  18. end
  19. 1 def render(*args)
  20. to_str
  21. end
  22. 1 def formats
  23. [@type.respond_to?(:ref) ? @type.ref : @type.to_s]
  24. end
  25. end
  26. end
  27. end

target/rubygems/gems/actionview-5.2.3/lib/action_view/template/text.rb

62.5% lines covered

16 relevant lines. 10 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActionView #:nodoc:
  3. # = Action View Text Template
  4. 1 class Template #:nodoc:
  5. 1 class Text #:nodoc:
  6. 1 attr_accessor :type
  7. 1 def initialize(string)
  8. @string = string.to_s
  9. @type = Types[:text]
  10. end
  11. 1 def identifier
  12. "text template"
  13. end
  14. 1 alias_method :inspect, :identifier
  15. 1 def to_str
  16. @string
  17. end
  18. 1 def render(*args)
  19. to_str
  20. end
  21. 1 def formats
  22. [@type.ref]
  23. end
  24. end
  25. end
  26. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter.rb

100.0% lines covered

15 relevant lines. 15 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_model_serializers/adapter'
  3. 1 require 'active_model_serializers/deprecate'
  4. 1 module ActiveModel
  5. 1 class Serializer
  6. # @deprecated Use ActiveModelSerializers::Adapter instead
  7. 1 module Adapter
  8. 1 class << self
  9. 1 extend ActiveModelSerializers::Deprecate
  10. 1 DEPRECATED_METHODS = [:create, :adapter_class, :adapter_map, :adapters, :register, :lookup].freeze
  11. 1 DEPRECATED_METHODS.each do |method|
  12. 6 delegate_and_deprecate method, ActiveModelSerializers::Adapter
  13. end
  14. end
  15. end
  16. end
  17. end
  18. 1 require 'active_model/serializer/adapter/base'
  19. 1 require 'active_model/serializer/adapter/null'
  20. 1 require 'active_model/serializer/adapter/attributes'
  21. 1 require 'active_model/serializer/adapter/json'
  22. 1 require 'active_model/serializer/adapter/json_api'

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/attributes.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 module Adapter
  5. 1 class Attributes < DelegateClass(ActiveModelSerializers::Adapter::Attributes)
  6. 1 def initialize(serializer, options = {})
  7. super(ActiveModelSerializers::Adapter::Attributes.new(serializer, options))
  8. end
  9. 1 class << self
  10. 1 extend ActiveModelSerializers::Deprecate
  11. 1 deprecate :new, 'ActiveModelSerializers::Adapter::Json.'
  12. end
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/base.rb

100.0% lines covered

7 relevant lines. 7 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 module Adapter
  5. 1 class Base < DelegateClass(ActiveModelSerializers::Adapter::Base)
  6. 1 class << self
  7. 1 extend ActiveModelSerializers::Deprecate
  8. 1 deprecate :inherited, 'ActiveModelSerializers::Adapter::Base.'
  9. end
  10. skipped # :nocov:
  11. skipped def initialize(serializer, options = {})
  12. skipped super(ActiveModelSerializers::Adapter::Base.new(serializer, options))
  13. skipped end
  14. skipped # :nocov:
  15. end
  16. end
  17. end
  18. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 module Adapter
  5. 1 class Json < DelegateClass(ActiveModelSerializers::Adapter::Json)
  6. 1 def initialize(serializer, options = {})
  7. super(ActiveModelSerializers::Adapter::Json.new(serializer, options))
  8. end
  9. 1 class << self
  10. 1 extend ActiveModelSerializers::Deprecate
  11. 1 deprecate :new, 'ActiveModelSerializers::Adapter::Json.new'
  12. end
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/json_api.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 module Adapter
  5. 1 class JsonApi < DelegateClass(ActiveModelSerializers::Adapter::JsonApi)
  6. 1 def initialize(serializer, options = {})
  7. super(ActiveModelSerializers::Adapter::JsonApi.new(serializer, options))
  8. end
  9. 1 class << self
  10. 1 extend ActiveModelSerializers::Deprecate
  11. 1 deprecate :new, 'ActiveModelSerializers::Adapter::JsonApi.new'
  12. end
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/adapter/null.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 module Adapter
  5. 1 class Null < DelegateClass(ActiveModelSerializers::Adapter::Null)
  6. 1 def initialize(serializer, options = {})
  7. super(ActiveModelSerializers::Adapter::Null.new(serializer, options))
  8. end
  9. 1 class << self
  10. 1 extend ActiveModelSerializers::Deprecate
  11. 1 deprecate :new, 'ActiveModelSerializers::Adapter::Null.new'
  12. end
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/association.rb

50.0% lines covered

34 relevant lines. 17 lines covered and 17 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_model/serializer/lazy_association'
  3. 1 module ActiveModel
  4. 1 class Serializer
  5. # This class holds all information about serializer's association.
  6. #
  7. # @api private
  8. 1 Association = Struct.new(:reflection, :association_options) do
  9. 1 attr_reader :lazy_association
  10. 1 delegate :object, :include_data?, :virtual_value, :collection?, to: :lazy_association
  11. 1 def initialize(*)
  12. super
  13. @lazy_association = LazyAssociation.new(reflection, association_options)
  14. end
  15. # @return [Symbol]
  16. 1 delegate :name, to: :reflection
  17. # @return [Symbol]
  18. 1 def key
  19. reflection_options.fetch(:key, name)
  20. end
  21. # @return [True,False]
  22. 1 def key?
  23. reflection_options.key?(:key)
  24. end
  25. # @return [Hash]
  26. 1 def links
  27. reflection_options.fetch(:links) || {}
  28. end
  29. # @return [Hash, nil]
  30. # This gets mutated, so cannot use the cached reflection_options
  31. 1 def meta
  32. reflection.options[:meta]
  33. end
  34. 1 def belongs_to?
  35. reflection.foreign_key_on == :self
  36. end
  37. 1 def polymorphic?
  38. true == reflection_options[:polymorphic]
  39. end
  40. # @api private
  41. 1 def serializable_hash(adapter_options, adapter_instance)
  42. association_serializer = lazy_association.serializer
  43. return virtual_value if virtual_value
  44. association_object = association_serializer && association_serializer.object
  45. return unless association_object
  46. serialization = association_serializer.serializable_hash(adapter_options, {}, adapter_instance)
  47. if polymorphic? && serialization
  48. polymorphic_type = association_object.class.name.underscore
  49. serialization = { type: polymorphic_type, polymorphic_type.to_sym => serialization }
  50. end
  51. serialization
  52. end
  53. 1 private
  54. 1 delegate :reflection_options, to: :lazy_association
  55. end
  56. end
  57. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/attribute.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_model/serializer/field'
  3. 1 module ActiveModel
  4. 1 class Serializer
  5. # Holds all the meta-data about an attribute as it was specified in the
  6. # ActiveModel::Serializer class.
  7. #
  8. # @example
  9. # class PostSerializer < ActiveModel::Serializer
  10. # attribute :content
  11. # attribute :name, key: :title
  12. # attribute :email, key: :author_email, if: :user_logged_in?
  13. # attribute :preview do
  14. # truncate(object.content)
  15. # end
  16. #
  17. # def user_logged_in?
  18. # current_user.logged_in?
  19. # end
  20. # end
  21. #
  22. 1 class Attribute < Field
  23. end
  24. end
  25. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/belongs_to_reflection.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. # @api private
  5. 1 class BelongsToReflection < Reflection
  6. # @api private
  7. 1 def foreign_key_on
  8. :self
  9. end
  10. end
  11. end
  12. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/field.rb

59.46% lines covered

37 relevant lines. 22 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. # Holds all the meta-data about a field (i.e. attribute or association) as it was
  5. # specified in the ActiveModel::Serializer class.
  6. # Notice that the field block is evaluated in the context of the serializer.
  7. 1 Field = Struct.new(:name, :options, :block) do
  8. 1 def initialize(*)
  9. 4 super
  10. 4 validate_condition!
  11. end
  12. # Compute the actual value of a field for a given serializer instance.
  13. # @param [Serializer] The serializer instance for which the value is computed.
  14. # @return [Object] value
  15. #
  16. # @api private
  17. #
  18. 1 def value(serializer)
  19. 20 if block
  20. serializer.instance_eval(&block)
  21. else
  22. 20 serializer.read_attribute_for_serialization(name)
  23. end
  24. end
  25. # Decide whether the field should be serialized by the given serializer instance.
  26. # @param [Serializer] The serializer instance
  27. # @return [Bool]
  28. #
  29. # @api private
  30. #
  31. 1 def excluded?(serializer)
  32. 20 case condition_type
  33. when :if
  34. !evaluate_condition(serializer)
  35. when :unless
  36. evaluate_condition(serializer)
  37. else
  38. 20 false
  39. end
  40. end
  41. 1 private
  42. 1 def validate_condition!
  43. 4 return if condition_type == :none
  44. case condition
  45. when Symbol, String, Proc
  46. # noop
  47. else
  48. fail TypeError, "#{condition_type.inspect} should be a Symbol, String or Proc"
  49. end
  50. end
  51. 1 def evaluate_condition(serializer)
  52. case condition
  53. when Symbol
  54. serializer.public_send(condition)
  55. when String
  56. serializer.instance_eval(condition)
  57. when Proc
  58. if condition.arity.zero?
  59. serializer.instance_exec(&condition)
  60. else
  61. serializer.instance_exec(serializer, &condition)
  62. end
  63. else
  64. nil
  65. end
  66. end
  67. 1 def condition_type
  68. 24 @condition_type ||=
  69. 3 if options.key?(:if)
  70. :if
  71. 3 elsif options.key?(:unless)
  72. :unless
  73. else
  74. 4 :none
  75. end
  76. end
  77. 1 def condition
  78. options[condition_type]
  79. end
  80. end
  81. end
  82. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_many_reflection.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. # @api private
  5. 1 class HasManyReflection < Reflection
  6. 1 def collection?
  7. true
  8. end
  9. end
  10. end
  11. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/has_one_reflection.rb

100.0% lines covered

3 relevant lines. 3 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. # @api private
  5. 1 class HasOneReflection < Reflection
  6. end
  7. end
  8. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/lazy_association.rb

36.73% lines covered

49 relevant lines. 18 lines covered and 31 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. # @api private
  5. 1 LazyAssociation = Struct.new(:reflection, :association_options) do
  6. 1 REFLECTION_OPTIONS = %i(key links polymorphic meta serializer virtual_value namespace).freeze
  7. 1 delegate :collection?, to: :reflection
  8. 1 def reflection_options
  9. @reflection_options ||= reflection.options.select { |k, _| REFLECTION_OPTIONS.include?(k) }
  10. end
  11. 1 def object
  12. return @object if defined?(@object)
  13. @object = reflection.value(
  14. association_options.fetch(:parent_serializer),
  15. association_options.fetch(:include_slice)
  16. )
  17. end
  18. 1 alias_method :eval_reflection_block, :object
  19. 1 def include_data?
  20. eval_reflection_block if reflection.block
  21. reflection.include_data?(
  22. association_options.fetch(:include_slice)
  23. )
  24. end
  25. # @return [ActiveModel::Serializer, nil]
  26. 1 def serializer
  27. return @serializer if defined?(@serializer)
  28. if serializer_class
  29. serialize_object!(object)
  30. elsif !object.nil? && !object.instance_of?(Object)
  31. cached_result[:virtual_value] = object
  32. end
  33. @serializer = cached_result[:serializer]
  34. end
  35. 1 def virtual_value
  36. cached_result[:virtual_value] || reflection_options[:virtual_value]
  37. end
  38. 1 def serializer_class
  39. return @serializer_class if defined?(@serializer_class)
  40. serializer_for_options = { namespace: namespace }
  41. serializer_for_options[:serializer] = reflection_options[:serializer] if reflection_options.key?(:serializer)
  42. @serializer_class = association_options.fetch(:parent_serializer).class.serializer_for(object, serializer_for_options)
  43. end
  44. 1 private
  45. 1 def cached_result
  46. @cached_result ||= {}
  47. end
  48. 1 def serialize_object!(object)
  49. if collection?
  50. if (serializer = instantiate_collection_serializer(object)).nil?
  51. # BUG: per #2027, JSON API resource relationships are only id and type, and hence either
  52. # *require* a serializer or we need to be a little clever about figuring out the id/type.
  53. # In either case, returning the raw virtual value will almost always be incorrect.
  54. #
  55. # Should be reflection_options[:virtual_value] or adapter needs to figure out what to do
  56. # with an object that is non-nil and has no defined serializer.
  57. cached_result[:virtual_value] = object.try(:as_json) || object
  58. else
  59. cached_result[:serializer] = serializer
  60. end
  61. else
  62. cached_result[:serializer] = instantiate_serializer(object)
  63. end
  64. end
  65. 1 def instantiate_serializer(object)
  66. serializer_options = association_options.fetch(:parent_serializer_options).except(:serializer)
  67. serializer_options[:serializer_context_class] = association_options.fetch(:parent_serializer).class
  68. serializer = reflection_options.fetch(:serializer, nil)
  69. serializer_options[:serializer] = serializer if serializer
  70. serializer_options[:namespace] = reflection_options[:namespace] if reflection_options[:namespace]
  71. serializer_class.new(object, serializer_options)
  72. end
  73. 1 def instantiate_collection_serializer(object)
  74. serializer = catch(:no_serializer) do
  75. instantiate_serializer(object)
  76. end
  77. serializer
  78. end
  79. 1 def namespace
  80. reflection_options[:namespace] ||
  81. association_options.fetch(:parent_serializer_options)[:namespace]
  82. end
  83. end
  84. end
  85. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/link.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_model/serializer/field'
  3. 1 module ActiveModel
  4. 1 class Serializer
  5. # Holds all the data about a serializer link
  6. #
  7. # @example
  8. # class PostSerializer < ActiveModel::Serializer
  9. # link :callback, if: :internal? do
  10. # object.callback_link
  11. # end
  12. #
  13. # def internal?
  14. # instance_options[:internal] == true
  15. # end
  16. # end
  17. #
  18. 1 class Link < Field
  19. end
  20. end
  21. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/null.rb

66.67% lines covered

9 relevant lines. 6 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. 1 class Serializer
  4. 1 class Null < Serializer
  5. 1 def attributes(*)
  6. {}
  7. end
  8. 1 def associations(*)
  9. {}
  10. end
  11. 1 def serializable_hash(*)
  12. {}
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model/serializer/reflection.rb

33.33% lines covered

51 relevant lines. 17 lines covered and 34 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_model/serializer/field'
  3. 1 require 'active_model/serializer/association'
  4. 1 module ActiveModel
  5. 1 class Serializer
  6. # Holds all the meta-data about an association as it was specified in the
  7. # ActiveModel::Serializer class.
  8. #
  9. # @example
  10. # class PostSerializer < ActiveModel::Serializer
  11. # has_one :author, serializer: AuthorSerializer
  12. # belongs_to :boss, type: :users, foreign_key: :boss_id
  13. # has_many :comments
  14. # has_many :comments, key: :last_comments do
  15. # object.comments.last(1)
  16. # end
  17. # has_many :secret_meta_data, if: :is_admin?
  18. #
  19. # has_one :blog do |serializer|
  20. # meta count: object.roles.count
  21. # serializer.cached_blog
  22. # end
  23. #
  24. # private
  25. #
  26. # def cached_blog
  27. # cache_store.fetch("cached_blog:#{object.updated_at}") do
  28. # Blog.find(object.blog_id)
  29. # end
  30. # end
  31. #
  32. # def is_admin?
  33. # current_user.admin?
  34. # end
  35. # end
  36. #
  37. # Specifically, the association 'comments' is evaluated two different ways:
  38. # 1) as 'comments' and named 'comments'.
  39. # 2) as 'object.comments.last(1)' and named 'last_comments'.
  40. #
  41. # PostSerializer._reflections # =>
  42. # # {
  43. # # author: HasOneReflection.new(:author, serializer: AuthorSerializer),
  44. # # comments: HasManyReflection.new(:comments)
  45. # # last_comments: HasManyReflection.new(:comments, { key: :last_comments }, #<Block>)
  46. # # secret_meta_data: HasManyReflection.new(:secret_meta_data, { if: :is_admin? })
  47. # # }
  48. #
  49. # So you can inspect reflections in your Adapters.
  50. 1 class Reflection < Field
  51. 1 attr_reader :foreign_key, :type
  52. 1 def initialize(*)
  53. super
  54. options[:links] = {}
  55. options[:include_data_setting] = Serializer.config.include_data_default
  56. options[:meta] = nil
  57. @type = options.fetch(:type) do
  58. class_name = options.fetch(:class_name, name.to_s.camelize.singularize)
  59. class_name.underscore.pluralize.to_sym
  60. end
  61. @foreign_key = options.fetch(:foreign_key) do
  62. if collection?
  63. "#{name.to_s.singularize}_ids".to_sym
  64. else
  65. "#{name}_id".to_sym
  66. end
  67. end
  68. end
  69. # @api public
  70. # @example
  71. # has_one :blog do
  72. # include_data false
  73. # link :self, 'a link'
  74. # link :related, 'another link'
  75. # link :self, '//example.com/link_author/relationships/bio'
  76. # id = object.profile.id
  77. # link :related do
  78. # "//example.com/profiles/#{id}" if id != 123
  79. # end
  80. # link :related do
  81. # ids = object.likes.map(&:id).join(',')
  82. # href "//example.com/likes/#{ids}"
  83. # meta ids: ids
  84. # end
  85. # end
  86. 1 def link(name, value = nil)
  87. options[:links][name] = block_given? ? Proc.new : value
  88. :nil
  89. end
  90. # @api public
  91. # @example
  92. # has_one :blog do
  93. # include_data false
  94. # meta(id: object.blog.id)
  95. # meta liked: object.likes.any?
  96. # link :self do
  97. # href object.blog.id.to_s
  98. # meta(id: object.blog.id)
  99. # end
  100. 1 def meta(value = nil)
  101. options[:meta] = block_given? ? Proc.new : value
  102. :nil
  103. end
  104. # @api public
  105. # @example
  106. # has_one :blog do
  107. # include_data false
  108. # link :self, 'a link'
  109. # link :related, 'another link'
  110. # end
  111. #
  112. # has_one :blog do
  113. # include_data false
  114. # link :self, 'a link'
  115. # link :related, 'another link'
  116. # end
  117. #
  118. # belongs_to :reviewer do
  119. # meta name: 'Dan Brown'
  120. # include_data true
  121. # end
  122. #
  123. # has_many :tags, serializer: TagSerializer do
  124. # link :self, '//example.com/link_author/relationships/tags'
  125. # include_data :if_sideloaded
  126. # end
  127. 1 def include_data(value = true)
  128. options[:include_data_setting] = value
  129. :nil
  130. end
  131. 1 def collection?
  132. false
  133. end
  134. 1 def include_data?(include_slice)
  135. include_data_setting = options[:include_data_setting]
  136. case include_data_setting
  137. when :if_sideloaded then include_slice.key?(options.fetch(:key, name))
  138. when true then true
  139. when false then false
  140. else fail ArgumentError, "Unknown include_data_setting '#{include_data_setting.inspect}'"
  141. end
  142. end
  143. # @param serializer [ActiveModel::Serializer]
  144. # @yield [ActiveModel::Serializer]
  145. # @return [:nil, associated resource or resource collection]
  146. 1 def value(serializer, include_slice)
  147. # NOTE(BF): This method isn't thread-safe because the _reflections class attribute is not thread-safe
  148. # Therefore, when we build associations from reflections, we dup the entire reflection instance.
  149. # Better solutions much appreciated!
  150. @object = serializer.object
  151. @scope = serializer.scope
  152. block_value = instance_exec(serializer, &block) if block
  153. return unless include_data?(include_slice)
  154. if block && block_value != :nil
  155. block_value
  156. else
  157. serializer.read_attribute_for_serialization(name)
  158. end
  159. end
  160. # @api private
  161. 1 def foreign_key_on
  162. :related
  163. end
  164. # Build association. This method is used internally to
  165. # build serializer's association by its reflection.
  166. #
  167. # @param [Serializer] parent_serializer for given association
  168. # @param [Hash{Symbol => Object}] parent_serializer_options
  169. #
  170. # @example
  171. # # Given the following serializer defined:
  172. # class PostSerializer < ActiveModel::Serializer
  173. # has_many :comments, serializer: CommentSummarySerializer
  174. # end
  175. #
  176. # # Then you instantiate your serializer
  177. # post_serializer = PostSerializer.new(post, foo: 'bar') #
  178. # # to build association for comments you need to get reflection
  179. # comments_reflection = PostSerializer._reflections.detect { |r| r.name == :comments }
  180. # # and #build_association
  181. # comments_reflection.build_association(post_serializer, foo: 'bar')
  182. #
  183. # @api private
  184. 1 def build_association(parent_serializer, parent_serializer_options, include_slice = {})
  185. association_options = {
  186. parent_serializer: parent_serializer,
  187. parent_serializer_options: parent_serializer_options,
  188. include_slice: include_slice
  189. }
  190. Association.new(self, association_options)
  191. end
  192. 1 protected
  193. # used in instance exec
  194. 1 attr_accessor :object, :scope
  195. end
  196. end
  197. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter.rb

73.33% lines covered

45 relevant lines. 33 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module Adapter
  4. 1 UnknownAdapterError = Class.new(ArgumentError)
  5. 1 ADAPTER_MAP = {} # rubocop:disable Style/MutableConstant
  6. 1 private_constant :ADAPTER_MAP if defined?(private_constant)
  7. 1 class << self # All methods are class functions
  8. skipped # :nocov:
  9. skipped def new(*args)
  10. skipped fail ArgumentError, 'Adapters inherit from Adapter::Base.' \
  11. skipped "Adapter.new called with args: '#{args.inspect}', from" \
  12. skipped "'caller[0]'."
  13. skipped end
  14. skipped # :nocov:
  15. 1 def configured_adapter
  16. 1 lookup(ActiveModelSerializers.config.adapter)
  17. end
  18. 1 def create(resource, options = {})
  19. 1 override = options.delete(:adapter)
  20. 1 klass = override ? adapter_class(override) : configured_adapter
  21. 1 klass.new(resource, options)
  22. end
  23. # @see ActiveModelSerializers::Adapter.lookup
  24. 1 def adapter_class(adapter)
  25. ActiveModelSerializers::Adapter.lookup(adapter)
  26. end
  27. # @return [Hash<adapter_name, adapter_class>]
  28. 1 def adapter_map
  29. 5 ADAPTER_MAP
  30. end
  31. # @return [Array<Symbol>] list of adapter names
  32. 1 def adapters
  33. adapter_map.keys.sort!
  34. end
  35. # Adds an adapter 'klass' with 'name' to the 'adapter_map'
  36. # Names are stringified and underscored
  37. # @param name [Symbol, String, Class] name of the registered adapter
  38. # @param klass [Class] adapter class itself, optional if name is the class
  39. # @example
  40. # AMS::Adapter.register(:my_adapter, MyAdapter)
  41. # @note The registered name strips out 'ActiveModelSerializers::Adapter::'
  42. # so that registering 'ActiveModelSerializers::Adapter::Json' and
  43. # 'Json' will both register as 'json'.
  44. 1 def register(name, klass = name)
  45. 4 name = name.to_s.gsub(/\AActiveModelSerializers::Adapter::/, ''.freeze)
  46. 4 adapter_map[name.underscore] = klass
  47. 4 self
  48. end
  49. 1 def registered_name(adapter_class)
  50. ADAPTER_MAP.key adapter_class
  51. end
  52. # @param adapter [String, Symbol, Class] name to fetch adapter by
  53. # @return [ActiveModelSerializers::Adapter] subclass of Adapter
  54. # @raise [UnknownAdapterError]
  55. 1 def lookup(adapter)
  56. # 1. return if is a class
  57. 1 return adapter if adapter.is_a?(Class)
  58. 1 adapter_name = adapter.to_s.underscore
  59. # 2. return if registered
  60. 1 adapter_map.fetch(adapter_name) do
  61. # 3. try to find adapter class from environment
  62. adapter_class = find_by_name(adapter_name)
  63. register(adapter_name, adapter_class)
  64. adapter_class
  65. end
  66. rescue NameError, ArgumentError => e
  67. failure_message =
  68. "NameError: #{e.message}. Unknown adapter: #{adapter.inspect}. Valid adapters are: #{adapters}"
  69. raise UnknownAdapterError, failure_message, e.backtrace
  70. end
  71. # @api private
  72. 1 def find_by_name(adapter_name)
  73. adapter_name = adapter_name.to_s.classify.tr('API', 'Api')
  74. "ActiveModelSerializers::Adapter::#{adapter_name}".safe_constantize ||
  75. "ActiveModelSerializers::Adapter::#{adapter_name.pluralize}".safe_constantize or # rubocop:disable Style/AndOr
  76. fail UnknownAdapterError
  77. end
  78. 1 private :find_by_name
  79. end
  80. # Gotta be at the bottom to use the code above it :(
  81. 1 extend ActiveSupport::Autoload
  82. 1 autoload :Base
  83. 1 autoload :Null
  84. 1 autoload :Attributes
  85. 1 autoload :Json
  86. 1 autoload :JsonApi
  87. end
  88. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/attributes.rb

63.64% lines covered

22 relevant lines. 14 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module Adapter
  4. 1 class Attributes < Base
  5. 1 def initialize(*)
  6. 1 super
  7. 1 instance_options[:fieldset] ||= ActiveModel::Serializer::Fieldset.new(fields_to_fieldset(instance_options.delete(:fields)))
  8. end
  9. 1 def serializable_hash(options = nil)
  10. 1 options = serialization_options(options)
  11. 1 options[:fields] ||= instance_options[:fields]
  12. 1 serialized_hash = serializer.serializable_hash(instance_options, options, self)
  13. 1 self.class.transform_key_casing!(serialized_hash, instance_options)
  14. end
  15. 1 private
  16. 1 def fields_to_fieldset(fields)
  17. 1 return fields if fields.nil?
  18. resource_fields = []
  19. relationship_fields = {}
  20. fields.each do |field|
  21. case field
  22. when Symbol, String then resource_fields << field
  23. when Hash then relationship_fields.merge!(field)
  24. else fail ArgumentError, "Unknown conversion of fields to fieldset: '#{field.inspect}' in '#{fields.inspect}'"
  25. end
  26. end
  27. relationship_fields.merge!(serializer.json_key.to_sym => resource_fields)
  28. end
  29. end
  30. end
  31. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/base.rb

82.35% lines covered

34 relevant lines. 28 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'case_transform'
  3. 1 module ActiveModelSerializers
  4. 1 module Adapter
  5. 1 class Base
  6. # Automatically register adapters when subclassing
  7. 1 def self.inherited(subclass)
  8. 4 ActiveModelSerializers::Adapter.register(subclass)
  9. end
  10. # Sets the default transform for the adapter.
  11. #
  12. # @return [Symbol] the default transform for the adapter
  13. 1 def self.default_key_transform
  14. 1 :unaltered
  15. end
  16. # Determines the transform to use in order of precedence:
  17. # adapter option, global config, adapter default.
  18. #
  19. # @param options [Object]
  20. # @return [Symbol] the transform to use
  21. 1 def self.transform(options)
  22. 1 return options[:key_transform] if options && options[:key_transform]
  23. 1 ActiveModelSerializers.config.key_transform || default_key_transform
  24. end
  25. # Transforms the casing of the supplied value.
  26. #
  27. # @param value [Object] the value to be transformed
  28. # @param options [Object] serializable resource options
  29. # @return [Symbol] the default transform for the adapter
  30. 1 def self.transform_key_casing!(value, options)
  31. 1 CaseTransform.send(transform(options), value)
  32. end
  33. 1 def self.cache_key
  34. @cache_key ||= ActiveModelSerializers::Adapter.registered_name(self)
  35. end
  36. 1 def self.fragment_cache(cached_hash, non_cached_hash)
  37. non_cached_hash.merge cached_hash
  38. end
  39. 1 attr_reader :serializer, :instance_options
  40. 1 def initialize(serializer, options = {})
  41. 1 @serializer = serializer
  42. 1 @instance_options = options
  43. end
  44. # Subclasses that implement this method must first call
  45. # options = serialization_options(options)
  46. 1 def serializable_hash(_options = nil)
  47. fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.'
  48. end
  49. 1 def as_json(options = nil)
  50. 1 serializable_hash(options)
  51. end
  52. 1 def cache_key
  53. self.class.cache_key
  54. end
  55. 1 def fragment_cache(cached_hash, non_cached_hash)
  56. self.class.fragment_cache(cached_hash, non_cached_hash)
  57. end
  58. 1 private
  59. # see https://github.com/rails-api/active_model_serializers/pull/965
  60. # When <tt>options</tt> is +nil+, sets it to +{}+
  61. 1 def serialization_options(options)
  62. 1 options ||= {} # rubocop:disable Lint/UselessAssignment
  63. end
  64. 1 def root
  65. serializer.json_key.to_sym if serializer.json_key
  66. end
  67. end
  68. end
  69. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json.rb

50.0% lines covered

12 relevant lines. 6 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module Adapter
  4. 1 class Json < Base
  5. 1 def serializable_hash(options = nil)
  6. options = serialization_options(options)
  7. serialized_hash = { root => Attributes.new(serializer, instance_options).serializable_hash(options) }
  8. serialized_hash[meta_key] = meta unless meta.blank?
  9. self.class.transform_key_casing!(serialized_hash, instance_options)
  10. end
  11. 1 def meta
  12. instance_options.fetch(:meta, nil)
  13. end
  14. 1 def meta_key
  15. instance_options.fetch(:meta_key, 'meta'.freeze)
  16. end
  17. end
  18. end
  19. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/json_api.rb

27.64% lines covered

123 relevant lines. 34 lines covered and 89 lines missed.
    
  1. # frozen_string_literal: true
  2. # {http://jsonapi.org/format/ JSON API specification}
  3. # rubocop:disable Style/AsciiComments
  4. # TODO: implement!
  5. # ��� https://github.com/rails-api/active_model_serializers/issues/1235
  6. # TODO: use uri_template in link generation?
  7. # ��� https://github.com/rails-api/active_model_serializers/pull/1282#discussion_r42528812
  8. # see gem https://github.com/hannesg/uri_template
  9. # spec http://tools.ietf.org/html/rfc6570
  10. # impl https://developer.github.com/v3/#schema https://api.github.com/
  11. # TODO: validate against a JSON schema document?
  12. # ��� https://github.com/rails-api/active_model_serializers/issues/1162
  13. # ��� https://github.com/rails-api/active_model_serializers/pull/1270
  14. # TODO: Routing
  15. # ��� https://github.com/rails-api/active_model_serializers/pull/1476
  16. # TODO: Query Params
  17. # ��� `include` https://github.com/rails-api/active_model_serializers/pull/1131
  18. # ��� `fields` https://github.com/rails-api/active_model_serializers/pull/700
  19. # ��� `page[number]=3&page[size]=1` https://github.com/rails-api/active_model_serializers/pull/1041
  20. # ��� `filter`
  21. # ��� `sort`
  22. 1 module ActiveModelSerializers
  23. 1 module Adapter
  24. 1 class JsonApi < Base
  25. 1 extend ActiveSupport::Autoload
  26. 1 eager_autoload do
  27. 1 autoload :Jsonapi
  28. 1 autoload :ResourceIdentifier
  29. 1 autoload :Link
  30. 1 autoload :PaginationLinks
  31. 1 autoload :Meta
  32. 1 autoload :Error
  33. 1 autoload :Deserialization
  34. 1 autoload :Relationship
  35. end
  36. 1 def self.default_key_transform
  37. :dash
  38. end
  39. 1 def self.fragment_cache(cached_hash, non_cached_hash, root = true)
  40. core_cached = cached_hash.first
  41. core_non_cached = non_cached_hash.first
  42. no_root_cache = cached_hash.delete_if { |key, _value| key == core_cached[0] }
  43. no_root_non_cache = non_cached_hash.delete_if { |key, _value| key == core_non_cached[0] }
  44. cached_resource = (core_cached[1]) ? core_cached[1].deep_merge(core_non_cached[1]) : core_non_cached[1]
  45. hash = root ? { root => cached_resource } : cached_resource
  46. hash.deep_merge no_root_non_cache.deep_merge no_root_cache
  47. end
  48. 1 def initialize(serializer, options = {})
  49. super
  50. @include_directive = JSONAPI::IncludeDirective.new(options[:include], allow_wildcard: true)
  51. @fieldset = options[:fieldset] || ActiveModel::Serializer::Fieldset.new(options.delete(:fields))
  52. end
  53. # {http://jsonapi.org/format/#crud Requests are transactional, i.e. success or failure}
  54. # {http://jsonapi.org/format/#document-top-level data and errors MUST NOT coexist in the same document.}
  55. 1 def serializable_hash(*)
  56. document = if serializer.success?
  57. success_document
  58. else
  59. failure_document
  60. end
  61. self.class.transform_key_casing!(document, instance_options)
  62. end
  63. 1 def fragment_cache(cached_hash, non_cached_hash)
  64. root = !instance_options.include?(:include)
  65. self.class.fragment_cache(cached_hash, non_cached_hash, root)
  66. end
  67. # {http://jsonapi.org/format/#document-top-level Primary data}
  68. # definition:
  69. # ��� toplevel_data (required)
  70. # ��� toplevel_included
  71. # ��� toplevel_meta
  72. # ��� toplevel_links
  73. # ��� toplevel_jsonapi
  74. # structure:
  75. # {
  76. # data: toplevel_data,
  77. # included: toplevel_included,
  78. # meta: toplevel_meta,
  79. # links: toplevel_links,
  80. # jsonapi: toplevel_jsonapi
  81. # }.reject! {|_,v| v.nil? }
  82. # rubocop:disable Metrics/CyclomaticComplexity
  83. 1 def success_document
  84. is_collection = serializer.respond_to?(:each)
  85. serializers = is_collection ? serializer : [serializer]
  86. primary_data, included = resource_objects_for(serializers)
  87. hash = {}
  88. # toplevel_data
  89. # definition:
  90. # oneOf
  91. # resource
  92. # array of unique items of type 'resource'
  93. # null
  94. #
  95. # description:
  96. # The document's "primary data" is a representation of the resource or collection of resources
  97. # targeted by a request.
  98. #
  99. # Singular: the resource object.
  100. #
  101. # Collection: one of an array of resource objects, an array of resource identifier objects, or
  102. # an empty array ([]), for requests that target resource collections.
  103. #
  104. # None: null if the request is one that might correspond to a single resource, but doesn't currently.
  105. # structure:
  106. # if serializable_resource.resource?
  107. # resource
  108. # elsif serializable_resource.collection?
  109. # [
  110. # resource,
  111. # resource
  112. # ]
  113. # else
  114. # nil
  115. # end
  116. hash[:data] = is_collection ? primary_data : primary_data[0]
  117. # toplevel_included
  118. # alias included
  119. # definition:
  120. # array of unique items of type 'resource'
  121. #
  122. # description:
  123. # To reduce the number of HTTP requests, servers **MAY** allow
  124. # responses that include related resources along with the requested primary
  125. # resources. Such responses are called "compound documents".
  126. # structure:
  127. # [
  128. # resource,
  129. # resource
  130. # ]
  131. hash[:included] = included if included.any?
  132. Jsonapi.add!(hash)
  133. if instance_options[:links]
  134. hash[:links] ||= {}
  135. hash[:links].update(instance_options[:links])
  136. end
  137. if is_collection && serializer.paginated?
  138. hash[:links] ||= {}
  139. hash[:links].update(pagination_links_for(serializer))
  140. end
  141. hash[:meta] = instance_options[:meta] unless instance_options[:meta].blank?
  142. hash
  143. end
  144. # rubocop:enable Metrics/CyclomaticComplexity
  145. # {http://jsonapi.org/format/#errors JSON API Errors}
  146. # TODO: look into caching
  147. # definition:
  148. # ��� toplevel_errors array (required)
  149. # ��� toplevel_meta
  150. # ��� toplevel_jsonapi
  151. # structure:
  152. # {
  153. # errors: toplevel_errors,
  154. # meta: toplevel_meta,
  155. # jsonapi: toplevel_jsonapi
  156. # }.reject! {|_,v| v.nil? }
  157. # prs:
  158. # https://github.com/rails-api/active_model_serializers/pull/1004
  159. 1 def failure_document
  160. hash = {}
  161. # PR Please :)
  162. # Jsonapi.add!(hash)
  163. # toplevel_errors
  164. # definition:
  165. # array of unique items of type 'error'
  166. # structure:
  167. # [
  168. # error,
  169. # error
  170. # ]
  171. if serializer.respond_to?(:each)
  172. hash[:errors] = serializer.flat_map do |error_serializer|
  173. Error.resource_errors(error_serializer, instance_options)
  174. end
  175. else
  176. hash[:errors] = Error.resource_errors(serializer, instance_options)
  177. end
  178. hash
  179. end
  180. 1 protected
  181. 1 attr_reader :fieldset
  182. 1 private
  183. # {http://jsonapi.org/format/#document-resource-objects Primary data}
  184. # resource
  185. # definition:
  186. # JSON Object
  187. #
  188. # properties:
  189. # type (required) : String
  190. # id (required) : String
  191. # attributes
  192. # relationships
  193. # links
  194. # meta
  195. #
  196. # description:
  197. # "Resource objects" appear in a JSON API document to represent resources
  198. # structure:
  199. # {
  200. # type: 'admin--some-user',
  201. # id: '1336',
  202. # attributes: attributes,
  203. # relationships: relationships,
  204. # links: links,
  205. # meta: meta,
  206. # }.reject! {|_,v| v.nil? }
  207. # prs:
  208. # type
  209. # https://github.com/rails-api/active_model_serializers/pull/1122
  210. # [x] https://github.com/rails-api/active_model_serializers/pull/1213
  211. # https://github.com/rails-api/active_model_serializers/pull/1216
  212. # https://github.com/rails-api/active_model_serializers/pull/1029
  213. # links
  214. # [x] https://github.com/rails-api/active_model_serializers/pull/1246
  215. # [x] url helpers https://github.com/rails-api/active_model_serializers/issues/1269
  216. # meta
  217. # [x] https://github.com/rails-api/active_model_serializers/pull/1340
  218. 1 def resource_objects_for(serializers)
  219. @primary = []
  220. @included = []
  221. @resource_identifiers = Set.new
  222. serializers.each { |serializer| process_resource(serializer, true, @include_directive) }
  223. serializers.each { |serializer| process_relationships(serializer, @include_directive) }
  224. [@primary, @included]
  225. end
  226. 1 def process_resource(serializer, primary, include_slice = {})
  227. resource_identifier = ResourceIdentifier.new(serializer, instance_options).as_json
  228. return false unless @resource_identifiers.add?(resource_identifier)
  229. resource_object = resource_object_for(serializer, include_slice)
  230. if primary
  231. @primary << resource_object
  232. else
  233. @included << resource_object
  234. end
  235. true
  236. end
  237. 1 def process_relationships(serializer, include_slice)
  238. serializer.associations(include_slice).each do |association|
  239. # TODO(BF): Process relationship without evaluating lazy_association
  240. process_relationship(association.lazy_association.serializer, include_slice[association.key])
  241. end
  242. end
  243. 1 def process_relationship(serializer, include_slice)
  244. if serializer.respond_to?(:each)
  245. serializer.each { |s| process_relationship(s, include_slice) }
  246. return
  247. end
  248. return unless serializer && serializer.object
  249. return unless process_resource(serializer, false, include_slice)
  250. process_relationships(serializer, include_slice)
  251. end
  252. # {http://jsonapi.org/format/#document-resource-object-attributes Document Resource Object Attributes}
  253. # attributes
  254. # definition:
  255. # JSON Object
  256. #
  257. # patternProperties:
  258. # ^(?!relationships$|links$)\\w[-\\w_]*$
  259. #
  260. # description:
  261. # Members of the attributes object ("attributes") represent information about the resource
  262. # object in which it's defined.
  263. # Attributes may contain any valid JSON value
  264. # structure:
  265. # {
  266. # foo: 'bar'
  267. # }
  268. 1 def attributes_for(serializer, fields)
  269. serializer.attributes(fields).except(:id)
  270. end
  271. # {http://jsonapi.org/format/#document-resource-objects Document Resource Objects}
  272. 1 def resource_object_for(serializer, include_slice = {})
  273. resource_object = data_for(serializer, include_slice)
  274. # toplevel_links
  275. # definition:
  276. # allOf
  277. # ��� links
  278. # ��� pagination
  279. #
  280. # description:
  281. # Link members related to the primary data.
  282. # structure:
  283. # links.merge!(pagination)
  284. # prs:
  285. # https://github.com/rails-api/active_model_serializers/pull/1247
  286. # https://github.com/rails-api/active_model_serializers/pull/1018
  287. if (links = links_for(serializer)).any?
  288. resource_object ||= {}
  289. resource_object[:links] = links
  290. end
  291. # toplevel_meta
  292. # alias meta
  293. # definition:
  294. # meta
  295. # structure
  296. # {
  297. # :'git-ref' => 'abc123'
  298. # }
  299. if (meta = meta_for(serializer)).present?
  300. resource_object ||= {}
  301. resource_object[:meta] = meta
  302. end
  303. resource_object
  304. end
  305. 1 def data_for(serializer, include_slice)
  306. data = serializer.fetch(self) do
  307. resource_object = ResourceIdentifier.new(serializer, instance_options).as_json
  308. break nil if resource_object.nil?
  309. requested_fields = fieldset && fieldset.fields_for(resource_object[:type])
  310. attributes = attributes_for(serializer, requested_fields)
  311. resource_object[:attributes] = attributes if attributes.any?
  312. resource_object
  313. end
  314. data.tap do |resource_object|
  315. next if resource_object.nil?
  316. # NOTE(BF): the attributes are cached above, separately from the relationships, below.
  317. requested_associations = fieldset.fields_for(resource_object[:type]) || '*'
  318. relationships = relationships_for(serializer, requested_associations, include_slice)
  319. resource_object[:relationships] = relationships if relationships.any?
  320. end
  321. end
  322. # {http://jsonapi.org/format/#document-resource-object-relationships Document Resource Object Relationship}
  323. # relationships
  324. # definition:
  325. # JSON Object
  326. #
  327. # patternProperties:
  328. # ^\\w[-\\w_]*$"
  329. #
  330. # properties:
  331. # data : relationshipsData
  332. # links
  333. # meta
  334. #
  335. # description:
  336. #
  337. # Members of the relationships object ("relationships") represent references from the
  338. # resource object in which it's defined to other resource objects."
  339. # structure:
  340. # {
  341. # links: links,
  342. # meta: meta,
  343. # data: relationshipsData
  344. # }.reject! {|_,v| v.nil? }
  345. #
  346. # prs:
  347. # links
  348. # [x] https://github.com/rails-api/active_model_serializers/pull/1454
  349. # meta
  350. # [x] https://github.com/rails-api/active_model_serializers/pull/1454
  351. # polymorphic
  352. # [ ] https://github.com/rails-api/active_model_serializers/pull/1420
  353. #
  354. # relationshipsData
  355. # definition:
  356. # oneOf
  357. # relationshipToOne
  358. # relationshipToMany
  359. #
  360. # description:
  361. # Member, whose value represents "resource linkage"
  362. # structure:
  363. # if has_one?
  364. # relationshipToOne
  365. # else
  366. # relationshipToMany
  367. # end
  368. #
  369. # definition:
  370. # anyOf
  371. # null
  372. # linkage
  373. #
  374. # relationshipToOne
  375. # description:
  376. #
  377. # References to other resource objects in a to-one ("relationship"). Relationships can be
  378. # specified by including a member in a resource's links object.
  379. #
  380. # None: Describes an empty to-one relationship.
  381. # structure:
  382. # if has_related?
  383. # linkage
  384. # else
  385. # nil
  386. # end
  387. #
  388. # relationshipToMany
  389. # definition:
  390. # array of unique items of type 'linkage'
  391. #
  392. # description:
  393. # An array of objects each containing "type" and "id" members for to-many relationships
  394. # structure:
  395. # [
  396. # linkage,
  397. # linkage
  398. # ]
  399. # prs:
  400. # polymorphic
  401. # [ ] https://github.com/rails-api/active_model_serializers/pull/1282
  402. #
  403. # linkage
  404. # definition:
  405. # type (required) : String
  406. # id (required) : String
  407. # meta
  408. #
  409. # description:
  410. # The "type" and "id" to non-empty members.
  411. # structure:
  412. # {
  413. # type: 'required-type',
  414. # id: 'required-id',
  415. # meta: meta
  416. # }.reject! {|_,v| v.nil? }
  417. 1 def relationships_for(serializer, requested_associations, include_slice)
  418. include_directive = JSONAPI::IncludeDirective.new(
  419. requested_associations,
  420. allow_wildcard: true
  421. )
  422. serializer.associations(include_directive, include_slice).each_with_object({}) do |association, hash|
  423. hash[association.key] = Relationship.new(serializer, instance_options, association).as_json
  424. end
  425. end
  426. # {http://jsonapi.org/format/#document-links Document Links}
  427. # links
  428. # definition:
  429. # JSON Object
  430. #
  431. # properties:
  432. # self : URI
  433. # related : link
  434. #
  435. # description:
  436. # A resource object **MAY** contain references to other resource objects ("relationships").
  437. # Relationships may be to-one or to-many. Relationships can be specified by including a member
  438. # in a resource's links object.
  439. #
  440. # A `self` member���s value is a URL for the relationship itself (a "relationship URL"). This
  441. # URL allows the client to directly manipulate the relationship. For example, it would allow
  442. # a client to remove an `author` from an `article` without deleting the people resource
  443. # itself.
  444. # structure:
  445. # {
  446. # self: 'http://example.com/etc',
  447. # related: link
  448. # }.reject! {|_,v| v.nil? }
  449. 1 def links_for(serializer)
  450. serializer._links.each_with_object({}) do |(name, value), hash|
  451. next if value.excluded?(serializer)
  452. result = Link.new(serializer, value.block).as_json
  453. hash[name] = result if result
  454. end
  455. end
  456. # {http://jsonapi.org/format/#fetching-pagination Pagination Links}
  457. # pagination
  458. # definition:
  459. # first : pageObject
  460. # last : pageObject
  461. # prev : pageObject
  462. # next : pageObject
  463. # structure:
  464. # {
  465. # first: pageObject,
  466. # last: pageObject,
  467. # prev: pageObject,
  468. # next: pageObject
  469. # }
  470. #
  471. # pageObject
  472. # definition:
  473. # oneOf
  474. # URI
  475. # null
  476. #
  477. # description:
  478. # The <x> page of data
  479. # structure:
  480. # if has_page?
  481. # 'http://example.com/some-page?page[number][x]'
  482. # else
  483. # nil
  484. # end
  485. # prs:
  486. # https://github.com/rails-api/active_model_serializers/pull/1041
  487. 1 def pagination_links_for(serializer)
  488. PaginationLinks.new(serializer.object, instance_options).as_json
  489. end
  490. # {http://jsonapi.org/format/#document-meta Docment Meta}
  491. 1 def meta_for(serializer)
  492. Meta.new(serializer).as_json
  493. end
  494. end
  495. end
  496. end
  497. # rubocop:enable Style/AsciiComments

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/null.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module Adapter
  4. 1 class Null < Base
  5. 1 def serializable_hash(*)
  6. {}
  7. end
  8. end
  9. end
  10. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/deserialization.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module Deserialization
  4. 1 module_function
  5. 1 def jsonapi_parse(*args)
  6. Adapter::JsonApi::Deserialization.parse(*args)
  7. end
  8. skipped # :nocov:
  9. skipped def jsonapi_parse!(*args)
  10. skipped Adapter::JsonApi::Deserialization.parse!(*args)
  11. skipped end
  12. skipped # :nocov:
  13. end
  14. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/json_pointer.rb

50.0% lines covered

8 relevant lines. 4 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModelSerializers
  3. 1 module JsonPointer
  4. 1 module_function
  5. POINTERS = {
  6. attribute: '/data/attributes/%s'.freeze,
  7. primary_data: '/data%s'.freeze
  8. }.freeze
  9. 1 def new(pointer_type, value = nil)
  10. format(POINTERS[pointer_type], value)
  11. end
  12. end
  13. end

target/rubygems/gems/active_model_serializers-0.10.10/lib/active_model_serializers/model.rb

51.35% lines covered

37 relevant lines. 19 lines covered and 18 lines missed.
    
  1. # frozen_string_literal: true
  2. # ActiveModelSerializers::Model is a convenient superclass for making your models
  3. # from Plain-Old Ruby Objects (PORO). It also serves as a reference implementation
  4. # that satisfies ActiveModel::Serializer::Lint::Tests.
  5. 1 require 'active_support/core_ext/hash'
  6. 1 module ActiveModelSerializers
  7. 1 class Model
  8. 1 include ActiveModel::Serializers::JSON
  9. 1 include ActiveModel::Model
  10. # Declare names of attributes to be included in +attributes+ hash.
  11. # Is only available as a class-method since the ActiveModel::Serialization mixin in Rails
  12. # uses an +attribute_names+ local variable, which may conflict if we were to add instance methods here.
  13. #
  14. # @overload attribute_names
  15. # @return [Array<Symbol>]
  16. 1 class_attribute :attribute_names, instance_writer: false, instance_reader: false
  17. # Initialize +attribute_names+ for all subclasses. The array is usually
  18. # mutated in the +attributes+ method, but can be set directly, as well.
  19. 1 self.attribute_names = []
  20. # Easily declare instance attributes with setters and getters for each.
  21. #
  22. # To initialize an instance, all attributes must have setters.
  23. # However, the hash returned by +attributes+ instance method will ALWAYS
  24. # be the value of the initial attributes, regardless of what accessors are defined.
  25. # The only way to change the change the attributes after initialization is
  26. # to mutate the +attributes+ directly.
  27. # Accessor methods do NOT mutate the attributes. (This is a bug).
  28. #
  29. # @note For now, the Model only supports the notion of 'attributes'.
  30. # In the tests, there is a special Model that also supports 'associations'. This is
  31. # important so that we can add accessors for values that should not appear in the
  32. # attributes hash when modeling associations. It is not yet clear if it
  33. # makes sense for a PORO to have associations outside of the tests.
  34. #
  35. # @overload attributes(names)
  36. # @param names [Array<String, Symbol>]
  37. # @param name [String, Symbol]
  38. 1 def self.attributes(*names)
  39. self.attribute_names |= names.map(&:to_sym)
  40. # Silence redefinition of methods warnings
  41. ActiveModelSerializers.silence_warnings do
  42. attr_accessor(*names)
  43. end
  44. end
  45. # Opt-in to breaking change
  46. 1 def self.derive_attributes_from_names_and_fix_accessors
  47. unless included_modules.include?(DeriveAttributesFromNamesAndFixAccessors)
  48. prepend(DeriveAttributesFromNamesAndFixAccessors)
  49. end
  50. end
  51. 1 module DeriveAttributesFromNamesAndFixAccessors
  52. 1 def self.included(base)
  53. # NOTE that +id+ will always be in +attributes+.
  54. base.attributes :id
  55. end
  56. # Override the +attributes+ method so that the hash is derived from +attribute_names+.
  57. #
  58. # The fields in +attribute_names+ determines the returned hash.
  59. # +attributes+ are returned frozen to prevent any expectations that mutation affects
  60. # the actual values in the model.
  61. 1 def attributes
  62. self.class.attribute_names.each_with_object({}) do |attribute_name, result|
  63. result[attribute_name] = public_send(attribute_name).freeze
  64. end.with_indifferent_access.freeze
  65. end
  66. end
  67. # Support for validation and other ActiveModel::Errors
  68. # @return [ActiveModel::Errors]
  69. 1 attr_reader :errors
  70. # (see #updated_at)
  71. 1 attr_writer :updated_at
  72. # The only way to change the attributes of an instance is to directly mutate the attributes.
  73. # @example
  74. #
  75. # model.attributes[:foo] = :bar
  76. # @return [Hash]
  77. 1 attr_reader :attributes
  78. # @param attributes [Hash]
  79. 1 def initialize(attributes = {})
  80. attributes ||= {} # protect against nil
  81. @attributes = attributes.symbolize_keys.with_indifferent_access
  82. @errors = ActiveModel::Errors.new(self)
  83. super
  84. end
  85. # Defaults to the downcased model name.
  86. # This probably isn't a good default, since it's not a unique instance identifier,
  87. # but that's what is currently implemented \_('-')_/.
  88. #
  89. # @note Though +id+ is defined, it will only show up
  90. # in +attributes+ when it is passed in to the initializer or added to +attributes+,
  91. # such as <tt>attributes[:id] = 5</tt>.
  92. # @return [String, Numeric, Symbol]
  93. 1 def id
  94. attributes.fetch(:id) do
  95. defined?(@id) ? @id : self.class.model_name.name && self.class.model_name.name.downcase
  96. end
  97. end
  98. # When not set, defaults to the time the file was modified.
  99. #
  100. # @note Though +updated_at+ and +updated_at=+ are defined, it will only show up
  101. # in +attributes+ when it is passed in to the initializer or added to +attributes+,
  102. # such as <tt>attributes[:updated_at] = Time.current</tt>.
  103. # @return [String, Numeric, Time]
  104. 1 def updated_at
  105. attributes.fetch(:updated_at) do
  106. defined?(@updated_at) ? @updated_at : File.mtime(__FILE__)
  107. end
  108. end
  109. # To customize model behavior, this method must be redefined. However,
  110. # there are other ways of setting the +cache_key+ a serializer uses.
  111. # @return [String]
  112. 1 def cache_key
  113. ActiveSupport::Cache.expand_cache_key([
  114. self.class.model_name.name.downcase,
  115. "#{id}-#{updated_at.strftime('%Y%m%d%H%M%S%9N')}"
  116. ].compact)
  117. end
  118. end
  119. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/arguments.rb

35.9% lines covered

78 relevant lines. 28 lines covered and 50 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash"
  3. 1 module ActiveJob
  4. # Raised when an exception is raised during job arguments deserialization.
  5. #
  6. # Wraps the original exception raised as +cause+.
  7. 1 class DeserializationError < StandardError
  8. 1 def initialize #:nodoc:
  9. super("Error while trying to deserialize arguments: #{$!.message}")
  10. set_backtrace $!.backtrace
  11. end
  12. end
  13. # Raised when an unsupported argument type is set as a job argument. We
  14. # currently support NilClass, Integer, Fixnum, Float, String, TrueClass, FalseClass,
  15. # Bignum, BigDecimal, and objects that can be represented as GlobalIDs (ex: Active Record).
  16. # Raised if you set the key for a Hash something else than a string or
  17. # a symbol. Also raised when trying to serialize an object which can't be
  18. # identified with a Global ID - such as an unpersisted Active Record model.
  19. 1 class SerializationError < ArgumentError; end
  20. 1 module Arguments
  21. 1 extend self
  22. # :nodoc:
  23. 1 TYPE_WHITELIST = [ NilClass, String, Integer, Float, BigDecimal, TrueClass, FalseClass ]
  24. 1 TYPE_WHITELIST.push(Fixnum, Bignum) unless 1.class == Integer
  25. # Serializes a set of arguments. Whitelisted types are returned
  26. # as-is. Arrays/Hashes are serialized element by element.
  27. # All other types are serialized using GlobalID.
  28. 1 def serialize(arguments)
  29. arguments.map { |argument| serialize_argument(argument) }
  30. end
  31. # Deserializes a set of arguments. Whitelisted types are returned
  32. # as-is. Arrays/Hashes are deserialized element by element.
  33. # All other types are deserialized using GlobalID.
  34. 1 def deserialize(arguments)
  35. arguments.map { |argument| deserialize_argument(argument) }
  36. rescue
  37. raise DeserializationError
  38. end
  39. 1 private
  40. # :nodoc:
  41. 1 GLOBALID_KEY = "_aj_globalid".freeze
  42. # :nodoc:
  43. 1 SYMBOL_KEYS_KEY = "_aj_symbol_keys".freeze
  44. # :nodoc:
  45. 1 WITH_INDIFFERENT_ACCESS_KEY = "_aj_hash_with_indifferent_access".freeze
  46. 1 private_constant :GLOBALID_KEY, :SYMBOL_KEYS_KEY, :WITH_INDIFFERENT_ACCESS_KEY
  47. 1 def serialize_argument(argument)
  48. case argument
  49. when *TYPE_WHITELIST
  50. argument
  51. when GlobalID::Identification
  52. convert_to_global_id_hash(argument)
  53. when Array
  54. argument.map { |arg| serialize_argument(arg) }
  55. when ActiveSupport::HashWithIndifferentAccess
  56. serialize_indifferent_hash(argument)
  57. when Hash
  58. symbol_keys = argument.each_key.grep(Symbol).map(&:to_s)
  59. result = serialize_hash(argument)
  60. result[SYMBOL_KEYS_KEY] = symbol_keys
  61. result
  62. when -> (arg) { arg.respond_to?(:permitted?) }
  63. serialize_indifferent_hash(argument.to_h)
  64. else
  65. raise SerializationError.new("Unsupported argument type: #{argument.class.name}")
  66. end
  67. end
  68. 1 def deserialize_argument(argument)
  69. case argument
  70. when String
  71. argument
  72. when *TYPE_WHITELIST
  73. argument
  74. when Array
  75. argument.map { |arg| deserialize_argument(arg) }
  76. when Hash
  77. if serialized_global_id?(argument)
  78. deserialize_global_id argument
  79. else
  80. deserialize_hash(argument)
  81. end
  82. else
  83. raise ArgumentError, "Can only deserialize primitive arguments: #{argument.inspect}"
  84. end
  85. end
  86. 1 def serialized_global_id?(hash)
  87. hash.size == 1 && hash.include?(GLOBALID_KEY)
  88. end
  89. 1 def deserialize_global_id(hash)
  90. GlobalID::Locator.locate hash[GLOBALID_KEY]
  91. end
  92. 1 def serialize_hash(argument)
  93. argument.each_with_object({}) do |(key, value), hash|
  94. hash[serialize_hash_key(key)] = serialize_argument(value)
  95. end
  96. end
  97. 1 def deserialize_hash(serialized_hash)
  98. result = serialized_hash.transform_values { |v| deserialize_argument(v) }
  99. if result.delete(WITH_INDIFFERENT_ACCESS_KEY)
  100. result = result.with_indifferent_access
  101. elsif symbol_keys = result.delete(SYMBOL_KEYS_KEY)
  102. result = transform_symbol_keys(result, symbol_keys)
  103. end
  104. result
  105. end
  106. # :nodoc:
  107. 1 RESERVED_KEYS = [
  108. GLOBALID_KEY, GLOBALID_KEY.to_sym,
  109. SYMBOL_KEYS_KEY, SYMBOL_KEYS_KEY.to_sym,
  110. WITH_INDIFFERENT_ACCESS_KEY, WITH_INDIFFERENT_ACCESS_KEY.to_sym,
  111. ]
  112. 1 private_constant :RESERVED_KEYS
  113. 1 def serialize_hash_key(key)
  114. case key
  115. when *RESERVED_KEYS
  116. raise SerializationError.new("Can't serialize a Hash with reserved key #{key.inspect}")
  117. when String, Symbol
  118. key.to_s
  119. else
  120. raise SerializationError.new("Only string and symbol hash keys may be serialized as job arguments, but #{key.inspect} is a #{key.class}")
  121. end
  122. end
  123. 1 def serialize_indifferent_hash(indifferent_hash)
  124. result = serialize_hash(indifferent_hash)
  125. result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true)
  126. result
  127. end
  128. 1 def transform_symbol_keys(hash, symbol_keys)
  129. # NOTE: HashWithIndifferentAccess#transform_keys always
  130. # returns stringified keys with indifferent access
  131. # so we call #to_h here to ensure keys are symbolized.
  132. hash.to_h.transform_keys do |key|
  133. if symbol_keys.include?(key)
  134. key.to_sym
  135. else
  136. key
  137. end
  138. end
  139. end
  140. 1 def convert_to_global_id_hash(argument)
  141. { GLOBALID_KEY => argument.to_global_id.to_s }
  142. rescue URI::GID::MissingModelIdError
  143. raise SerializationError, "Unable to serialize #{argument.class} " \
  144. "without an id. (Maybe you forgot to call save?)"
  145. end
  146. end
  147. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/base.rb

100.0% lines covered

23 relevant lines. 23 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_job/core"
  3. 1 require "active_job/queue_adapter"
  4. 1 require "active_job/queue_name"
  5. 1 require "active_job/queue_priority"
  6. 1 require "active_job/enqueuing"
  7. 1 require "active_job/execution"
  8. 1 require "active_job/callbacks"
  9. 1 require "active_job/exceptions"
  10. 1 require "active_job/logging"
  11. 1 require "active_job/translation"
  12. 1 module ActiveJob #:nodoc:
  13. # = Active Job
  14. #
  15. # Active Job objects can be configured to work with different backend
  16. # queuing frameworks. To specify a queue adapter to use:
  17. #
  18. # ActiveJob::Base.queue_adapter = :inline
  19. #
  20. # A list of supported adapters can be found in QueueAdapters.
  21. #
  22. # Active Job objects can be defined by creating a class that inherits
  23. # from the ActiveJob::Base class. The only necessary method to
  24. # implement is the "perform" method.
  25. #
  26. # To define an Active Job object:
  27. #
  28. # class ProcessPhotoJob < ActiveJob::Base
  29. # def perform(photo)
  30. # photo.watermark!('Rails')
  31. # photo.rotate!(90.degrees)
  32. # photo.resize_to_fit!(300, 300)
  33. # photo.upload!
  34. # end
  35. # end
  36. #
  37. # Records that are passed in are serialized/deserialized using Global
  38. # ID. More information can be found in Arguments.
  39. #
  40. # To enqueue a job to be performed as soon as the queueing system is free:
  41. #
  42. # ProcessPhotoJob.perform_later(photo)
  43. #
  44. # To enqueue a job to be processed at some point in the future:
  45. #
  46. # ProcessPhotoJob.set(wait_until: Date.tomorrow.noon).perform_later(photo)
  47. #
  48. # More information can be found in ActiveJob::Core::ClassMethods#set
  49. #
  50. # A job can also be processed immediately without sending to the queue:
  51. #
  52. # ProcessPhotoJob.perform_now(photo)
  53. #
  54. # == Exceptions
  55. #
  56. # * DeserializationError - Error class for deserialization errors.
  57. # * SerializationError - Error class for serialization errors.
  58. 1 class Base
  59. 1 include Core
  60. 1 include QueueAdapter
  61. 1 include QueueName
  62. 1 include QueuePriority
  63. 1 include Enqueuing
  64. 1 include Execution
  65. 1 include Callbacks
  66. 1 include Exceptions
  67. 1 include Logging
  68. 1 include Translation
  69. 1 ActiveSupport.run_load_hooks(:active_job, self)
  70. end
  71. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/callbacks.rb

87.5% lines covered

24 relevant lines. 21 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/callbacks"
  3. 1 module ActiveJob
  4. # = Active Job Callbacks
  5. #
  6. # Active Job provides hooks during the life cycle of a job. Callbacks allow you
  7. # to trigger logic during this cycle. Available callbacks are:
  8. #
  9. # * <tt>before_enqueue</tt>
  10. # * <tt>around_enqueue</tt>
  11. # * <tt>after_enqueue</tt>
  12. # * <tt>before_perform</tt>
  13. # * <tt>around_perform</tt>
  14. # * <tt>after_perform</tt>
  15. #
  16. # NOTE: Calling the same callback multiple times will overwrite previous callback definitions.
  17. #
  18. 1 module Callbacks
  19. 1 extend ActiveSupport::Concern
  20. 1 include ActiveSupport::Callbacks
  21. 1 class << self
  22. 1 include ActiveSupport::Callbacks
  23. 1 define_callbacks :execute
  24. end
  25. 1 included do
  26. 1 define_callbacks :perform
  27. 1 define_callbacks :enqueue
  28. end
  29. # These methods will be included into any Active Job object, adding
  30. # callbacks for +perform+ and +enqueue+ methods.
  31. 1 module ClassMethods
  32. # Defines a callback that will get called right before the
  33. # job's perform method is executed.
  34. #
  35. # class VideoProcessJob < ActiveJob::Base
  36. # queue_as :default
  37. #
  38. # before_perform do |job|
  39. # UserMailer.notify_video_started_processing(job.arguments.first)
  40. # end
  41. #
  42. # def perform(video_id)
  43. # Video.find(video_id).process
  44. # end
  45. # end
  46. #
  47. 1 def before_perform(*filters, &blk)
  48. set_callback(:perform, :before, *filters, &blk)
  49. end
  50. # Defines a callback that will get called right after the
  51. # job's perform method has finished.
  52. #
  53. # class VideoProcessJob < ActiveJob::Base
  54. # queue_as :default
  55. #
  56. # after_perform do |job|
  57. # UserMailer.notify_video_processed(job.arguments.first)
  58. # end
  59. #
  60. # def perform(video_id)
  61. # Video.find(video_id).process
  62. # end
  63. # end
  64. #
  65. 1 def after_perform(*filters, &blk)
  66. set_callback(:perform, :after, *filters, &blk)
  67. end
  68. # Defines a callback that will get called around the job's perform method.
  69. #
  70. # class VideoProcessJob < ActiveJob::Base
  71. # queue_as :default
  72. #
  73. # around_perform do |job, block|
  74. # UserMailer.notify_video_started_processing(job.arguments.first)
  75. # block.call
  76. # UserMailer.notify_video_processed(job.arguments.first)
  77. # end
  78. #
  79. # def perform(video_id)
  80. # Video.find(video_id).process
  81. # end
  82. # end
  83. #
  84. 1 def around_perform(*filters, &blk)
  85. 2 set_callback(:perform, :around, *filters, &blk)
  86. end
  87. # Defines a callback that will get called right before the
  88. # job is enqueued.
  89. #
  90. # class VideoProcessJob < ActiveJob::Base
  91. # queue_as :default
  92. #
  93. # before_enqueue do |job|
  94. # $statsd.increment "enqueue-video-job.try"
  95. # end
  96. #
  97. # def perform(video_id)
  98. # Video.find(video_id).process
  99. # end
  100. # end
  101. #
  102. 1 def before_enqueue(*filters, &blk)
  103. set_callback(:enqueue, :before, *filters, &blk)
  104. end
  105. # Defines a callback that will get called right after the
  106. # job is enqueued.
  107. #
  108. # class VideoProcessJob < ActiveJob::Base
  109. # queue_as :default
  110. #
  111. # after_enqueue do |job|
  112. # $statsd.increment "enqueue-video-job.success"
  113. # end
  114. #
  115. # def perform(video_id)
  116. # Video.find(video_id).process
  117. # end
  118. # end
  119. #
  120. 1 def after_enqueue(*filters, &blk)
  121. 1 set_callback(:enqueue, :after, *filters, &blk)
  122. end
  123. # Defines a callback that will get called around the enqueueing
  124. # of the job.
  125. #
  126. # class VideoProcessJob < ActiveJob::Base
  127. # queue_as :default
  128. #
  129. # around_enqueue do |job, block|
  130. # $statsd.time "video-job.process" do
  131. # block.call
  132. # end
  133. # end
  134. #
  135. # def perform(video_id)
  136. # Video.find(video_id).process
  137. # end
  138. # end
  139. #
  140. 1 def around_enqueue(*filters, &blk)
  141. 1 set_callback(:enqueue, :around, *filters, &blk)
  142. end
  143. end
  144. end
  145. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/core.rb

49.02% lines covered

51 relevant lines. 25 lines covered and 26 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveJob
  3. # Provides general behavior that will be included into every Active Job
  4. # object that inherits from ActiveJob::Base.
  5. 1 module Core
  6. 1 extend ActiveSupport::Concern
  7. 1 included do
  8. # Job arguments
  9. 1 attr_accessor :arguments
  10. 1 attr_writer :serialized_arguments
  11. # Timestamp when the job should be performed
  12. 1 attr_accessor :scheduled_at
  13. # Job Identifier
  14. 1 attr_accessor :job_id
  15. # Queue in which the job will reside.
  16. 1 attr_writer :queue_name
  17. # Priority that the job will have (lower is more priority).
  18. 1 attr_writer :priority
  19. # ID optionally provided by adapter
  20. 1 attr_accessor :provider_job_id
  21. # Number of times this job has been executed (which increments on every retry, like after an exception).
  22. 1 attr_accessor :executions
  23. # I18n.locale to be used during the job.
  24. 1 attr_accessor :locale
  25. end
  26. # These methods will be included into any Active Job object, adding
  27. # helpers for de/serialization and creation of job instances.
  28. 1 module ClassMethods
  29. # Creates a new job instance from a hash created with +serialize+
  30. 1 def deserialize(job_data)
  31. job = job_data["job_class"].constantize.new
  32. job.deserialize(job_data)
  33. job
  34. end
  35. # Creates a job preconfigured with the given options. You can call
  36. # perform_later with the job arguments to enqueue the job with the
  37. # preconfigured options
  38. #
  39. # ==== Options
  40. # * <tt>:wait</tt> - Enqueues the job with the specified delay
  41. # * <tt>:wait_until</tt> - Enqueues the job at the time specified
  42. # * <tt>:queue</tt> - Enqueues the job on the specified queue
  43. # * <tt>:priority</tt> - Enqueues the job with the specified priority
  44. #
  45. # ==== Examples
  46. #
  47. # VideoJob.set(queue: :some_queue).perform_later(Video.last)
  48. # VideoJob.set(wait: 5.minutes).perform_later(Video.last)
  49. # VideoJob.set(wait_until: Time.now.tomorrow).perform_later(Video.last)
  50. # VideoJob.set(queue: :some_queue, wait: 5.minutes).perform_later(Video.last)
  51. # VideoJob.set(queue: :some_queue, wait_until: Time.now.tomorrow).perform_later(Video.last)
  52. # VideoJob.set(queue: :some_queue, wait: 5.minutes, priority: 10).perform_later(Video.last)
  53. 1 def set(options = {})
  54. ConfiguredJob.new(self, options)
  55. end
  56. end
  57. # Creates a new job instance. Takes the arguments that will be
  58. # passed to the perform method.
  59. 1 def initialize(*arguments)
  60. @arguments = arguments
  61. @job_id = SecureRandom.uuid
  62. @queue_name = self.class.queue_name
  63. @priority = self.class.priority
  64. @executions = 0
  65. end
  66. # Returns a hash with the job data that can safely be passed to the
  67. # queueing adapter.
  68. 1 def serialize
  69. {
  70. "job_class" => self.class.name,
  71. "job_id" => job_id,
  72. "provider_job_id" => provider_job_id,
  73. "queue_name" => queue_name,
  74. "priority" => priority,
  75. "arguments" => serialize_arguments_if_needed(arguments),
  76. "executions" => executions,
  77. "locale" => I18n.locale.to_s
  78. }
  79. end
  80. # Attaches the stored job data to the current instance. Receives a hash
  81. # returned from +serialize+
  82. #
  83. # ==== Examples
  84. #
  85. # class DeliverWebhookJob < ActiveJob::Base
  86. # attr_writer :attempt_number
  87. #
  88. # def attempt_number
  89. # @attempt_number ||= 0
  90. # end
  91. #
  92. # def serialize
  93. # super.merge('attempt_number' => attempt_number + 1)
  94. # end
  95. #
  96. # def deserialize(job_data)
  97. # super
  98. # self.attempt_number = job_data['attempt_number']
  99. # end
  100. #
  101. # rescue_from(Timeout::Error) do |exception|
  102. # raise exception if attempt_number > 5
  103. # retry_job(wait: 10)
  104. # end
  105. # end
  106. 1 def deserialize(job_data)
  107. self.job_id = job_data["job_id"]
  108. self.provider_job_id = job_data["provider_job_id"]
  109. self.queue_name = job_data["queue_name"]
  110. self.priority = job_data["priority"]
  111. self.serialized_arguments = job_data["arguments"]
  112. self.executions = job_data["executions"]
  113. self.locale = job_data["locale"] || I18n.locale.to_s
  114. end
  115. 1 private
  116. 1 def serialize_arguments_if_needed(arguments)
  117. if arguments_serialized?
  118. @serialized_arguments
  119. else
  120. serialize_arguments(arguments)
  121. end
  122. end
  123. 1 def deserialize_arguments_if_needed
  124. if arguments_serialized?
  125. @arguments = deserialize_arguments(@serialized_arguments)
  126. @serialized_arguments = nil
  127. end
  128. end
  129. 1 def serialize_arguments(arguments)
  130. Arguments.serialize(arguments)
  131. end
  132. 1 def deserialize_arguments(serialized_args)
  133. Arguments.deserialize(serialized_args)
  134. end
  135. 1 def arguments_serialized?
  136. defined?(@serialized_arguments) && @serialized_arguments
  137. end
  138. end
  139. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/enqueuing.rb

45.0% lines covered

20 relevant lines. 9 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_job/arguments"
  3. 1 module ActiveJob
  4. # Provides behavior for enqueuing jobs.
  5. 1 module Enqueuing
  6. 1 extend ActiveSupport::Concern
  7. # Includes the +perform_later+ method for job initialization.
  8. 1 module ClassMethods
  9. # Push a job onto the queue. The arguments must be legal JSON types
  10. # (+string+, +int+, +float+, +nil+, +true+, +false+, +hash+ or +array+) or
  11. # GlobalID::Identification instances. Arbitrary Ruby objects
  12. # are not supported.
  13. #
  14. # Returns an instance of the job class queued with arguments available in
  15. # Job#arguments.
  16. 1 def perform_later(*args)
  17. job_or_instantiate(*args).enqueue
  18. end
  19. 1 private
  20. 1 def job_or_instantiate(*args) # :doc:
  21. args.first.is_a?(self) ? args.first : new(*args)
  22. end
  23. end
  24. # Enqueues the job to be performed by the queue adapter.
  25. #
  26. # ==== Options
  27. # * <tt>:wait</tt> - Enqueues the job with the specified delay
  28. # * <tt>:wait_until</tt> - Enqueues the job at the time specified
  29. # * <tt>:queue</tt> - Enqueues the job on the specified queue
  30. # * <tt>:priority</tt> - Enqueues the job with the specified priority
  31. #
  32. # ==== Examples
  33. #
  34. # my_job_instance.enqueue
  35. # my_job_instance.enqueue wait: 5.minutes
  36. # my_job_instance.enqueue queue: :important
  37. # my_job_instance.enqueue wait_until: Date.tomorrow.midnight
  38. # my_job_instance.enqueue priority: 10
  39. 1 def enqueue(options = {})
  40. self.scheduled_at = options[:wait].seconds.from_now.to_f if options[:wait]
  41. self.scheduled_at = options[:wait_until].to_f if options[:wait_until]
  42. self.queue_name = self.class.queue_name_from_part(options[:queue]) if options[:queue]
  43. self.priority = options[:priority].to_i if options[:priority]
  44. run_callbacks :enqueue do
  45. if scheduled_at
  46. self.class.queue_adapter.enqueue_at self, scheduled_at
  47. else
  48. self.class.queue_adapter.enqueue self
  49. end
  50. end
  51. self
  52. end
  53. end
  54. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/exceptions.rb

34.38% lines covered

32 relevant lines. 11 lines covered and 21 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/numeric/time"
  3. 1 module ActiveJob
  4. # Provides behavior for retrying and discarding jobs on exceptions.
  5. 1 module Exceptions
  6. 1 extend ActiveSupport::Concern
  7. 1 module ClassMethods
  8. # Catch the exception and reschedule job for re-execution after so many seconds, for a specific number of attempts.
  9. # If the exception keeps getting raised beyond the specified number of attempts, the exception is allowed to
  10. # bubble up to the underlying queuing system, which may have its own retry mechanism or place it in a
  11. # holding queue for inspection.
  12. #
  13. # You can also pass a block that'll be invoked if the retry attempts fail for custom logic rather than letting
  14. # the exception bubble up. This block is yielded with the job instance as the first and the error instance as the second parameter.
  15. #
  16. # ==== Options
  17. # * <tt>:wait</tt> - Re-enqueues the job with a delay specified either in seconds (default: 3 seconds),
  18. # as a computing proc that the number of executions so far as an argument, or as a symbol reference of
  19. # <tt>:exponentially_longer</tt>, which applies the wait algorithm of <tt>(executions ** 4) + 2</tt>
  20. # (first wait 3s, then 18s, then 83s, etc)
  21. # * <tt>:attempts</tt> - Re-enqueues the job the specified number of times (default: 5 attempts)
  22. # * <tt>:queue</tt> - Re-enqueues the job on a different queue
  23. # * <tt>:priority</tt> - Re-enqueues the job with a different priority
  24. #
  25. # ==== Examples
  26. #
  27. # class RemoteServiceJob < ActiveJob::Base
  28. # retry_on CustomAppException # defaults to 3s wait, 5 attempts
  29. # retry_on AnotherCustomAppException, wait: ->(executions) { executions * 2 }
  30. # retry_on(YetAnotherCustomAppException) do |job, error|
  31. # ExceptionNotifier.caught(error)
  32. # end
  33. # retry_on ActiveRecord::Deadlocked, wait: 5.seconds, attempts: 3
  34. # retry_on Net::OpenTimeout, wait: :exponentially_longer, attempts: 10
  35. #
  36. # def perform(*args)
  37. # # Might raise CustomAppException, AnotherCustomAppException, or YetAnotherCustomAppException for something domain specific
  38. # # Might raise ActiveRecord::Deadlocked when a local db deadlock is detected
  39. # # Might raise Net::OpenTimeout when the remote service is down
  40. # end
  41. # end
  42. 1 def retry_on(exception, wait: 3.seconds, attempts: 5, queue: nil, priority: nil)
  43. rescue_from exception do |error|
  44. if executions < attempts
  45. logger.error "Retrying #{self.class} in #{wait} seconds, due to a #{exception}. The original exception was #{error.cause.inspect}."
  46. retry_job wait: determine_delay(wait), queue: queue, priority: priority
  47. else
  48. if block_given?
  49. yield self, error
  50. else
  51. logger.error "Stopped retrying #{self.class} due to a #{exception}, which reoccurred on #{executions} attempts. The original exception was #{error.cause.inspect}."
  52. raise error
  53. end
  54. end
  55. end
  56. end
  57. # Discard the job with no attempts to retry, if the exception is raised. This is useful when the subject of the job,
  58. # like an Active Record, is no longer available, and the job is thus no longer relevant.
  59. #
  60. # You can also pass a block that'll be invoked. This block is yielded with the job instance as the first and the error instance as the second parameter.
  61. #
  62. # ==== Example
  63. #
  64. # class SearchIndexingJob < ActiveJob::Base
  65. # discard_on ActiveJob::DeserializationError
  66. # discard_on(CustomAppException) do |job, error|
  67. # ExceptionNotifier.caught(error)
  68. # end
  69. #
  70. # def perform(record)
  71. # # Will raise ActiveJob::DeserializationError if the record can't be deserialized
  72. # # Might raise CustomAppException for something domain specific
  73. # end
  74. # end
  75. 1 def discard_on(exception)
  76. 1 rescue_from exception do |error|
  77. if block_given?
  78. yield self, error
  79. else
  80. logger.error "Discarded #{self.class} due to a #{exception}. The original exception was #{error.cause.inspect}."
  81. end
  82. end
  83. end
  84. end
  85. # Reschedules the job to be re-executed. This is useful in combination
  86. # with the +rescue_from+ option. When you rescue an exception from your job
  87. # you can ask Active Job to retry performing your job.
  88. #
  89. # ==== Options
  90. # * <tt>:wait</tt> - Enqueues the job with the specified delay in seconds
  91. # * <tt>:wait_until</tt> - Enqueues the job at the time specified
  92. # * <tt>:queue</tt> - Enqueues the job on the specified queue
  93. # * <tt>:priority</tt> - Enqueues the job with the specified priority
  94. #
  95. # ==== Examples
  96. #
  97. # class SiteScraperJob < ActiveJob::Base
  98. # rescue_from(ErrorLoadingSite) do
  99. # retry_job queue: :low_priority
  100. # end
  101. #
  102. # def perform(*args)
  103. # # raise ErrorLoadingSite if cannot scrape
  104. # end
  105. # end
  106. 1 def retry_job(options = {})
  107. enqueue options
  108. end
  109. 1 private
  110. 1 def determine_delay(seconds_or_duration_or_algorithm)
  111. case seconds_or_duration_or_algorithm
  112. when :exponentially_longer
  113. (executions**4) + 2
  114. when ActiveSupport::Duration
  115. duration = seconds_or_duration_or_algorithm
  116. duration.to_i
  117. when Integer
  118. seconds = seconds_or_duration_or_algorithm
  119. seconds
  120. when Proc
  121. algorithm = seconds_or_duration_or_algorithm
  122. algorithm.call(executions)
  123. else
  124. raise "Couldn't determine a delay based on #{seconds_or_duration_or_algorithm.inspect}"
  125. end
  126. end
  127. end
  128. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/execution.rb

52.38% lines covered

21 relevant lines. 11 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/rescuable"
  3. 1 require "active_job/arguments"
  4. 1 module ActiveJob
  5. 1 module Execution
  6. 1 extend ActiveSupport::Concern
  7. 1 include ActiveSupport::Rescuable
  8. # Includes methods for executing and performing jobs instantly.
  9. 1 module ClassMethods
  10. # Performs the job immediately.
  11. #
  12. # MyJob.perform_now("mike")
  13. #
  14. 1 def perform_now(*args)
  15. job_or_instantiate(*args).perform_now
  16. end
  17. 1 def execute(job_data) #:nodoc:
  18. ActiveJob::Callbacks.run_callbacks(:execute) do
  19. job = deserialize(job_data)
  20. job.perform_now
  21. end
  22. end
  23. end
  24. # Performs the job immediately. The job is not sent to the queueing adapter
  25. # but directly executed by blocking the execution of others until it's finished.
  26. #
  27. # MyJob.new(*args).perform_now
  28. 1 def perform_now
  29. # Guard against jobs that were persisted before we started counting executions by zeroing out nil counters
  30. self.executions = (executions || 0) + 1
  31. deserialize_arguments_if_needed
  32. run_callbacks :perform do
  33. perform(*arguments)
  34. end
  35. rescue => exception
  36. rescue_with_handler(exception) || raise
  37. end
  38. 1 def perform(*)
  39. fail NotImplementedError
  40. end
  41. end
  42. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/logging.rb

38.57% lines covered

70 relevant lines. 27 lines covered and 43 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/transform_values"
  3. 1 require "active_support/core_ext/string/filters"
  4. 1 require "active_support/tagged_logging"
  5. 1 require "active_support/logger"
  6. 1 module ActiveJob
  7. 1 module Logging #:nodoc:
  8. 1 extend ActiveSupport::Concern
  9. 1 included do
  10. 1 cattr_accessor :logger, default: ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
  11. 1 around_enqueue do |_, block, _|
  12. tag_logger do
  13. block.call
  14. end
  15. end
  16. 1 around_perform do |job, block, _|
  17. tag_logger(job.class.name, job.job_id) do
  18. payload = { adapter: job.class.queue_adapter, job: job }
  19. ActiveSupport::Notifications.instrument("perform_start.active_job", payload.dup)
  20. ActiveSupport::Notifications.instrument("perform.active_job", payload) do
  21. block.call
  22. end
  23. end
  24. end
  25. 1 after_enqueue do |job|
  26. if job.scheduled_at
  27. ActiveSupport::Notifications.instrument "enqueue_at.active_job",
  28. adapter: job.class.queue_adapter, job: job
  29. else
  30. ActiveSupport::Notifications.instrument "enqueue.active_job",
  31. adapter: job.class.queue_adapter, job: job
  32. end
  33. end
  34. end
  35. 1 private
  36. 1 def tag_logger(*tags)
  37. if logger.respond_to?(:tagged)
  38. tags.unshift "ActiveJob" unless logger_tagged_by_active_job?
  39. logger.tagged(*tags) { yield }
  40. else
  41. yield
  42. end
  43. end
  44. 1 def logger_tagged_by_active_job?
  45. logger.formatter.current_tags.include?("ActiveJob")
  46. end
  47. 1 class LogSubscriber < ActiveSupport::LogSubscriber #:nodoc:
  48. 1 def enqueue(event)
  49. info do
  50. job = event.payload[:job]
  51. "Enqueued #{job.class.name} (Job ID: #{job.job_id}) to #{queue_name(event)}" + args_info(job)
  52. end
  53. end
  54. 1 def enqueue_at(event)
  55. info do
  56. job = event.payload[:job]
  57. "Enqueued #{job.class.name} (Job ID: #{job.job_id}) to #{queue_name(event)} at #{scheduled_at(event)}" + args_info(job)
  58. end
  59. end
  60. 1 def perform_start(event)
  61. info do
  62. job = event.payload[:job]
  63. "Performing #{job.class.name} (Job ID: #{job.job_id}) from #{queue_name(event)}" + args_info(job)
  64. end
  65. end
  66. 1 def perform(event)
  67. job = event.payload[:job]
  68. ex = event.payload[:exception_object]
  69. if ex
  70. error do
  71. "Error performing #{job.class.name} (Job ID: #{job.job_id}) from #{queue_name(event)} in #{event.duration.round(2)}ms: #{ex.class} (#{ex.message}):\n" + Array(ex.backtrace).join("\n")
  72. end
  73. else
  74. info do
  75. "Performed #{job.class.name} (Job ID: #{job.job_id}) from #{queue_name(event)} in #{event.duration.round(2)}ms"
  76. end
  77. end
  78. end
  79. 1 private
  80. 1 def queue_name(event)
  81. event.payload[:adapter].class.name.demodulize.remove("Adapter") + "(#{event.payload[:job].queue_name})"
  82. end
  83. 1 def args_info(job)
  84. if job.arguments.any?
  85. " with arguments: " +
  86. job.arguments.map { |arg| format(arg).inspect }.join(", ")
  87. else
  88. ""
  89. end
  90. end
  91. 1 def format(arg)
  92. case arg
  93. when Hash
  94. arg.transform_values { |value| format(value) }
  95. when Array
  96. arg.map { |value| format(value) }
  97. when GlobalID::Identification
  98. arg.to_global_id rescue arg
  99. else
  100. arg
  101. end
  102. end
  103. 1 def scheduled_at(event)
  104. Time.at(event.payload[:job].scheduled_at).utc
  105. end
  106. 1 def logger
  107. ActiveJob::Base.logger
  108. end
  109. end
  110. end
  111. end
  112. 1 ActiveJob::Logging::LogSubscriber.attach_to :active_job

target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapter.rb

75.0% lines covered

28 relevant lines. 21 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/inflections"
  3. 1 module ActiveJob
  4. # The <tt>ActiveJob::QueueAdapter</tt> module is used to load the
  5. # correct adapter. The default queue adapter is the +:async+ queue.
  6. 1 module QueueAdapter #:nodoc:
  7. 1 extend ActiveSupport::Concern
  8. 1 included do
  9. 1 class_attribute :_queue_adapter_name, instance_accessor: false, instance_predicate: false
  10. 1 class_attribute :_queue_adapter, instance_accessor: false, instance_predicate: false
  11. 1 self.queue_adapter = :async
  12. end
  13. # Includes the setter method for changing the active queue adapter.
  14. 1 module ClassMethods
  15. # Returns the backend queue provider. The default queue adapter
  16. # is the +:async+ queue. See QueueAdapters for more information.
  17. 1 def queue_adapter
  18. _queue_adapter
  19. end
  20. 1 def queue_adapter_name
  21. _queue_adapter_name
  22. end
  23. # Specify the backend queue provider. The default queue adapter
  24. # is the +:async+ queue. See QueueAdapters for more
  25. # information.
  26. 1 def queue_adapter=(name_or_adapter)
  27. 2 case name_or_adapter
  28. when Symbol, String
  29. 2 queue_adapter = ActiveJob::QueueAdapters.lookup(name_or_adapter).new
  30. 2 assign_adapter(name_or_adapter.to_s, queue_adapter)
  31. else
  32. if queue_adapter?(name_or_adapter)
  33. adapter_name = "#{name_or_adapter.class.name.demodulize.remove('Adapter').underscore}"
  34. assign_adapter(adapter_name, name_or_adapter)
  35. else
  36. raise ArgumentError
  37. end
  38. end
  39. end
  40. 1 private
  41. 1 def assign_adapter(adapter_name, queue_adapter)
  42. 2 self._queue_adapter_name = adapter_name
  43. 2 self._queue_adapter = queue_adapter
  44. end
  45. 1 QUEUE_ADAPTER_METHODS = [:enqueue, :enqueue_at].freeze
  46. 1 def queue_adapter?(object)
  47. QUEUE_ADAPTER_METHODS.all? { |meth| object.respond_to?(meth) }
  48. end
  49. end
  50. end
  51. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters.rb

100.0% lines covered

20 relevant lines. 20 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveJob
  3. # == Active Job adapters
  4. #
  5. # Active Job has adapters for the following queueing backends:
  6. #
  7. # * {Backburner}[https://github.com/nesquena/backburner]
  8. # * {Delayed Job}[https://github.com/collectiveidea/delayed_job]
  9. # * {Qu}[https://github.com/bkeepers/qu]
  10. # * {Que}[https://github.com/chanks/que]
  11. # * {queue_classic}[https://github.com/QueueClassic/queue_classic]
  12. # * {Resque}[https://github.com/resque/resque]
  13. # * {Sidekiq}[http://sidekiq.org]
  14. # * {Sneakers}[https://github.com/jondot/sneakers]
  15. # * {Sucker Punch}[https://github.com/brandonhilkert/sucker_punch]
  16. # * {Active Job Async Job}[http://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/AsyncAdapter.html]
  17. # * {Active Job Inline}[http://api.rubyonrails.org/classes/ActiveJob/QueueAdapters/InlineAdapter.html]
  18. #
  19. # === Backends Features
  20. #
  21. # | | Async | Queues | Delayed | Priorities | Timeout | Retries |
  22. # |-------------------|-------|--------|------------|------------|---------|---------|
  23. # | Backburner | Yes | Yes | Yes | Yes | Job | Global |
  24. # | Delayed Job | Yes | Yes | Yes | Job | Global | Global |
  25. # | Qu | Yes | Yes | No | No | No | Global |
  26. # | Que | Yes | Yes | Yes | Job | No | Job |
  27. # | queue_classic | Yes | Yes | Yes* | No | No | No |
  28. # | Resque | Yes | Yes | Yes (Gem) | Queue | Global | Yes |
  29. # | Sidekiq | Yes | Yes | Yes | Queue | No | Job |
  30. # | Sneakers | Yes | Yes | No | Queue | Queue | No |
  31. # | Sucker Punch | Yes | Yes | Yes | No | No | No |
  32. # | Active Job Async | Yes | Yes | Yes | No | No | No |
  33. # | Active Job Inline | No | Yes | N/A | N/A | N/A | N/A |
  34. #
  35. # ==== Async
  36. #
  37. # Yes: The Queue Adapter has the ability to run the job in a non-blocking manner.
  38. # It either runs on a separate or forked process, or on a different thread.
  39. #
  40. # No: The job is run in the same process.
  41. #
  42. # ==== Queues
  43. #
  44. # Yes: Jobs may set which queue they are run in with queue_as or by using the set
  45. # method.
  46. #
  47. # ==== Delayed
  48. #
  49. # Yes: The adapter will run the job in the future through perform_later.
  50. #
  51. # (Gem): An additional gem is required to use perform_later with this adapter.
  52. #
  53. # No: The adapter will run jobs at the next opportunity and cannot use perform_later.
  54. #
  55. # N/A: The adapter does not support queueing.
  56. #
  57. # NOTE:
  58. # queue_classic supports job scheduling since version 3.1.
  59. # For older versions you can use the queue_classic-later gem.
  60. #
  61. # ==== Priorities
  62. #
  63. # The order in which jobs are processed can be configured differently depending
  64. # on the adapter.
  65. #
  66. # Job: Any class inheriting from the adapter may set the priority on the job
  67. # object relative to other jobs.
  68. #
  69. # Queue: The adapter can set the priority for job queues, when setting a queue
  70. # with Active Job this will be respected.
  71. #
  72. # Yes: Allows the priority to be set on the job object, at the queue level or
  73. # as default configuration option.
  74. #
  75. # No: Does not allow the priority of jobs to be configured.
  76. #
  77. # N/A: The adapter does not support queueing, and therefore sorting them.
  78. #
  79. # ==== Timeout
  80. #
  81. # When a job will stop after the allotted time.
  82. #
  83. # Job: The timeout can be set for each instance of the job class.
  84. #
  85. # Queue: The timeout is set for all jobs on the queue.
  86. #
  87. # Global: The adapter is configured that all jobs have a maximum run time.
  88. #
  89. # N/A: This adapter does not run in a separate process, and therefore timeout
  90. # is unsupported.
  91. #
  92. # ==== Retries
  93. #
  94. # Job: The number of retries can be set per instance of the job class.
  95. #
  96. # Yes: The Number of retries can be configured globally, for each instance or
  97. # on the queue. This adapter may also present failed instances of the job class
  98. # that can be restarted.
  99. #
  100. # Global: The adapter has a global number of retries.
  101. #
  102. # N/A: The adapter does not run in a separate process, and therefore doesn't
  103. # support retries.
  104. #
  105. # === Async and Inline Queue Adapters
  106. #
  107. # Active Job has two built-in queue adapters intended for development and
  108. # testing: +:async+ and +:inline+.
  109. 1 module QueueAdapters
  110. 1 extend ActiveSupport::Autoload
  111. 1 autoload :AsyncAdapter
  112. 1 autoload :InlineAdapter
  113. 1 autoload :BackburnerAdapter
  114. 1 autoload :DelayedJobAdapter
  115. 1 autoload :QuAdapter
  116. 1 autoload :QueAdapter
  117. 1 autoload :QueueClassicAdapter
  118. 1 autoload :ResqueAdapter
  119. 1 autoload :SidekiqAdapter
  120. 1 autoload :SneakersAdapter
  121. 1 autoload :SuckerPunchAdapter
  122. 1 autoload :TestAdapter
  123. 1 ADAPTER = "Adapter".freeze
  124. 1 private_constant :ADAPTER
  125. 1 class << self
  126. # Returns adapter for specified name.
  127. #
  128. # ActiveJob::QueueAdapters.lookup(:sidekiq)
  129. # # => ActiveJob::QueueAdapters::SidekiqAdapter
  130. 1 def lookup(name)
  131. 2 const_get(name.to_s.camelize << ADAPTER)
  132. end
  133. end
  134. end
  135. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_adapters/async_adapter.rb

59.09% lines covered

44 relevant lines. 26 lines covered and 18 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "securerandom"
  3. 1 require "concurrent/scheduled_task"
  4. 1 require "concurrent/executor/thread_pool_executor"
  5. 1 require "concurrent/utility/processor_counter"
  6. 1 module ActiveJob
  7. 1 module QueueAdapters
  8. # == Active Job Async adapter
  9. #
  10. # The Async adapter runs jobs with an in-process thread pool.
  11. #
  12. # This is the default queue adapter. It's well-suited for dev/test since
  13. # it doesn't need an external infrastructure, but it's a poor fit for
  14. # production since it drops pending jobs on restart.
  15. #
  16. # To use this adapter, set queue adapter to +:async+:
  17. #
  18. # config.active_job.queue_adapter = :async
  19. #
  20. # To configure the adapter's thread pool, instantiate the adapter and
  21. # pass your own config:
  22. #
  23. # config.active_job.queue_adapter = ActiveJob::QueueAdapters::AsyncAdapter.new \
  24. # min_threads: 1,
  25. # max_threads: 2 * Concurrent.processor_count,
  26. # idletime: 600.seconds
  27. #
  28. # The adapter uses a {Concurrent Ruby}[https://github.com/ruby-concurrency/concurrent-ruby] thread pool to schedule and execute
  29. # jobs. Since jobs share a single thread pool, long-running jobs will block
  30. # short-lived jobs. Fine for dev/test; bad for production.
  31. 1 class AsyncAdapter
  32. # See {Concurrent::ThreadPoolExecutor}[https://ruby-concurrency.github.io/concurrent-ruby/Concurrent/ThreadPoolExecutor.html] for executor options.
  33. 1 def initialize(**executor_options)
  34. 2 @scheduler = Scheduler.new(**executor_options)
  35. end
  36. 1 def enqueue(job) #:nodoc:
  37. @scheduler.enqueue JobWrapper.new(job), queue_name: job.queue_name
  38. end
  39. 1 def enqueue_at(job, timestamp) #:nodoc:
  40. @scheduler.enqueue_at JobWrapper.new(job), timestamp, queue_name: job.queue_name
  41. end
  42. # Gracefully stop processing jobs. Finishes in-progress work and handles
  43. # any new jobs following the executor's fallback policy (`caller_runs`).
  44. # Waits for termination by default. Pass `wait: false` to continue.
  45. 1 def shutdown(wait: true) #:nodoc:
  46. @scheduler.shutdown wait: wait
  47. end
  48. # Used for our test suite.
  49. 1 def immediate=(immediate) #:nodoc:
  50. @scheduler.immediate = immediate
  51. end
  52. # Note that we don't actually need to serialize the jobs since we're
  53. # performing them in-process, but we do so anyway for parity with other
  54. # adapters and deployment environments. Otherwise, serialization bugs
  55. # may creep in undetected.
  56. 1 class JobWrapper #:nodoc:
  57. 1 def initialize(job)
  58. job.provider_job_id = SecureRandom.uuid
  59. @job_data = job.serialize
  60. end
  61. 1 def perform
  62. Base.execute @job_data
  63. end
  64. end
  65. 1 class Scheduler #:nodoc:
  66. DEFAULT_EXECUTOR_OPTIONS = {
  67. min_threads: 0,
  68. max_threads: Concurrent.processor_count,
  69. auto_terminate: true,
  70. idletime: 60, # 1 minute
  71. max_queue: 0, # unlimited
  72. fallback_policy: :caller_runs # shouldn't matter -- 0 max queue
  73. }.freeze
  74. 1 attr_accessor :immediate
  75. 1 def initialize(**options)
  76. 2 self.immediate = false
  77. 2 @immediate_executor = Concurrent::ImmediateExecutor.new
  78. 2 @async_executor = Concurrent::ThreadPoolExecutor.new(DEFAULT_EXECUTOR_OPTIONS.merge(options))
  79. end
  80. 1 def enqueue(job, queue_name:)
  81. executor.post(job, &:perform)
  82. end
  83. 1 def enqueue_at(job, timestamp, queue_name:)
  84. delay = timestamp - Time.current.to_f
  85. if delay > 0
  86. Concurrent::ScheduledTask.execute(delay, args: [job], executor: executor, &:perform)
  87. else
  88. enqueue(job, queue_name: queue_name)
  89. end
  90. end
  91. 1 def shutdown(wait: true)
  92. @async_executor.shutdown
  93. @async_executor.wait_for_termination if wait
  94. end
  95. 1 def executor
  96. immediate ? @immediate_executor : @async_executor
  97. end
  98. end
  99. end
  100. end
  101. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_name.rb

66.67% lines covered

21 relevant lines. 14 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveJob
  3. 1 module QueueName
  4. 1 extend ActiveSupport::Concern
  5. # Includes the ability to override the default queue name and prefix.
  6. 1 module ClassMethods
  7. 1 mattr_accessor :queue_name_prefix
  8. 1 mattr_accessor :default_queue_name, default: "default"
  9. # Specifies the name of the queue to process the job on.
  10. #
  11. # class PublishToFeedJob < ActiveJob::Base
  12. # queue_as :feeds
  13. #
  14. # def perform(post)
  15. # post.to_feed!
  16. # end
  17. # end
  18. 1 def queue_as(part_name = nil, &block)
  19. 2 if block_given?
  20. 2 self.queue_name = block
  21. else
  22. self.queue_name = queue_name_from_part(part_name)
  23. end
  24. end
  25. 1 def queue_name_from_part(part_name) #:nodoc:
  26. queue_name = part_name || default_queue_name
  27. name_parts = [queue_name_prefix.presence, queue_name]
  28. name_parts.compact.join(queue_name_delimiter)
  29. end
  30. end
  31. 1 included do
  32. 1 class_attribute :queue_name, instance_accessor: false, default: default_queue_name
  33. 1 class_attribute :queue_name_delimiter, instance_accessor: false, default: "_"
  34. end
  35. # Returns the name of the queue the job will be run on.
  36. 1 def queue_name
  37. if @queue_name.is_a?(Proc)
  38. @queue_name = self.class.queue_name_from_part(instance_exec(&@queue_name))
  39. end
  40. @queue_name
  41. end
  42. end
  43. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/queue_priority.rb

60.0% lines covered

15 relevant lines. 9 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveJob
  3. 1 module QueuePriority
  4. 1 extend ActiveSupport::Concern
  5. # Includes the ability to override the default queue priority.
  6. 1 module ClassMethods
  7. 1 mattr_accessor :default_priority
  8. # Specifies the priority of the queue to create the job with.
  9. #
  10. # class PublishToFeedJob < ActiveJob::Base
  11. # queue_with_priority 50
  12. #
  13. # def perform(post)
  14. # post.to_feed!
  15. # end
  16. # end
  17. #
  18. # Specify either an argument or a block.
  19. 1 def queue_with_priority(priority = nil, &block)
  20. if block_given?
  21. self.priority = block
  22. else
  23. self.priority = priority
  24. end
  25. end
  26. end
  27. 1 included do
  28. 1 class_attribute :priority, instance_accessor: false, default: default_priority
  29. end
  30. # Returns the priority that the job will be created with
  31. 1 def priority
  32. if @priority.is_a?(Proc)
  33. @priority = instance_exec(&@priority)
  34. end
  35. @priority
  36. end
  37. end
  38. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/test_helper.rb

27.87% lines covered

122 relevant lines. 34 lines covered and 88 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/class/subclasses"
  3. 1 require "active_support/core_ext/hash/keys"
  4. 1 module ActiveJob
  5. # Provides helper methods for testing Active Job
  6. 1 module TestHelper
  7. 1 delegate :enqueued_jobs, :enqueued_jobs=,
  8. :performed_jobs, :performed_jobs=,
  9. to: :queue_adapter
  10. 1 module TestQueueAdapter
  11. 1 extend ActiveSupport::Concern
  12. 1 included do
  13. 1 class_attribute :_test_adapter, instance_accessor: false, instance_predicate: false
  14. end
  15. 1 module ClassMethods
  16. 1 def queue_adapter
  17. self._test_adapter.nil? ? super : self._test_adapter
  18. end
  19. 1 def disable_test_adapter
  20. self._test_adapter = nil
  21. end
  22. 1 def enable_test_adapter(test_adapter)
  23. self._test_adapter = test_adapter
  24. end
  25. end
  26. end
  27. 1 ActiveJob::Base.include(TestQueueAdapter)
  28. 1 def before_setup # :nodoc:
  29. test_adapter = queue_adapter_for_test
  30. queue_adapter_changed_jobs.each do |klass|
  31. klass.enable_test_adapter(test_adapter)
  32. end
  33. clear_enqueued_jobs
  34. clear_performed_jobs
  35. super
  36. end
  37. 1 def after_teardown # :nodoc:
  38. super
  39. queue_adapter_changed_jobs.each { |klass| klass.disable_test_adapter }
  40. end
  41. # Specifies the queue adapter to use with all active job test helpers.
  42. #
  43. # Returns an instance of the queue adapter and defaults to
  44. # <tt>ActiveJob::QueueAdapters::TestAdapter</tt>.
  45. #
  46. # Note: The adapter provided by this method must provide some additional
  47. # methods from those expected of a standard <tt>ActiveJob::QueueAdapter</tt>
  48. # in order to be used with the active job test helpers. Refer to
  49. # <tt>ActiveJob::QueueAdapters::TestAdapter</tt>.
  50. 1 def queue_adapter_for_test
  51. ActiveJob::QueueAdapters::TestAdapter.new
  52. end
  53. # Asserts that the number of enqueued jobs matches the given number.
  54. #
  55. # def test_jobs
  56. # assert_enqueued_jobs 0
  57. # HelloJob.perform_later('david')
  58. # assert_enqueued_jobs 1
  59. # HelloJob.perform_later('abdelkader')
  60. # assert_enqueued_jobs 2
  61. # end
  62. #
  63. # If a block is passed, that block will cause the specified number of
  64. # jobs to be enqueued.
  65. #
  66. # def test_jobs_again
  67. # assert_enqueued_jobs 1 do
  68. # HelloJob.perform_later('cristian')
  69. # end
  70. #
  71. # assert_enqueued_jobs 2 do
  72. # HelloJob.perform_later('aaron')
  73. # HelloJob.perform_later('rafael')
  74. # end
  75. # end
  76. #
  77. # The number of times a specific job was enqueued can be asserted.
  78. #
  79. # def test_logging_job
  80. # assert_enqueued_jobs 1, only: LoggingJob do
  81. # LoggingJob.perform_later
  82. # HelloJob.perform_later('jeremy')
  83. # end
  84. # end
  85. #
  86. # The number of times a job except specific class was enqueued can be asserted.
  87. #
  88. # def test_logging_job
  89. # assert_enqueued_jobs 1, except: HelloJob do
  90. # LoggingJob.perform_later
  91. # HelloJob.perform_later('jeremy')
  92. # end
  93. # end
  94. #
  95. # The number of times a job is enqueued to a specific queue can also be asserted.
  96. #
  97. # def test_logging_job
  98. # assert_enqueued_jobs 2, queue: 'default' do
  99. # LoggingJob.perform_later
  100. # HelloJob.perform_later('elfassy')
  101. # end
  102. # end
  103. 1 def assert_enqueued_jobs(number, only: nil, except: nil, queue: nil)
  104. if block_given?
  105. original_count = enqueued_jobs_size(only: only, except: except, queue: queue)
  106. yield
  107. new_count = enqueued_jobs_size(only: only, except: except, queue: queue)
  108. assert_equal number, new_count - original_count, "#{number} jobs expected, but #{new_count - original_count} were enqueued"
  109. else
  110. actual_count = enqueued_jobs_size(only: only, except: except, queue: queue)
  111. assert_equal number, actual_count, "#{number} jobs expected, but #{actual_count} were enqueued"
  112. end
  113. end
  114. # Asserts that no jobs have been enqueued.
  115. #
  116. # def test_jobs
  117. # assert_no_enqueued_jobs
  118. # HelloJob.perform_later('jeremy')
  119. # assert_enqueued_jobs 1
  120. # end
  121. #
  122. # If a block is passed, that block should not cause any job to be enqueued.
  123. #
  124. # def test_jobs_again
  125. # assert_no_enqueued_jobs do
  126. # # No job should be enqueued from this block
  127. # end
  128. # end
  129. #
  130. # It can be asserted that no jobs of a specific kind are enqueued:
  131. #
  132. # def test_no_logging
  133. # assert_no_enqueued_jobs only: LoggingJob do
  134. # HelloJob.perform_later('jeremy')
  135. # end
  136. # end
  137. #
  138. # It can be asserted that no jobs except specific class are enqueued:
  139. #
  140. # def test_no_logging
  141. # assert_no_enqueued_jobs except: HelloJob do
  142. # HelloJob.perform_later('jeremy')
  143. # end
  144. # end
  145. #
  146. # Note: This assertion is simply a shortcut for:
  147. #
  148. # assert_enqueued_jobs 0, &block
  149. 1 def assert_no_enqueued_jobs(only: nil, except: nil, &block)
  150. assert_enqueued_jobs 0, only: only, except: except, &block
  151. end
  152. # Asserts that the number of performed jobs matches the given number.
  153. # If no block is passed, <tt>perform_enqueued_jobs</tt>
  154. # must be called around the job call.
  155. #
  156. # def test_jobs
  157. # assert_performed_jobs 0
  158. #
  159. # perform_enqueued_jobs do
  160. # HelloJob.perform_later('xavier')
  161. # end
  162. # assert_performed_jobs 1
  163. #
  164. # perform_enqueued_jobs do
  165. # HelloJob.perform_later('yves')
  166. # assert_performed_jobs 2
  167. # end
  168. # end
  169. #
  170. # If a block is passed, that block should cause the specified number of
  171. # jobs to be performed.
  172. #
  173. # def test_jobs_again
  174. # assert_performed_jobs 1 do
  175. # HelloJob.perform_later('robin')
  176. # end
  177. #
  178. # assert_performed_jobs 2 do
  179. # HelloJob.perform_later('carlos')
  180. # HelloJob.perform_later('sean')
  181. # end
  182. # end
  183. #
  184. # The block form supports filtering. If the :only option is specified,
  185. # then only the listed job(s) will be performed.
  186. #
  187. # def test_hello_job
  188. # assert_performed_jobs 1, only: HelloJob do
  189. # HelloJob.perform_later('jeremy')
  190. # LoggingJob.perform_later
  191. # end
  192. # end
  193. #
  194. # Also if the :except option is specified,
  195. # then the job(s) except specific class will be performed.
  196. #
  197. # def test_hello_job
  198. # assert_performed_jobs 1, except: LoggingJob do
  199. # HelloJob.perform_later('jeremy')
  200. # LoggingJob.perform_later
  201. # end
  202. # end
  203. #
  204. # An array may also be specified, to support testing multiple jobs.
  205. #
  206. # def test_hello_and_logging_jobs
  207. # assert_nothing_raised do
  208. # assert_performed_jobs 2, only: [HelloJob, LoggingJob] do
  209. # HelloJob.perform_later('jeremy')
  210. # LoggingJob.perform_later('stewie')
  211. # RescueJob.perform_later('david')
  212. # end
  213. # end
  214. # end
  215. 1 def assert_performed_jobs(number, only: nil, except: nil)
  216. if block_given?
  217. original_count = performed_jobs.size
  218. perform_enqueued_jobs(only: only, except: except) { yield }
  219. new_count = performed_jobs.size
  220. assert_equal number, new_count - original_count,
  221. "#{number} jobs expected, but #{new_count - original_count} were performed"
  222. else
  223. performed_jobs_size = performed_jobs.size
  224. assert_equal number, performed_jobs_size, "#{number} jobs expected, but #{performed_jobs_size} were performed"
  225. end
  226. end
  227. # Asserts that no jobs have been performed.
  228. #
  229. # def test_jobs
  230. # assert_no_performed_jobs
  231. #
  232. # perform_enqueued_jobs do
  233. # HelloJob.perform_later('matthew')
  234. # assert_performed_jobs 1
  235. # end
  236. # end
  237. #
  238. # If a block is passed, that block should not cause any job to be performed.
  239. #
  240. # def test_jobs_again
  241. # assert_no_performed_jobs do
  242. # # No job should be performed from this block
  243. # end
  244. # end
  245. #
  246. # The block form supports filtering. If the :only option is specified,
  247. # then only the listed job(s) will not be performed.
  248. #
  249. # def test_no_logging
  250. # assert_no_performed_jobs only: LoggingJob do
  251. # HelloJob.perform_later('jeremy')
  252. # end
  253. # end
  254. #
  255. # Also if the :except option is specified,
  256. # then the job(s) except specific class will not be performed.
  257. #
  258. # def test_no_logging
  259. # assert_no_performed_jobs except: HelloJob do
  260. # HelloJob.perform_later('jeremy')
  261. # end
  262. # end
  263. #
  264. # Note: This assertion is simply a shortcut for:
  265. #
  266. # assert_performed_jobs 0, &block
  267. 1 def assert_no_performed_jobs(only: nil, except: nil, &block)
  268. assert_performed_jobs 0, only: only, except: except, &block
  269. end
  270. # Asserts that the job passed in the block has been enqueued with the given arguments.
  271. #
  272. # def test_assert_enqueued_with
  273. # assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low') do
  274. # MyJob.perform_later(1,2,3)
  275. # end
  276. #
  277. # assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon) do
  278. # MyJob.set(wait_until: Date.tomorrow.noon).perform_later
  279. # end
  280. # end
  281. 1 def assert_enqueued_with(job: nil, args: nil, at: nil, queue: nil)
  282. original_enqueued_jobs_count = enqueued_jobs.count
  283. expected = { job: job, args: args, at: at, queue: queue }.compact
  284. expected_args = prepare_args_for_assertion(expected)
  285. yield
  286. in_block_jobs = enqueued_jobs.drop(original_enqueued_jobs_count)
  287. matching_job = in_block_jobs.find do |in_block_job|
  288. deserialized_job = deserialize_args_for_assertion(in_block_job)
  289. expected_args.all? { |key, value| value == deserialized_job[key] }
  290. end
  291. assert matching_job, "No enqueued job found with #{expected}"
  292. instantiate_job(matching_job)
  293. end
  294. # Asserts that the job passed in the block has been performed with the given arguments.
  295. #
  296. # def test_assert_performed_with
  297. # assert_performed_with(job: MyJob, args: [1,2,3], queue: 'high') do
  298. # MyJob.perform_later(1,2,3)
  299. # end
  300. #
  301. # assert_performed_with(job: MyJob, at: Date.tomorrow.noon) do
  302. # MyJob.set(wait_until: Date.tomorrow.noon).perform_later
  303. # end
  304. # end
  305. 1 def assert_performed_with(job: nil, args: nil, at: nil, queue: nil)
  306. original_performed_jobs_count = performed_jobs.count
  307. expected = { job: job, args: args, at: at, queue: queue }.compact
  308. expected_args = prepare_args_for_assertion(expected)
  309. perform_enqueued_jobs { yield }
  310. in_block_jobs = performed_jobs.drop(original_performed_jobs_count)
  311. matching_job = in_block_jobs.find do |in_block_job|
  312. deserialized_job = deserialize_args_for_assertion(in_block_job)
  313. expected_args.all? { |key, value| value == deserialized_job[key] }
  314. end
  315. assert matching_job, "No performed job found with #{expected}"
  316. instantiate_job(matching_job)
  317. end
  318. # Performs all enqueued jobs in the duration of the block.
  319. #
  320. # def test_perform_enqueued_jobs
  321. # perform_enqueued_jobs do
  322. # MyJob.perform_later(1, 2, 3)
  323. # end
  324. # assert_performed_jobs 1
  325. # end
  326. #
  327. # This method also supports filtering. If the +:only+ option is specified,
  328. # then only the listed job(s) will be performed.
  329. #
  330. # def test_perform_enqueued_jobs_with_only
  331. # perform_enqueued_jobs(only: MyJob) do
  332. # MyJob.perform_later(1, 2, 3) # will be performed
  333. # HelloJob.perform_later(1, 2, 3) # will not be performed
  334. # end
  335. # assert_performed_jobs 1
  336. # end
  337. #
  338. # Also if the +:except+ option is specified,
  339. # then the job(s) except specific class will be performed.
  340. #
  341. # def test_perform_enqueued_jobs_with_except
  342. # perform_enqueued_jobs(except: HelloJob) do
  343. # MyJob.perform_later(1, 2, 3) # will be performed
  344. # HelloJob.perform_later(1, 2, 3) # will not be performed
  345. # end
  346. # assert_performed_jobs 1
  347. # end
  348. #
  349. 1 def perform_enqueued_jobs(only: nil, except: nil)
  350. validate_option(only: only, except: except)
  351. old_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
  352. old_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
  353. old_filter = queue_adapter.filter
  354. old_reject = queue_adapter.reject
  355. begin
  356. queue_adapter.perform_enqueued_jobs = true
  357. queue_adapter.perform_enqueued_at_jobs = true
  358. queue_adapter.filter = only
  359. queue_adapter.reject = except
  360. yield
  361. ensure
  362. queue_adapter.perform_enqueued_jobs = old_perform_enqueued_jobs
  363. queue_adapter.perform_enqueued_at_jobs = old_perform_enqueued_at_jobs
  364. queue_adapter.filter = old_filter
  365. queue_adapter.reject = old_reject
  366. end
  367. end
  368. # Accesses the queue_adapter set by ActiveJob::Base.
  369. #
  370. # def test_assert_job_has_custom_queue_adapter_set
  371. # assert_instance_of CustomQueueAdapter, HelloJob.queue_adapter
  372. # end
  373. 1 def queue_adapter
  374. ActiveJob::Base.queue_adapter
  375. end
  376. 1 private
  377. 1 def clear_enqueued_jobs
  378. enqueued_jobs.clear
  379. end
  380. 1 def clear_performed_jobs
  381. performed_jobs.clear
  382. end
  383. 1 def enqueued_jobs_size(only: nil, except: nil, queue: nil)
  384. validate_option(only: only, except: except)
  385. enqueued_jobs.count do |job|
  386. job_class = job.fetch(:job)
  387. if only
  388. next false unless Array(only).include?(job_class)
  389. elsif except
  390. next false if Array(except).include?(job_class)
  391. end
  392. if queue
  393. next false unless queue.to_s == job.fetch(:queue, job_class.queue_name)
  394. end
  395. true
  396. end
  397. end
  398. 1 def prepare_args_for_assertion(args)
  399. args.dup.tap do |arguments|
  400. arguments[:at] = arguments[:at].to_f if arguments[:at]
  401. end
  402. end
  403. 1 def deserialize_args_for_assertion(job)
  404. job.dup.tap do |new_job|
  405. new_job[:args] = ActiveJob::Arguments.deserialize(new_job[:args]) if new_job[:args]
  406. end
  407. end
  408. 1 def instantiate_job(payload)
  409. args = ActiveJob::Arguments.deserialize(payload[:args])
  410. job = payload[:job].new(*args)
  411. job.scheduled_at = Time.at(payload[:at]) if payload.key?(:at)
  412. job.queue_name = payload[:queue]
  413. job
  414. end
  415. 1 def queue_adapter_changed_jobs
  416. (ActiveJob::Base.descendants << ActiveJob::Base).select do |klass|
  417. # only override explicitly set adapters, a quirk of `class_attribute`
  418. klass.singleton_class.public_instance_methods(false).include?(:_queue_adapter)
  419. end
  420. end
  421. 1 def validate_option(only: nil, except: nil)
  422. raise ArgumentError, "Cannot specify both `:only` and `:except` options." if only && except
  423. end
  424. end
  425. end

target/rubygems/gems/activejob-5.2.3/lib/active_job/translation.rb

83.33% lines covered

6 relevant lines. 5 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveJob
  3. 1 module Translation #:nodoc:
  4. 1 extend ActiveSupport::Concern
  5. 1 included do
  6. 1 around_perform do |job, block, _|
  7. I18n.with_locale(job.locale, &block)
  8. end
  9. end
  10. end
  11. end

target/rubygems/gems/activemodel-5.2.3/lib/active_model/model.rb

78.57% lines covered

14 relevant lines. 11 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveModel
  3. # == Active \Model \Basic \Model
  4. #
  5. # Includes the required interface for an object to interact with
  6. # Action Pack and Action View, using different Active Model modules.
  7. # It includes model name introspections, conversions, translations and
  8. # validations. Besides that, it allows you to initialize the object with a
  9. # hash of attributes, pretty much like Active Record does.
  10. #
  11. # A minimal implementation could be:
  12. #
  13. # class Person
  14. # include ActiveModel::Model
  15. # attr_accessor :name, :age
  16. # end
  17. #
  18. # person = Person.new(name: 'bob', age: '18')
  19. # person.name # => "bob"
  20. # person.age # => "18"
  21. #
  22. # Note that, by default, <tt>ActiveModel::Model</tt> implements <tt>persisted?</tt>
  23. # to return +false+, which is the most common case. You may want to override
  24. # it in your class to simulate a different scenario:
  25. #
  26. # class Person
  27. # include ActiveModel::Model
  28. # attr_accessor :id, :name
  29. #
  30. # def persisted?
  31. # self.id == 1
  32. # end
  33. # end
  34. #
  35. # person = Person.new(id: 1, name: 'bob')
  36. # person.persisted? # => true
  37. #
  38. # Also, if for some reason you need to run code on <tt>initialize</tt>, make
  39. # sure you call +super+ if you want the attributes hash initialization to
  40. # happen.
  41. #
  42. # class Person
  43. # include ActiveModel::Model
  44. # attr_accessor :id, :name, :omg
  45. #
  46. # def initialize(attributes={})
  47. # super
  48. # @omg ||= true
  49. # end
  50. # end
  51. #
  52. # person = Person.new(id: 1, name: 'bob')
  53. # person.omg # => true
  54. #
  55. # For more detailed information on other functionalities available, please
  56. # refer to the specific modules included in <tt>ActiveModel::Model</tt>
  57. # (see below).
  58. 1 module Model
  59. 1 extend ActiveSupport::Concern
  60. 1 include ActiveModel::AttributeAssignment
  61. 1 include ActiveModel::Validations
  62. 1 include ActiveModel::Conversion
  63. 1 included do
  64. 1 extend ActiveModel::Naming
  65. 1 extend ActiveModel::Translation
  66. end
  67. # Initializes a new model with the given +params+.
  68. #
  69. # class Person
  70. # include ActiveModel::Model
  71. # attr_accessor :name, :age
  72. # end
  73. #
  74. # person = Person.new(name: 'bob', age: '18')
  75. # person.name # => "bob"
  76. # person.age # => "18"
  77. 1 def initialize(attributes = {})
  78. assign_attributes(attributes) if attributes
  79. super()
  80. end
  81. # Indicates if the model is persisted. Default is +false+.
  82. #
  83. # class Person
  84. # include ActiveModel::Model
  85. # attr_accessor :id, :name
  86. # end
  87. #
  88. # person = Person.new(id: 1, name: 'bob')
  89. # person.persisted? # => false
  90. 1 def persisted?
  91. false
  92. end
  93. end
  94. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/association_relation.rb

52.38% lines covered

21 relevant lines. 11 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class AssociationRelation < Relation
  4. 1 def initialize(klass, association)
  5. super(klass)
  6. @association = association
  7. end
  8. 1 def proxy_association
  9. @association
  10. end
  11. 1 def ==(other)
  12. other == records
  13. end
  14. 1 def build(*args, &block)
  15. scoping { @association.build(*args, &block) }
  16. end
  17. 1 alias new build
  18. 1 def create(*args, &block)
  19. scoping { @association.create(*args, &block) }
  20. end
  21. 1 def create!(*args, &block)
  22. scoping { @association.create!(*args, &block) }
  23. end
  24. 1 private
  25. 1 def exec_queries
  26. super do |record|
  27. @association.set_inverse_instance_from_queries(record)
  28. yield record if block_given?
  29. end
  30. end
  31. end
  32. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/alias_tracker.rb

28.21% lines covered

39 relevant lines. 11 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/conversions"
  3. 1 module ActiveRecord
  4. 1 module Associations
  5. # Keeps track of table aliases for ActiveRecord::Associations::JoinDependency
  6. 1 class AliasTracker # :nodoc:
  7. 1 def self.create(connection, initial_table, joins)
  8. if joins.empty?
  9. aliases = Hash.new(0)
  10. else
  11. aliases = Hash.new { |h, k|
  12. h[k] = initial_count_for(connection, k, joins)
  13. }
  14. end
  15. aliases[initial_table] = 1
  16. new(connection, aliases)
  17. end
  18. 1 def self.initial_count_for(connection, name, table_joins)
  19. quoted_name = nil
  20. counts = table_joins.map do |join|
  21. if join.is_a?(Arel::Nodes::StringJoin)
  22. # quoted_name should be case ignored as some database adapters (Oracle) return quoted name in uppercase
  23. quoted_name ||= connection.quote_table_name(name)
  24. # Table names + table aliases
  25. join.left.scan(
  26. /JOIN(?:\s+\w+)?\s+(?:\S+\s+)?(?:#{quoted_name}|#{name})\sON/i
  27. ).size
  28. elsif join.is_a?(Arel::Nodes::Join)
  29. join.left.name == name ? 1 : 0
  30. elsif join.is_a?(Hash)
  31. join[name]
  32. else
  33. raise ArgumentError, "joins list should be initialized by list of Arel::Nodes::Join"
  34. end
  35. end
  36. counts.sum
  37. end
  38. # table_joins is an array of arel joins which might conflict with the aliases we assign here
  39. 1 def initialize(connection, aliases)
  40. @aliases = aliases
  41. @connection = connection
  42. end
  43. 1 def aliased_table_for(table_name, aliased_name, type_caster)
  44. if aliases[table_name].zero?
  45. # If it's zero, we can have our table_name
  46. aliases[table_name] = 1
  47. Arel::Table.new(table_name, type_caster: type_caster)
  48. else
  49. # Otherwise, we need to use an alias
  50. aliased_name = @connection.table_alias_for(aliased_name)
  51. # Update the count
  52. aliases[aliased_name] += 1
  53. table_alias = if aliases[aliased_name] > 1
  54. "#{truncate(aliased_name)}_#{aliases[aliased_name]}"
  55. else
  56. aliased_name
  57. end
  58. Arel::Table.new(table_name, type_caster: type_caster).alias(table_alias)
  59. end
  60. end
  61. 1 attr_reader :aliases
  62. 1 private
  63. 1 def truncate(name)
  64. name.slice(0, @connection.table_alias_length - 2)
  65. end
  66. end
  67. end
  68. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association.rb

34.92% lines covered

126 relevant lines. 44 lines covered and 82 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/array/wrap"
  3. 1 module ActiveRecord
  4. 1 module Associations
  5. # = Active Record Associations
  6. #
  7. # This is the root class of all associations ('+ Foo' signifies an included module Foo):
  8. #
  9. # Association
  10. # SingularAssociation
  11. # HasOneAssociation + ForeignAssociation
  12. # HasOneThroughAssociation + ThroughAssociation
  13. # BelongsToAssociation
  14. # BelongsToPolymorphicAssociation
  15. # CollectionAssociation
  16. # HasManyAssociation + ForeignAssociation
  17. # HasManyThroughAssociation + ThroughAssociation
  18. 1 class Association #:nodoc:
  19. 1 attr_reader :owner, :target, :reflection
  20. 1 delegate :options, to: :reflection
  21. 1 def initialize(owner, reflection)
  22. reflection.check_validity!
  23. @owner, @reflection = owner, reflection
  24. reset
  25. reset_scope
  26. end
  27. # Resets the \loaded flag to +false+ and sets the \target to +nil+.
  28. 1 def reset
  29. @loaded = false
  30. @target = nil
  31. @stale_state = nil
  32. @inversed = false
  33. end
  34. # Reloads the \target and returns +self+ on success.
  35. 1 def reload
  36. reset
  37. reset_scope
  38. load_target
  39. self unless target.nil?
  40. end
  41. # Has the \target been already \loaded?
  42. 1 def loaded?
  43. @loaded
  44. end
  45. # Asserts the \target has been loaded setting the \loaded flag to +true+.
  46. 1 def loaded!
  47. @loaded = true
  48. @stale_state = stale_state
  49. @inversed = false
  50. end
  51. # The target is stale if the target no longer points to the record(s) that the
  52. # relevant foreign_key(s) refers to. If stale, the association accessor method
  53. # on the owner will reload the target. It's up to subclasses to implement the
  54. # stale_state method if relevant.
  55. #
  56. # Note that if the target has not been loaded, it is not considered stale.
  57. 1 def stale_target?
  58. !@inversed && loaded? && @stale_state != stale_state
  59. end
  60. # Sets the target of this association to <tt>\target</tt>, and the \loaded flag to +true+.
  61. 1 def target=(target)
  62. @target = target
  63. loaded!
  64. end
  65. 1 def scope
  66. target_scope.merge!(association_scope)
  67. end
  68. # The scope for this association.
  69. #
  70. # Note that the association_scope is merged into the target_scope only when the
  71. # scope method is called. This is because at that point the call may be surrounded
  72. # by scope.scoping { ... } or with_scope { ... } etc, which affects the scope which
  73. # actually gets built.
  74. 1 def association_scope
  75. if klass
  76. @association_scope ||= AssociationScope.scope(self)
  77. end
  78. end
  79. 1 def reset_scope
  80. @association_scope = nil
  81. end
  82. # Set the inverse association, if possible
  83. 1 def set_inverse_instance(record)
  84. if inverse = inverse_association_for(record)
  85. inverse.inversed_from(owner)
  86. end
  87. record
  88. end
  89. 1 def set_inverse_instance_from_queries(record)
  90. if inverse = inverse_association_for(record)
  91. inverse.inversed_from_queries(owner)
  92. end
  93. record
  94. end
  95. # Remove the inverse association, if possible
  96. 1 def remove_inverse_instance(record)
  97. if inverse = inverse_association_for(record)
  98. inverse.inversed_from(nil)
  99. end
  100. end
  101. 1 def inversed_from(record)
  102. self.target = record
  103. @inversed = !!record
  104. end
  105. 1 alias :inversed_from_queries :inversed_from
  106. # Returns the class of the target. belongs_to polymorphic overrides this to look at the
  107. # polymorphic_type field on the owner.
  108. 1 def klass
  109. reflection.klass
  110. end
  111. # Can be overridden (i.e. in ThroughAssociation) to merge in other scopes (i.e. the
  112. # through association's scope)
  113. 1 def target_scope
  114. AssociationRelation.create(klass, self).merge!(klass.all)
  115. end
  116. 1 def extensions
  117. extensions = klass.default_extensions | reflection.extensions
  118. if reflection.scope
  119. extensions |= reflection.scope_for(klass.unscoped, owner).extensions
  120. end
  121. extensions
  122. end
  123. # Loads the \target if needed and returns it.
  124. #
  125. # This method is abstract in the sense that it relies on +find_target+,
  126. # which is expected to be provided by descendants.
  127. #
  128. # If the \target is already \loaded it is just returned. Thus, you can call
  129. # +load_target+ unconditionally to get the \target.
  130. #
  131. # ActiveRecord::RecordNotFound is rescued within the method, and it is
  132. # not reraised. The proxy is \reset and +nil+ is the return value.
  133. 1 def load_target
  134. @target = find_target if (@stale_state && stale_target?) || find_target?
  135. loaded! unless loaded?
  136. target
  137. rescue ActiveRecord::RecordNotFound
  138. reset
  139. end
  140. # We can't dump @reflection and @through_reflection since it contains the scope proc
  141. 1 def marshal_dump
  142. ivars = (instance_variables - [:@reflection, :@through_reflection]).map { |name| [name, instance_variable_get(name)] }
  143. [@reflection.name, ivars]
  144. end
  145. 1 def marshal_load(data)
  146. reflection_name, ivars = data
  147. ivars.each { |name, val| instance_variable_set(name, val) }
  148. @reflection = @owner.class._reflect_on_association(reflection_name)
  149. end
  150. 1 def initialize_attributes(record, except_from_scope_attributes = nil) #:nodoc:
  151. except_from_scope_attributes ||= {}
  152. skip_assign = [reflection.foreign_key, reflection.type].compact
  153. assigned_keys = record.changed_attribute_names_to_save
  154. assigned_keys += except_from_scope_attributes.keys.map(&:to_s)
  155. attributes = scope_for_create.except!(*(assigned_keys - skip_assign))
  156. record.send(:_assign_attributes, attributes) if attributes.any?
  157. set_inverse_instance(record)
  158. end
  159. 1 def create(attributes = {}, &block)
  160. _create_record(attributes, &block)
  161. end
  162. 1 def create!(attributes = {}, &block)
  163. _create_record(attributes, true, &block)
  164. end
  165. 1 private
  166. 1 def scope_for_create
  167. scope.scope_for_create
  168. end
  169. 1 def find_target?
  170. !loaded? && (!owner.new_record? || foreign_key_present?) && klass
  171. end
  172. 1 def creation_attributes
  173. attributes = {}
  174. if (reflection.has_one? || reflection.collection?) && !options[:through]
  175. attributes[reflection.foreign_key] = owner[reflection.active_record_primary_key]
  176. if reflection.type
  177. attributes[reflection.type] = owner.class.polymorphic_name
  178. end
  179. end
  180. attributes
  181. end
  182. # Sets the owner attributes on the given record
  183. 1 def set_owner_attributes(record)
  184. creation_attributes.each { |key, value| record[key] = value }
  185. end
  186. # Returns true if there is a foreign key present on the owner which
  187. # references the target. This is used to determine whether we can load
  188. # the target if the owner is currently a new record (and therefore
  189. # without a key). If the owner is a new record then foreign_key must
  190. # be present in order to load target.
  191. #
  192. # Currently implemented by belongs_to (vanilla and polymorphic) and
  193. # has_one/has_many :through associations which go through a belongs_to.
  194. 1 def foreign_key_present?
  195. false
  196. end
  197. # Raises ActiveRecord::AssociationTypeMismatch unless +record+ is of
  198. # the kind of the class of the associated objects. Meant to be used as
  199. # a sanity check when you are about to assign an associated record.
  200. 1 def raise_on_type_mismatch!(record)
  201. unless record.is_a?(reflection.klass)
  202. fresh_class = reflection.class_name.safe_constantize
  203. unless fresh_class && record.is_a?(fresh_class)
  204. message = "#{reflection.class_name}(##{reflection.klass.object_id}) expected, "\
  205. "got #{record.inspect} which is an instance of #{record.class}(##{record.class.object_id})"
  206. raise ActiveRecord::AssociationTypeMismatch, message
  207. end
  208. end
  209. end
  210. 1 def inverse_association_for(record)
  211. if invertible_for?(record)
  212. record.association(inverse_reflection_for(record).name)
  213. end
  214. end
  215. # Can be redefined by subclasses, notably polymorphic belongs_to
  216. # The record parameter is necessary to support polymorphic inverses as we must check for
  217. # the association in the specific class of the record.
  218. 1 def inverse_reflection_for(record)
  219. reflection.inverse_of
  220. end
  221. # Returns true if inverse association on the given record needs to be set.
  222. # This method is redefined by subclasses.
  223. 1 def invertible_for?(record)
  224. foreign_key_for?(record) && inverse_reflection_for(record)
  225. end
  226. # Returns true if record contains the foreign_key
  227. 1 def foreign_key_for?(record)
  228. record.has_attribute?(reflection.foreign_key)
  229. end
  230. # This should be implemented to return the values of the relevant key(s) on the owner,
  231. # so that when stale_state is different from the value stored on the last find_target,
  232. # the target is stale.
  233. #
  234. # This is only relevant to certain associations, which is why it returns +nil+ by default.
  235. 1 def stale_state
  236. end
  237. 1 def build_record(attributes)
  238. reflection.build_association(attributes) do |record|
  239. initialize_attributes(record, attributes)
  240. yield(record) if block_given?
  241. end
  242. end
  243. # Returns true if statement cache should be skipped on the association reader.
  244. 1 def skip_statement_cache?(scope)
  245. reflection.has_scope? ||
  246. scope.eager_loading? ||
  247. klass.scope_attributes? ||
  248. reflection.source_reflection.active_record.default_scopes.any?
  249. end
  250. end
  251. end
  252. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/association_scope.rb

28.72% lines covered

94 relevant lines. 27 lines covered and 67 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. 1 class AssociationScope #:nodoc:
  5. 1 def self.scope(association)
  6. INSTANCE.scope(association)
  7. end
  8. 1 def self.create(&block)
  9. 1 block ||= lambda { |val| val }
  10. 1 new(block)
  11. end
  12. 1 def initialize(value_transformation)
  13. 1 @value_transformation = value_transformation
  14. end
  15. 1 INSTANCE = create
  16. 1 def scope(association)
  17. klass = association.klass
  18. reflection = association.reflection
  19. scope = klass.unscoped
  20. owner = association.owner
  21. chain = get_chain(reflection, association, scope.alias_tracker)
  22. scope.extending! reflection.extensions
  23. add_constraints(scope, owner, chain)
  24. end
  25. 1 def self.get_bind_values(owner, chain)
  26. binds = []
  27. last_reflection = chain.last
  28. binds << last_reflection.join_id_for(owner)
  29. if last_reflection.type
  30. binds << owner.class.polymorphic_name
  31. end
  32. chain.each_cons(2).each do |reflection, next_reflection|
  33. if reflection.type
  34. binds << next_reflection.klass.polymorphic_name
  35. end
  36. end
  37. binds
  38. end
  39. # TODO Change this to private once we've dropped Ruby 2.2 support.
  40. # Workaround for Ruby 2.2 "private attribute?" warning.
  41. 1 protected
  42. 1 attr_reader :value_transformation
  43. 1 private
  44. 1 def join(table, constraint)
  45. table.create_join(table, table.create_on(constraint))
  46. end
  47. 1 def last_chain_scope(scope, reflection, owner)
  48. join_keys = reflection.join_keys
  49. key = join_keys.key
  50. foreign_key = join_keys.foreign_key
  51. table = reflection.aliased_table
  52. value = transform_value(owner[foreign_key])
  53. scope = apply_scope(scope, table, key, value)
  54. if reflection.type
  55. polymorphic_type = transform_value(owner.class.polymorphic_name)
  56. scope = apply_scope(scope, table, reflection.type, polymorphic_type)
  57. end
  58. scope
  59. end
  60. 1 def transform_value(value)
  61. value_transformation.call(value)
  62. end
  63. 1 def next_chain_scope(scope, reflection, next_reflection)
  64. join_keys = reflection.join_keys
  65. key = join_keys.key
  66. foreign_key = join_keys.foreign_key
  67. table = reflection.aliased_table
  68. foreign_table = next_reflection.aliased_table
  69. constraint = table[key].eq(foreign_table[foreign_key])
  70. if reflection.type
  71. value = transform_value(next_reflection.klass.polymorphic_name)
  72. scope = apply_scope(scope, table, reflection.type, value)
  73. end
  74. scope.joins!(join(foreign_table, constraint))
  75. end
  76. 1 class ReflectionProxy < SimpleDelegator # :nodoc:
  77. 1 attr_reader :aliased_table
  78. 1 def initialize(reflection, aliased_table)
  79. super(reflection)
  80. @aliased_table = aliased_table
  81. end
  82. 1 def all_includes; nil; end
  83. end
  84. 1 def get_chain(reflection, association, tracker)
  85. name = reflection.name
  86. chain = [Reflection::RuntimeReflection.new(reflection, association)]
  87. reflection.chain.drop(1).each do |refl|
  88. aliased_table = tracker.aliased_table_for(
  89. refl.table_name,
  90. refl.alias_candidate(name),
  91. refl.klass.type_caster
  92. )
  93. chain << ReflectionProxy.new(refl, aliased_table)
  94. end
  95. chain
  96. end
  97. 1 def add_constraints(scope, owner, chain)
  98. scope = last_chain_scope(scope, chain.last, owner)
  99. chain.each_cons(2) do |reflection, next_reflection|
  100. scope = next_chain_scope(scope, reflection, next_reflection)
  101. end
  102. chain_head = chain.first
  103. chain.reverse_each do |reflection|
  104. # Exclude the scope of the association itself, because that
  105. # was already merged in the #scope method.
  106. reflection.constraints.each do |scope_chain_item|
  107. item = eval_scope(reflection, scope_chain_item, owner)
  108. if scope_chain_item == chain_head.scope
  109. scope.merge! item.except(:where, :includes, :unscope, :order)
  110. end
  111. reflection.all_includes do
  112. scope.includes! item.includes_values
  113. end
  114. scope.unscope!(*item.unscope_values)
  115. scope.where_clause += item.where_clause
  116. scope.order_values = item.order_values | scope.order_values
  117. end
  118. end
  119. scope
  120. end
  121. 1 def apply_scope(scope, table, key, value)
  122. if scope.table == table
  123. scope.where!(key => value)
  124. else
  125. scope.where!(table.name => { key => value })
  126. end
  127. end
  128. 1 def eval_scope(reflection, scope, owner)
  129. relation = reflection.build_scope(reflection.aliased_table)
  130. relation.instance_exec(owner, &scope) || relation
  131. end
  132. end
  133. end
  134. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_association.rb

35.82% lines covered

67 relevant lines. 24 lines covered and 43 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Belongs To Association
  5. 1 class BelongsToAssociation < SingularAssociation #:nodoc:
  6. 1 def handle_dependency
  7. return unless load_target
  8. case options[:dependent]
  9. when :destroy
  10. target.destroy
  11. raise ActiveRecord::Rollback unless target.destroyed?
  12. else
  13. target.send(options[:dependent])
  14. end
  15. end
  16. 1 def replace(record)
  17. if record
  18. raise_on_type_mismatch!(record)
  19. update_counters_on_replace(record)
  20. set_inverse_instance(record)
  21. @updated = true
  22. else
  23. decrement_counters
  24. end
  25. replace_keys(record)
  26. self.target = record
  27. end
  28. 1 def inversed_from(record)
  29. replace_keys(record)
  30. super
  31. end
  32. 1 def default(&block)
  33. writer(owner.instance_exec(&block)) if reader.nil?
  34. end
  35. 1 def reset
  36. super
  37. @updated = false
  38. end
  39. 1 def updated?
  40. @updated
  41. end
  42. 1 def decrement_counters # :nodoc:
  43. update_counters(-1)
  44. end
  45. 1 def increment_counters # :nodoc:
  46. update_counters(1)
  47. end
  48. 1 def target_changed?
  49. owner.saved_change_to_attribute?(reflection.foreign_key)
  50. end
  51. 1 private
  52. 1 def update_counters(by)
  53. if require_counter_update? && foreign_key_present?
  54. if target && !stale_target?
  55. target.increment!(reflection.counter_cache_column, by, touch: reflection.options[:touch])
  56. else
  57. klass.update_counters(target_id, reflection.counter_cache_column => by, touch: reflection.options[:touch])
  58. end
  59. end
  60. end
  61. 1 def find_target?
  62. !loaded? && foreign_key_present? && klass
  63. end
  64. 1 def require_counter_update?
  65. reflection.counter_cache_column && owner.persisted?
  66. end
  67. 1 def update_counters_on_replace(record)
  68. if require_counter_update? && different_target?(record)
  69. owner.instance_variable_set :@_after_replace_counter_called, true
  70. record.increment!(reflection.counter_cache_column, touch: reflection.options[:touch])
  71. decrement_counters
  72. end
  73. end
  74. # Checks whether record is different to the current target, without loading it
  75. 1 def different_target?(record)
  76. record._read_attribute(primary_key(record)) != owner._read_attribute(reflection.foreign_key)
  77. end
  78. 1 def replace_keys(record)
  79. owner[reflection.foreign_key] = record ? record._read_attribute(primary_key(record)) : nil
  80. end
  81. 1 def primary_key(record)
  82. reflection.association_primary_key(record.class)
  83. end
  84. 1 def foreign_key_present?
  85. owner._read_attribute(reflection.foreign_key)
  86. end
  87. # NOTE - for now, we're only supporting inverse setting from belongs_to back onto
  88. # has_one associations.
  89. 1 def invertible_for?(record)
  90. inverse = inverse_reflection_for(record)
  91. inverse && inverse.has_one?
  92. end
  93. 1 def target_id
  94. if options[:primary_key]
  95. owner.send(reflection.name).try(:id)
  96. else
  97. owner._read_attribute(reflection.foreign_key)
  98. end
  99. end
  100. 1 def stale_state
  101. result = owner._read_attribute(reflection.foreign_key) { |n| owner.send(:missing_attribute, n, caller) }
  102. result && result.to_s
  103. end
  104. end
  105. end
  106. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/belongs_to_polymorphic_association.rb

55.0% lines covered

20 relevant lines. 11 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Belongs To Polymorphic Association
  5. 1 class BelongsToPolymorphicAssociation < BelongsToAssociation #:nodoc:
  6. 1 def klass
  7. type = owner[reflection.foreign_type]
  8. type.presence && type.constantize
  9. end
  10. 1 def target_changed?
  11. super || owner.saved_change_to_attribute?(reflection.foreign_type)
  12. end
  13. 1 private
  14. 1 def replace_keys(record)
  15. super
  16. owner[reflection.foreign_type] = record ? record.class.polymorphic_name : nil
  17. end
  18. 1 def different_target?(record)
  19. super || record.class != klass
  20. end
  21. 1 def inverse_reflection_for(record)
  22. reflection.polymorphic_inverse_of(record.class)
  23. end
  24. 1 def raise_on_type_mismatch!(record)
  25. # A polymorphic association cannot have a type mismatch, by definition
  26. end
  27. 1 def stale_state
  28. foreign_key = super
  29. foreign_key && [foreign_key.to_s, owner[reflection.foreign_type].to_s]
  30. end
  31. end
  32. end
  33. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/belongs_to.rb

45.16% lines covered

93 relevant lines. 42 lines covered and 51 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord::Associations::Builder # :nodoc:
  3. 1 class BelongsTo < SingularAssociation #:nodoc:
  4. 1 def self.macro
  5. 2 :belongs_to
  6. end
  7. 1 def self.valid_options(options)
  8. 2 super + [:polymorphic, :touch, :counter_cache, :optional, :default]
  9. end
  10. 1 def self.valid_dependent_options
  11. [:destroy, :delete]
  12. end
  13. 1 def self.define_callbacks(model, reflection)
  14. 2 super
  15. 2 add_counter_cache_callbacks(model, reflection) if reflection.options[:counter_cache]
  16. 2 add_touch_callbacks(model, reflection) if reflection.options[:touch]
  17. 2 add_default_callbacks(model, reflection) if reflection.options[:default]
  18. end
  19. 1 def self.define_accessors(mixin, reflection)
  20. 2 super
  21. 2 add_counter_cache_methods mixin
  22. end
  23. 1 def self.add_counter_cache_methods(mixin)
  24. 2 return if mixin.method_defined? :belongs_to_counter_cache_after_update
  25. 1 mixin.class_eval do
  26. 1 def belongs_to_counter_cache_after_update(reflection)
  27. foreign_key = reflection.foreign_key
  28. cache_column = reflection.counter_cache_column
  29. if (@_after_replace_counter_called ||= false)
  30. @_after_replace_counter_called = false
  31. elsif association(reflection.name).target_changed?
  32. if reflection.polymorphic?
  33. model = attribute_in_database(reflection.foreign_type).try(:constantize)
  34. model_was = attribute_before_last_save(reflection.foreign_type).try(:constantize)
  35. else
  36. model = reflection.klass
  37. model_was = reflection.klass
  38. end
  39. foreign_key_was = attribute_before_last_save foreign_key
  40. foreign_key = attribute_in_database foreign_key
  41. if foreign_key && model.respond_to?(:increment_counter)
  42. foreign_key = counter_cache_target(reflection, model, foreign_key)
  43. model.increment_counter(cache_column, foreign_key)
  44. end
  45. if foreign_key_was && model_was.respond_to?(:decrement_counter)
  46. foreign_key_was = counter_cache_target(reflection, model_was, foreign_key_was)
  47. model_was.decrement_counter(cache_column, foreign_key_was)
  48. end
  49. end
  50. end
  51. 1 private
  52. 1 def counter_cache_target(reflection, model, foreign_key)
  53. primary_key = reflection.association_primary_key(model)
  54. model.unscoped.where!(primary_key => foreign_key)
  55. end
  56. end
  57. end
  58. 1 def self.add_counter_cache_callbacks(model, reflection)
  59. cache_column = reflection.counter_cache_column
  60. model.after_update lambda { |record|
  61. record.belongs_to_counter_cache_after_update(reflection)
  62. }
  63. klass = reflection.class_name.safe_constantize
  64. klass.attr_readonly cache_column if klass && klass.respond_to?(:attr_readonly)
  65. end
  66. 1 def self.touch_record(o, changes, foreign_key, name, touch, touch_method) # :nodoc:
  67. old_foreign_id = changes[foreign_key] && changes[foreign_key].first
  68. if old_foreign_id
  69. association = o.association(name)
  70. reflection = association.reflection
  71. if reflection.polymorphic?
  72. foreign_type = reflection.foreign_type
  73. klass = changes[foreign_type] && changes[foreign_type].first || o.public_send(foreign_type)
  74. klass = klass.constantize
  75. else
  76. klass = association.klass
  77. end
  78. primary_key = reflection.association_primary_key(klass)
  79. old_record = klass.find_by(primary_key => old_foreign_id)
  80. if old_record
  81. if touch != true
  82. old_record.send(touch_method, touch)
  83. else
  84. old_record.send(touch_method)
  85. end
  86. end
  87. end
  88. record = o.send name
  89. if record && record.persisted?
  90. if touch != true
  91. record.send(touch_method, touch)
  92. else
  93. record.send(touch_method)
  94. end
  95. end
  96. end
  97. 1 def self.add_touch_callbacks(model, reflection)
  98. 1 foreign_key = reflection.foreign_key
  99. 1 n = reflection.name
  100. 1 touch = reflection.options[:touch]
  101. 5 callback = lambda { |changes_method| lambda { |record|
  102. BelongsTo.touch_record(record, record.send(changes_method), foreign_key, n, touch, belongs_to_touch_method)
  103. }}
  104. 1 unless reflection.counter_cache_column
  105. 1 model.after_create callback.(:saved_changes), if: :saved_changes?
  106. 1 model.after_destroy callback.(:changes_to_save)
  107. end
  108. 1 model.after_update callback.(:saved_changes), if: :saved_changes?
  109. 1 model.after_touch callback.(:changes_to_save)
  110. end
  111. 1 def self.add_default_callbacks(model, reflection)
  112. model.before_validation lambda { |o|
  113. o.association(reflection.name).default(&reflection.options[:default])
  114. }
  115. end
  116. 1 def self.add_destroy_callbacks(model, reflection)
  117. model.after_destroy lambda { |o| o.association(reflection.name).handle_dependency }
  118. end
  119. 1 def self.define_validations(model, reflection)
  120. 2 if reflection.options.key?(:required)
  121. reflection.options[:optional] = !reflection.options.delete(:required)
  122. end
  123. 2 if reflection.options[:optional].nil?
  124. 2 required = model.belongs_to_required_by_default
  125. else
  126. required = !reflection.options[:optional]
  127. end
  128. 2 super
  129. 2 if required
  130. 2 model.validates_presence_of reflection.name, message: :required
  131. end
  132. end
  133. end
  134. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/collection_association.rb

71.43% lines covered

42 relevant lines. 30 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_record/associations"
  3. 1 module ActiveRecord::Associations::Builder # :nodoc:
  4. 1 class CollectionAssociation < Association #:nodoc:
  5. 1 CALLBACKS = [:before_add, :after_add, :before_remove, :after_remove]
  6. 1 def self.valid_options(options)
  7. 1 super + [:table_name, :before_add,
  8. :after_add, :before_remove, :after_remove, :extend]
  9. end
  10. 1 def self.define_callbacks(model, reflection)
  11. 1 super
  12. 1 name = reflection.name
  13. 1 options = reflection.options
  14. 1 CALLBACKS.each { |callback_name|
  15. 4 define_callback(model, callback_name, name, options)
  16. }
  17. end
  18. 1 def self.define_extensions(model, name)
  19. 1 if block_given?
  20. extension_module_name = "#{model.name.demodulize}#{name.to_s.camelize}AssociationExtension"
  21. extension = Module.new(&Proc.new)
  22. model.parent.const_set(extension_module_name, extension)
  23. end
  24. end
  25. 1 def self.define_callback(model, callback_name, name, options)
  26. 4 full_callback_name = "#{callback_name}_for_#{name}"
  27. # TODO : why do i need method_defined? I think its because of the inheritance chain
  28. 4 model.class_attribute full_callback_name unless model.method_defined?(full_callback_name)
  29. 4 callbacks = Array(options[callback_name.to_sym]).map do |callback|
  30. case callback
  31. when Symbol
  32. ->(method, owner, record) { owner.send(callback, record) }
  33. when Proc
  34. ->(method, owner, record) { callback.call(owner, record) }
  35. else
  36. ->(method, owner, record) { callback.send(method, owner, record) }
  37. end
  38. end
  39. 4 model.send "#{full_callback_name}=", callbacks
  40. end
  41. # Defines the setter and getter methods for the collection_singular_ids.
  42. 1 def self.define_readers(mixin, name)
  43. 1 super
  44. 1 mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
  45. 1 def #{name.to_s.singularize}_ids
  46. 1 association(:#{name}).ids_reader
  47. end
  48. CODE
  49. end
  50. 1 def self.define_writers(mixin, name)
  51. 1 super
  52. 1 mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
  53. 1 def #{name.to_s.singularize}_ids=(ids)
  54. 1 association(:#{name}).ids_writer(ids)
  55. end
  56. CODE
  57. end
  58. 1 def self.wrap_scope(scope, mod)
  59. if scope
  60. if scope.arity > 0
  61. proc { |owner| instance_exec(owner, &scope).extending(mod) }
  62. else
  63. proc { instance_exec(&scope).extending(mod) }
  64. end
  65. else
  66. proc { extending(mod) }
  67. end
  68. end
  69. end
  70. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_many.rb

87.5% lines covered

8 relevant lines. 7 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord::Associations::Builder # :nodoc:
  3. 1 class HasMany < CollectionAssociation #:nodoc:
  4. 1 def self.macro
  5. 1 :has_many
  6. end
  7. 1 def self.valid_options(options)
  8. 1 super + [:primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type, :index_errors]
  9. end
  10. 1 def self.valid_dependent_options
  11. [:destroy, :delete_all, :nullify, :restrict_with_error, :restrict_with_exception]
  12. end
  13. end
  14. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/has_one.rb

81.25% lines covered

16 relevant lines. 13 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord::Associations::Builder # :nodoc:
  3. 1 class HasOne < SingularAssociation #:nodoc:
  4. 1 def self.macro
  5. 2 :has_one
  6. end
  7. 1 def self.valid_options(options)
  8. 2 valid = super + [:as]
  9. 2 valid += [:through, :source, :source_type] if options[:through]
  10. 2 valid
  11. end
  12. 1 def self.valid_dependent_options
  13. [:destroy, :delete, :nullify, :restrict_with_error, :restrict_with_exception]
  14. end
  15. 1 def self.add_destroy_callbacks(model, reflection)
  16. super unless reflection.options[:through]
  17. end
  18. 1 def self.define_validations(model, reflection)
  19. 2 super
  20. 2 if reflection.options[:required]
  21. model.validates_presence_of reflection.name, message: :required
  22. end
  23. end
  24. end
  25. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/builder/singular_association.rb

100.0% lines covered

20 relevant lines. 20 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. # This class is inherited by the has_one and belongs_to association classes
  3. 1 module ActiveRecord::Associations::Builder # :nodoc:
  4. 1 class SingularAssociation < Association #:nodoc:
  5. 1 def self.valid_options(options)
  6. 4 super + [:foreign_type, :dependent, :primary_key, :inverse_of, :required]
  7. end
  8. 1 def self.define_accessors(model, reflection)
  9. 4 super
  10. 4 mixin = model.generated_association_methods
  11. 4 name = reflection.name
  12. 4 define_constructors(mixin, name) if reflection.constructable?
  13. 4 mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
  14. 4 def reload_#{name}
  15. 4 association(:#{name}).force_reload_reader
  16. end
  17. CODE
  18. end
  19. # Defines the (build|create)_association methods for belongs_to or has_one association
  20. 1 def self.define_constructors(mixin, name)
  21. 2 mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1
  22. 2 def build_#{name}(*args, &block)
  23. 2 association(:#{name}).build(*args, &block)
  24. end
  25. 2 def create_#{name}(*args, &block)
  26. 2 association(:#{name}).create(*args, &block)
  27. end
  28. 2 def create_#{name}!(*args, &block)
  29. 2 association(:#{name}).create!(*args, &block)
  30. end
  31. CODE
  32. end
  33. end
  34. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_association.rb

17.98% lines covered

228 relevant lines. 41 lines covered and 187 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Association Collection
  5. #
  6. # CollectionAssociation is an abstract class that provides common stuff to
  7. # ease the implementation of association proxies that represent
  8. # collections. See the class hierarchy in Association.
  9. #
  10. # CollectionAssociation:
  11. # HasManyAssociation => has_many
  12. # HasManyThroughAssociation + ThroughAssociation => has_many :through
  13. #
  14. # The CollectionAssociation class provides common methods to the collections
  15. # defined by +has_and_belongs_to_many+, +has_many+ or +has_many+ with
  16. # the +:through association+ option.
  17. #
  18. # You need to be careful with assumptions regarding the target: The proxy
  19. # does not fetch records from the database until it needs them, but new
  20. # ones created with +build+ are added to the target. So, the target may be
  21. # non-empty and still lack children waiting to be read from the database.
  22. # If you look directly to the database you cannot assume that's the entire
  23. # collection because new records may have been added to the target, etc.
  24. #
  25. # If you need to work on all current children, new and existing records,
  26. # +load_target+ and the +loaded+ flag are your friends.
  27. 1 class CollectionAssociation < Association #:nodoc:
  28. # Implements the reader method, e.g. foo.items for Foo.has_many :items
  29. 1 def reader
  30. if stale_target?
  31. reload
  32. end
  33. @proxy ||= CollectionProxy.create(klass, self)
  34. @proxy.reset_scope
  35. end
  36. # Implements the writer method, e.g. foo.items= for Foo.has_many :items
  37. 1 def writer(records)
  38. replace(records)
  39. end
  40. # Implements the ids reader method, e.g. foo.item_ids for Foo.has_many :items
  41. 1 def ids_reader
  42. if loaded?
  43. target.pluck(reflection.association_primary_key)
  44. elsif !target.empty?
  45. load_target.pluck(reflection.association_primary_key)
  46. else
  47. @association_ids ||= scope.pluck(reflection.association_primary_key)
  48. end
  49. end
  50. # Implements the ids writer method, e.g. foo.item_ids= for Foo.has_many :items
  51. 1 def ids_writer(ids)
  52. primary_key = reflection.association_primary_key
  53. pk_type = klass.type_for_attribute(primary_key)
  54. ids = Array(ids).reject(&:blank?)
  55. ids.map! { |i| pk_type.cast(i) }
  56. records = klass.where(primary_key => ids).index_by do |r|
  57. r.public_send(primary_key)
  58. end.values_at(*ids).compact
  59. if records.size != ids.size
  60. found_ids = records.map { |record| record.public_send(primary_key) }
  61. not_found_ids = ids - found_ids
  62. klass.all.raise_record_not_found_exception!(ids, records.size, ids.size, primary_key, not_found_ids)
  63. else
  64. replace(records)
  65. end
  66. end
  67. 1 def reset
  68. super
  69. @target = []
  70. @association_ids = nil
  71. end
  72. 1 def find(*args)
  73. if options[:inverse_of] && loaded?
  74. args_flatten = args.flatten
  75. model = scope.klass
  76. if args_flatten.blank?
  77. error_message = "Couldn't find #{model.name} without an ID"
  78. raise RecordNotFound.new(error_message, model.name, model.primary_key, args)
  79. end
  80. result = find_by_scan(*args)
  81. result_size = Array(result).size
  82. if !result || result_size != args_flatten.size
  83. scope.raise_record_not_found_exception!(args_flatten, result_size, args_flatten.size)
  84. else
  85. result
  86. end
  87. else
  88. scope.find(*args)
  89. end
  90. end
  91. 1 def build(attributes = {}, &block)
  92. if attributes.is_a?(Array)
  93. attributes.collect { |attr| build(attr, &block) }
  94. else
  95. add_to_target(build_record(attributes, &block))
  96. end
  97. end
  98. # Add +records+ to this association. Since +<<+ flattens its argument list
  99. # and inserts each record, +push+ and +concat+ behave identically.
  100. 1 def concat(*records)
  101. records = records.flatten
  102. if owner.new_record?
  103. load_target
  104. concat_records(records)
  105. else
  106. transaction { concat_records(records) }
  107. end
  108. end
  109. # Starts a transaction in the association class's database connection.
  110. #
  111. # class Author < ActiveRecord::Base
  112. # has_many :books
  113. # end
  114. #
  115. # Author.first.books.transaction do
  116. # # same effect as calling Book.transaction
  117. # end
  118. 1 def transaction(*args)
  119. reflection.klass.transaction(*args) do
  120. yield
  121. end
  122. end
  123. # Removes all records from the association without calling callbacks
  124. # on the associated records. It honors the +:dependent+ option. However
  125. # if the +:dependent+ value is +:destroy+ then in that case the +:delete_all+
  126. # deletion strategy for the association is applied.
  127. #
  128. # You can force a particular deletion strategy by passing a parameter.
  129. #
  130. # Example:
  131. #
  132. # @author.books.delete_all(:nullify)
  133. # @author.books.delete_all(:delete_all)
  134. #
  135. # See delete for more info.
  136. 1 def delete_all(dependent = nil)
  137. if dependent && ![:nullify, :delete_all].include?(dependent)
  138. raise ArgumentError, "Valid values are :nullify or :delete_all"
  139. end
  140. dependent = if dependent
  141. dependent
  142. elsif options[:dependent] == :destroy
  143. :delete_all
  144. else
  145. options[:dependent]
  146. end
  147. delete_or_nullify_all_records(dependent).tap do
  148. reset
  149. loaded!
  150. end
  151. end
  152. # Destroy all the records from this association.
  153. #
  154. # See destroy for more info.
  155. 1 def destroy_all
  156. destroy(load_target).tap do
  157. reset
  158. loaded!
  159. end
  160. end
  161. # Removes +records+ from this association calling +before_remove+ and
  162. # +after_remove+ callbacks.
  163. #
  164. # This method is abstract in the sense that +delete_records+ has to be
  165. # provided by descendants. Note this method does not imply the records
  166. # are actually removed from the database, that depends precisely on
  167. # +delete_records+. They are in any case removed from the collection.
  168. 1 def delete(*records)
  169. delete_or_destroy(records, options[:dependent])
  170. end
  171. # Deletes the +records+ and removes them from this association calling
  172. # +before_remove+ , +after_remove+ , +before_destroy+ and +after_destroy+ callbacks.
  173. #
  174. # Note that this method removes records from the database ignoring the
  175. # +:dependent+ option.
  176. 1 def destroy(*records)
  177. delete_or_destroy(records, :destroy)
  178. end
  179. # Returns the size of the collection by executing a SELECT COUNT(*)
  180. # query if the collection hasn't been loaded, and calling
  181. # <tt>collection.size</tt> if it has.
  182. #
  183. # If the collection has been already loaded +size+ and +length+ are
  184. # equivalent. If not and you are going to need the records anyway
  185. # +length+ will take one less query. Otherwise +size+ is more efficient.
  186. #
  187. # This method is abstract in the sense that it relies on
  188. # +count_records+, which is a method descendants have to provide.
  189. 1 def size
  190. if !find_target? || loaded?
  191. target.size
  192. elsif !association_scope.group_values.empty?
  193. load_target.size
  194. elsif !association_scope.distinct_value && target.is_a?(Array)
  195. unsaved_records = target.select(&:new_record?)
  196. unsaved_records.size + count_records
  197. else
  198. count_records
  199. end
  200. end
  201. # Returns true if the collection is empty.
  202. #
  203. # If the collection has been loaded
  204. # it is equivalent to <tt>collection.size.zero?</tt>. If the
  205. # collection has not been loaded, it is equivalent to
  206. # <tt>collection.exists?</tt>. If the collection has not already been
  207. # loaded and you are going to fetch the records anyway it is better to
  208. # check <tt>collection.length.zero?</tt>.
  209. 1 def empty?
  210. if loaded?
  211. size.zero?
  212. else
  213. @target.blank? && !scope.exists?
  214. end
  215. end
  216. # Replace this collection with +other_array+. This will perform a diff
  217. # and delete/add only records that have changed.
  218. 1 def replace(other_array)
  219. other_array.each { |val| raise_on_type_mismatch!(val) }
  220. original_target = load_target.dup
  221. if owner.new_record?
  222. replace_records(other_array, original_target)
  223. else
  224. replace_common_records_in_memory(other_array, original_target)
  225. if other_array != original_target
  226. transaction { replace_records(other_array, original_target) }
  227. else
  228. other_array
  229. end
  230. end
  231. end
  232. 1 def include?(record)
  233. if record.is_a?(reflection.klass)
  234. if record.new_record?
  235. include_in_memory?(record)
  236. else
  237. loaded? ? target.include?(record) : scope.exists?(record.id)
  238. end
  239. else
  240. false
  241. end
  242. end
  243. 1 def load_target
  244. if find_target?
  245. @target = merge_target_lists(find_target, target)
  246. end
  247. loaded!
  248. target
  249. end
  250. 1 def add_to_target(record, skip_callbacks = false, &block)
  251. if association_scope.distinct_value
  252. index = @target.index(record)
  253. end
  254. replace_on_target(record, index, skip_callbacks, &block)
  255. end
  256. 1 def scope
  257. scope = super
  258. scope.none! if null_scope?
  259. scope
  260. end
  261. 1 def null_scope?
  262. owner.new_record? && !foreign_key_present?
  263. end
  264. 1 def find_from_target?
  265. loaded? ||
  266. owner.new_record? ||
  267. target.any? { |record| record.new_record? || record.changed? }
  268. end
  269. 1 private
  270. 1 def find_target
  271. scope = self.scope
  272. return scope.to_a if skip_statement_cache?(scope)
  273. conn = klass.connection
  274. sc = reflection.association_scope_cache(conn, owner) do |params|
  275. as = AssociationScope.create { params.bind }
  276. target_scope.merge!(as.scope(self))
  277. end
  278. binds = AssociationScope.get_bind_values(owner, reflection.chain)
  279. sc.execute(binds, conn) do |record|
  280. set_inverse_instance(record)
  281. end
  282. end
  283. # We have some records loaded from the database (persisted) and some that are
  284. # in-memory (memory). The same record may be represented in the persisted array
  285. # and in the memory array.
  286. #
  287. # So the task of this method is to merge them according to the following rules:
  288. #
  289. # * The final array must not have duplicates
  290. # * The order of the persisted array is to be preserved
  291. # * Any changes made to attributes on objects in the memory array are to be preserved
  292. # * Otherwise, attributes should have the value found in the database
  293. 1 def merge_target_lists(persisted, memory)
  294. return persisted if memory.empty?
  295. return memory if persisted.empty?
  296. persisted.map! do |record|
  297. if mem_record = memory.delete(record)
  298. ((record.attribute_names & mem_record.attribute_names) - mem_record.changed_attribute_names_to_save).each do |name|
  299. mem_record[name] = record[name]
  300. end
  301. mem_record
  302. else
  303. record
  304. end
  305. end
  306. persisted + memory
  307. end
  308. 1 def _create_record(attributes, raise = false, &block)
  309. unless owner.persisted?
  310. raise ActiveRecord::RecordNotSaved, "You cannot call create unless the parent is saved"
  311. end
  312. if attributes.is_a?(Array)
  313. attributes.collect { |attr| _create_record(attr, raise, &block) }
  314. else
  315. record = build_record(attributes, &block)
  316. transaction do
  317. result = nil
  318. add_to_target(record) do
  319. result = insert_record(record, true, raise) {
  320. @_was_loaded = loaded?
  321. }
  322. end
  323. raise ActiveRecord::Rollback unless result
  324. end
  325. record
  326. end
  327. end
  328. # Do the relevant stuff to insert the given record into the association collection.
  329. 1 def insert_record(record, validate = true, raise = false, &block)
  330. if raise
  331. record.save!(validate: validate, &block)
  332. else
  333. record.save(validate: validate, &block)
  334. end
  335. end
  336. 1 def delete_or_destroy(records, method)
  337. return if records.empty?
  338. records = find(records) if records.any? { |record| record.kind_of?(Integer) || record.kind_of?(String) }
  339. records = records.flatten
  340. records.each { |record| raise_on_type_mismatch!(record) }
  341. existing_records = records.reject(&:new_record?)
  342. if existing_records.empty?
  343. remove_records(existing_records, records, method)
  344. else
  345. transaction { remove_records(existing_records, records, method) }
  346. end
  347. end
  348. 1 def remove_records(existing_records, records, method)
  349. records.each { |record| callback(:before_remove, record) }
  350. delete_records(existing_records, method) if existing_records.any?
  351. records.each { |record| target.delete(record) }
  352. @association_ids = nil
  353. records.each { |record| callback(:after_remove, record) }
  354. end
  355. # Delete the given records from the association,
  356. # using one of the methods +:destroy+, +:delete_all+
  357. # or +:nullify+ (or +nil+, in which case a default is used).
  358. 1 def delete_records(records, method)
  359. raise NotImplementedError
  360. end
  361. 1 def replace_records(new_target, original_target)
  362. delete(difference(target, new_target))
  363. unless concat(difference(new_target, target))
  364. @target = original_target
  365. raise RecordNotSaved, "Failed to replace #{reflection.name} because one or more of the " \
  366. "new records could not be saved."
  367. end
  368. target
  369. end
  370. 1 def replace_common_records_in_memory(new_target, original_target)
  371. common_records = intersection(new_target, original_target)
  372. common_records.each do |record|
  373. skip_callbacks = true
  374. replace_on_target(record, @target.index(record), skip_callbacks)
  375. end
  376. end
  377. 1 def concat_records(records, raise = false)
  378. result = true
  379. records.each do |record|
  380. raise_on_type_mismatch!(record)
  381. add_to_target(record) do
  382. unless owner.new_record?
  383. result &&= insert_record(record, true, raise) {
  384. @_was_loaded = loaded?
  385. }
  386. end
  387. end
  388. end
  389. raise ActiveRecord::Rollback unless result
  390. records
  391. end
  392. 1 def replace_on_target(record, index, skip_callbacks)
  393. callback(:before_add, record) unless skip_callbacks
  394. set_inverse_instance(record)
  395. @_was_loaded = true
  396. yield(record) if block_given?
  397. if index
  398. target[index] = record
  399. elsif @_was_loaded || !loaded?
  400. @association_ids = nil
  401. target << record
  402. end
  403. callback(:after_add, record) unless skip_callbacks
  404. record
  405. ensure
  406. @_was_loaded = nil
  407. end
  408. 1 def callback(method, record)
  409. callbacks_for(method).each do |callback|
  410. callback.call(method, owner, record)
  411. end
  412. end
  413. 1 def callbacks_for(callback_name)
  414. full_callback_name = "#{callback_name}_for_#{reflection.name}"
  415. owner.class.send(full_callback_name)
  416. end
  417. 1 def include_in_memory?(record)
  418. if reflection.is_a?(ActiveRecord::Reflection::ThroughReflection)
  419. assoc = owner.association(reflection.through_reflection.name)
  420. assoc.reader.any? { |source|
  421. target_reflection = source.send(reflection.source_reflection.name)
  422. target_reflection.respond_to?(:include?) ? target_reflection.include?(record) : target_reflection == record
  423. } || target.include?(record)
  424. else
  425. target.include?(record)
  426. end
  427. end
  428. # If the :inverse_of option has been
  429. # specified, then #find scans the entire collection.
  430. 1 def find_by_scan(*args)
  431. expects_array = args.first.kind_of?(Array)
  432. ids = args.flatten.compact.map(&:to_s).uniq
  433. if ids.size == 1
  434. id = ids.first
  435. record = load_target.detect { |r| id == r.id.to_s }
  436. expects_array ? [ record ] : record
  437. else
  438. load_target.select { |r| ids.include?(r.id.to_s) }
  439. end
  440. end
  441. end
  442. end
  443. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/collection_proxy.rb

47.42% lines covered

97 relevant lines. 46 lines covered and 51 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # Association proxies in Active Record are middlemen between the object that
  5. # holds the association, known as the <tt>@owner</tt>, and the actual associated
  6. # object, known as the <tt>@target</tt>. The kind of association any proxy is
  7. # about is available in <tt>@reflection</tt>. That's an instance of the class
  8. # ActiveRecord::Reflection::AssociationReflection.
  9. #
  10. # For example, given
  11. #
  12. # class Blog < ActiveRecord::Base
  13. # has_many :posts
  14. # end
  15. #
  16. # blog = Blog.first
  17. #
  18. # the association proxy in <tt>blog.posts</tt> has the object in +blog+ as
  19. # <tt>@owner</tt>, the collection of its posts as <tt>@target</tt>, and
  20. # the <tt>@reflection</tt> object represents a <tt>:has_many</tt> macro.
  21. #
  22. # This class delegates unknown methods to <tt>@target</tt> via
  23. # <tt>method_missing</tt>.
  24. #
  25. # The <tt>@target</tt> object is not \loaded until needed. For example,
  26. #
  27. # blog.posts.count
  28. #
  29. # is computed directly through SQL and does not trigger by itself the
  30. # instantiation of the actual post records.
  31. 1 class CollectionProxy < Relation
  32. 1 def initialize(klass, association) #:nodoc:
  33. @association = association
  34. super klass
  35. extensions = association.extensions
  36. extend(*extensions) if extensions.any?
  37. end
  38. 1 def target
  39. @association.target
  40. end
  41. 1 def load_target
  42. @association.load_target
  43. end
  44. # Returns +true+ if the association has been loaded, otherwise +false+.
  45. #
  46. # person.pets.loaded? # => false
  47. # person.pets
  48. # person.pets.loaded? # => true
  49. 1 def loaded?
  50. @association.loaded?
  51. end
  52. ##
  53. # :method: select
  54. #
  55. # :call-seq:
  56. # select(*fields, &block)
  57. #
  58. # Works in two ways.
  59. #
  60. # *First:* Specify a subset of fields to be selected from the result set.
  61. #
  62. # class Person < ActiveRecord::Base
  63. # has_many :pets
  64. # end
  65. #
  66. # person.pets
  67. # # => [
  68. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  69. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  70. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  71. # # ]
  72. #
  73. # person.pets.select(:name)
  74. # # => [
  75. # # #<Pet id: nil, name: "Fancy-Fancy">,
  76. # # #<Pet id: nil, name: "Spook">,
  77. # # #<Pet id: nil, name: "Choo-Choo">
  78. # # ]
  79. #
  80. # person.pets.select(:id, :name)
  81. # # => [
  82. # # #<Pet id: 1, name: "Fancy-Fancy">,
  83. # # #<Pet id: 2, name: "Spook">,
  84. # # #<Pet id: 3, name: "Choo-Choo">
  85. # # ]
  86. #
  87. # Be careful because this also means you're initializing a model
  88. # object with only the fields that you've selected. If you attempt
  89. # to access a field except +id+ that is not in the initialized record you'll
  90. # receive:
  91. #
  92. # person.pets.select(:name).first.person_id
  93. # # => ActiveModel::MissingAttributeError: missing attribute: person_id
  94. #
  95. # *Second:* You can pass a block so it can be used just like Array#select.
  96. # This builds an array of objects from the database for the scope,
  97. # converting them into an array and iterating through them using
  98. # Array#select.
  99. #
  100. # person.pets.select { |pet| pet.name =~ /oo/ }
  101. # # => [
  102. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  103. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  104. # # ]
  105. # Finds an object in the collection responding to the +id+. Uses the same
  106. # rules as ActiveRecord::Base.find. Returns ActiveRecord::RecordNotFound
  107. # error if the object cannot be found.
  108. #
  109. # class Person < ActiveRecord::Base
  110. # has_many :pets
  111. # end
  112. #
  113. # person.pets
  114. # # => [
  115. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  116. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  117. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  118. # # ]
  119. #
  120. # person.pets.find(1) # => #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>
  121. # person.pets.find(4) # => ActiveRecord::RecordNotFound: Couldn't find Pet with 'id'=4
  122. #
  123. # person.pets.find(2) { |pet| pet.name.downcase! }
  124. # # => #<Pet id: 2, name: "fancy-fancy", person_id: 1>
  125. #
  126. # person.pets.find(2, 3)
  127. # # => [
  128. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  129. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  130. # # ]
  131. 1 def find(*args)
  132. return super if block_given?
  133. @association.find(*args)
  134. end
  135. ##
  136. # :method: first
  137. #
  138. # :call-seq:
  139. # first(limit = nil)
  140. #
  141. # Returns the first record, or the first +n+ records, from the collection.
  142. # If the collection is empty, the first form returns +nil+, and the second
  143. # form returns an empty array.
  144. #
  145. # class Person < ActiveRecord::Base
  146. # has_many :pets
  147. # end
  148. #
  149. # person.pets
  150. # # => [
  151. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  152. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  153. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  154. # # ]
  155. #
  156. # person.pets.first # => #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>
  157. #
  158. # person.pets.first(2)
  159. # # => [
  160. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  161. # # #<Pet id: 2, name: "Spook", person_id: 1>
  162. # # ]
  163. #
  164. # another_person_without.pets # => []
  165. # another_person_without.pets.first # => nil
  166. # another_person_without.pets.first(3) # => []
  167. ##
  168. # :method: second
  169. #
  170. # :call-seq:
  171. # second()
  172. #
  173. # Same as #first except returns only the second record.
  174. ##
  175. # :method: third
  176. #
  177. # :call-seq:
  178. # third()
  179. #
  180. # Same as #first except returns only the third record.
  181. ##
  182. # :method: fourth
  183. #
  184. # :call-seq:
  185. # fourth()
  186. #
  187. # Same as #first except returns only the fourth record.
  188. ##
  189. # :method: fifth
  190. #
  191. # :call-seq:
  192. # fifth()
  193. #
  194. # Same as #first except returns only the fifth record.
  195. ##
  196. # :method: forty_two
  197. #
  198. # :call-seq:
  199. # forty_two()
  200. #
  201. # Same as #first except returns only the forty second record.
  202. # Also known as accessing "the reddit".
  203. ##
  204. # :method: third_to_last
  205. #
  206. # :call-seq:
  207. # third_to_last()
  208. #
  209. # Same as #first except returns only the third-to-last record.
  210. ##
  211. # :method: second_to_last
  212. #
  213. # :call-seq:
  214. # second_to_last()
  215. #
  216. # Same as #first except returns only the second-to-last record.
  217. # Returns the last record, or the last +n+ records, from the collection.
  218. # If the collection is empty, the first form returns +nil+, and the second
  219. # form returns an empty array.
  220. #
  221. # class Person < ActiveRecord::Base
  222. # has_many :pets
  223. # end
  224. #
  225. # person.pets
  226. # # => [
  227. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  228. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  229. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  230. # # ]
  231. #
  232. # person.pets.last # => #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  233. #
  234. # person.pets.last(2)
  235. # # => [
  236. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  237. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  238. # # ]
  239. #
  240. # another_person_without.pets # => []
  241. # another_person_without.pets.last # => nil
  242. # another_person_without.pets.last(3) # => []
  243. 1 def last(limit = nil)
  244. load_target if find_from_target?
  245. super
  246. end
  247. # Gives a record (or N records if a parameter is supplied) from the collection
  248. # using the same rules as <tt>ActiveRecord::Base.take</tt>.
  249. #
  250. # class Person < ActiveRecord::Base
  251. # has_many :pets
  252. # end
  253. #
  254. # person.pets
  255. # # => [
  256. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  257. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  258. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  259. # # ]
  260. #
  261. # person.pets.take # => #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>
  262. #
  263. # person.pets.take(2)
  264. # # => [
  265. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  266. # # #<Pet id: 2, name: "Spook", person_id: 1>
  267. # # ]
  268. #
  269. # another_person_without.pets # => []
  270. # another_person_without.pets.take # => nil
  271. # another_person_without.pets.take(2) # => []
  272. 1 def take(limit = nil)
  273. load_target if find_from_target?
  274. super
  275. end
  276. # Returns a new object of the collection type that has been instantiated
  277. # with +attributes+ and linked to this object, but have not yet been saved.
  278. # You can pass an array of attributes hashes, this will return an array
  279. # with the new objects.
  280. #
  281. # class Person
  282. # has_many :pets
  283. # end
  284. #
  285. # person.pets.build
  286. # # => #<Pet id: nil, name: nil, person_id: 1>
  287. #
  288. # person.pets.build(name: 'Fancy-Fancy')
  289. # # => #<Pet id: nil, name: "Fancy-Fancy", person_id: 1>
  290. #
  291. # person.pets.build([{name: 'Spook'}, {name: 'Choo-Choo'}, {name: 'Brain'}])
  292. # # => [
  293. # # #<Pet id: nil, name: "Spook", person_id: 1>,
  294. # # #<Pet id: nil, name: "Choo-Choo", person_id: 1>,
  295. # # #<Pet id: nil, name: "Brain", person_id: 1>
  296. # # ]
  297. #
  298. # person.pets.size # => 5 # size of the collection
  299. # person.pets.count # => 0 # count from database
  300. 1 def build(attributes = {}, &block)
  301. @association.build(attributes, &block)
  302. end
  303. 1 alias_method :new, :build
  304. # Returns a new object of the collection type that has been instantiated with
  305. # attributes, linked to this object and that has already been saved (if it
  306. # passes the validations).
  307. #
  308. # class Person
  309. # has_many :pets
  310. # end
  311. #
  312. # person.pets.create(name: 'Fancy-Fancy')
  313. # # => #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>
  314. #
  315. # person.pets.create([{name: 'Spook'}, {name: 'Choo-Choo'}])
  316. # # => [
  317. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  318. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  319. # # ]
  320. #
  321. # person.pets.size # => 3
  322. # person.pets.count # => 3
  323. #
  324. # person.pets.find(1, 2, 3)
  325. # # => [
  326. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  327. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  328. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  329. # # ]
  330. 1 def create(attributes = {}, &block)
  331. @association.create(attributes, &block)
  332. end
  333. # Like #create, except that if the record is invalid, raises an exception.
  334. #
  335. # class Person
  336. # has_many :pets
  337. # end
  338. #
  339. # class Pet
  340. # validates :name, presence: true
  341. # end
  342. #
  343. # person.pets.create!(name: nil)
  344. # # => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank
  345. 1 def create!(attributes = {}, &block)
  346. @association.create!(attributes, &block)
  347. end
  348. # Replaces this collection with +other_array+. This will perform a diff
  349. # and delete/add only records that have changed.
  350. #
  351. # class Person < ActiveRecord::Base
  352. # has_many :pets
  353. # end
  354. #
  355. # person.pets
  356. # # => [#<Pet id: 1, name: "Gorby", group: "cats", person_id: 1>]
  357. #
  358. # other_pets = [Pet.new(name: 'Puff', group: 'celebrities']
  359. #
  360. # person.pets.replace(other_pets)
  361. #
  362. # person.pets
  363. # # => [#<Pet id: 2, name: "Puff", group: "celebrities", person_id: 1>]
  364. #
  365. # If the supplied array has an incorrect association type, it raises
  366. # an <tt>ActiveRecord::AssociationTypeMismatch</tt> error:
  367. #
  368. # person.pets.replace(["doo", "ggie", "gaga"])
  369. # # => ActiveRecord::AssociationTypeMismatch: Pet expected, got String
  370. 1 def replace(other_array)
  371. @association.replace(other_array)
  372. end
  373. # Deletes all the records from the collection according to the strategy
  374. # specified by the +:dependent+ option. If no +:dependent+ option is given,
  375. # then it will follow the default strategy.
  376. #
  377. # For <tt>has_many :through</tt> associations, the default deletion strategy is
  378. # +:delete_all+.
  379. #
  380. # For +has_many+ associations, the default deletion strategy is +:nullify+.
  381. # This sets the foreign keys to +NULL+.
  382. #
  383. # class Person < ActiveRecord::Base
  384. # has_many :pets # dependent: :nullify option by default
  385. # end
  386. #
  387. # person.pets.size # => 3
  388. # person.pets
  389. # # => [
  390. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  391. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  392. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  393. # # ]
  394. #
  395. # person.pets.delete_all
  396. # # => [
  397. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  398. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  399. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  400. # # ]
  401. #
  402. # person.pets.size # => 0
  403. # person.pets # => []
  404. #
  405. # Pet.find(1, 2, 3)
  406. # # => [
  407. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: nil>,
  408. # # #<Pet id: 2, name: "Spook", person_id: nil>,
  409. # # #<Pet id: 3, name: "Choo-Choo", person_id: nil>
  410. # # ]
  411. #
  412. # Both +has_many+ and <tt>has_many :through</tt> dependencies default to the
  413. # +:delete_all+ strategy if the +:dependent+ option is set to +:destroy+.
  414. # Records are not instantiated and callbacks will not be fired.
  415. #
  416. # class Person < ActiveRecord::Base
  417. # has_many :pets, dependent: :destroy
  418. # end
  419. #
  420. # person.pets.size # => 3
  421. # person.pets
  422. # # => [
  423. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  424. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  425. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  426. # # ]
  427. #
  428. # person.pets.delete_all
  429. #
  430. # Pet.find(1, 2, 3)
  431. # # => ActiveRecord::RecordNotFound: Couldn't find all Pets with 'id': (1, 2, 3)
  432. #
  433. # If it is set to <tt>:delete_all</tt>, all the objects are deleted
  434. # *without* calling their +destroy+ method.
  435. #
  436. # class Person < ActiveRecord::Base
  437. # has_many :pets, dependent: :delete_all
  438. # end
  439. #
  440. # person.pets.size # => 3
  441. # person.pets
  442. # # => [
  443. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  444. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  445. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  446. # # ]
  447. #
  448. # person.pets.delete_all
  449. #
  450. # Pet.find(1, 2, 3)
  451. # # => ActiveRecord::RecordNotFound: Couldn't find all Pets with 'id': (1, 2, 3)
  452. 1 def delete_all(dependent = nil)
  453. @association.delete_all(dependent).tap { reset_scope }
  454. end
  455. # Deletes the records of the collection directly from the database
  456. # ignoring the +:dependent+ option. Records are instantiated and it
  457. # invokes +before_remove+, +after_remove+ , +before_destroy+ and
  458. # +after_destroy+ callbacks.
  459. #
  460. # class Person < ActiveRecord::Base
  461. # has_many :pets
  462. # end
  463. #
  464. # person.pets.size # => 3
  465. # person.pets
  466. # # => [
  467. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  468. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  469. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  470. # # ]
  471. #
  472. # person.pets.destroy_all
  473. #
  474. # person.pets.size # => 0
  475. # person.pets # => []
  476. #
  477. # Pet.find(1) # => Couldn't find Pet with id=1
  478. 1 def destroy_all
  479. @association.destroy_all.tap { reset_scope }
  480. end
  481. # Deletes the +records+ supplied from the collection according to the strategy
  482. # specified by the +:dependent+ option. If no +:dependent+ option is given,
  483. # then it will follow the default strategy. Returns an array with the
  484. # deleted records.
  485. #
  486. # For <tt>has_many :through</tt> associations, the default deletion strategy is
  487. # +:delete_all+.
  488. #
  489. # For +has_many+ associations, the default deletion strategy is +:nullify+.
  490. # This sets the foreign keys to +NULL+.
  491. #
  492. # class Person < ActiveRecord::Base
  493. # has_many :pets # dependent: :nullify option by default
  494. # end
  495. #
  496. # person.pets.size # => 3
  497. # person.pets
  498. # # => [
  499. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  500. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  501. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  502. # # ]
  503. #
  504. # person.pets.delete(Pet.find(1))
  505. # # => [#<Pet id: 1, name: "Fancy-Fancy", person_id: 1>]
  506. #
  507. # person.pets.size # => 2
  508. # person.pets
  509. # # => [
  510. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  511. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  512. # # ]
  513. #
  514. # Pet.find(1)
  515. # # => #<Pet id: 1, name: "Fancy-Fancy", person_id: nil>
  516. #
  517. # If it is set to <tt>:destroy</tt> all the +records+ are removed by calling
  518. # their +destroy+ method. See +destroy+ for more information.
  519. #
  520. # class Person < ActiveRecord::Base
  521. # has_many :pets, dependent: :destroy
  522. # end
  523. #
  524. # person.pets.size # => 3
  525. # person.pets
  526. # # => [
  527. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  528. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  529. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  530. # # ]
  531. #
  532. # person.pets.delete(Pet.find(1), Pet.find(3))
  533. # # => [
  534. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  535. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  536. # # ]
  537. #
  538. # person.pets.size # => 1
  539. # person.pets
  540. # # => [#<Pet id: 2, name: "Spook", person_id: 1>]
  541. #
  542. # Pet.find(1, 3)
  543. # # => ActiveRecord::RecordNotFound: Couldn't find all Pets with 'id': (1, 3)
  544. #
  545. # If it is set to <tt>:delete_all</tt>, all the +records+ are deleted
  546. # *without* calling their +destroy+ method.
  547. #
  548. # class Person < ActiveRecord::Base
  549. # has_many :pets, dependent: :delete_all
  550. # end
  551. #
  552. # person.pets.size # => 3
  553. # person.pets
  554. # # => [
  555. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  556. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  557. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  558. # # ]
  559. #
  560. # person.pets.delete(Pet.find(1))
  561. # # => [#<Pet id: 1, name: "Fancy-Fancy", person_id: 1>]
  562. #
  563. # person.pets.size # => 2
  564. # person.pets
  565. # # => [
  566. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  567. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  568. # # ]
  569. #
  570. # Pet.find(1)
  571. # # => ActiveRecord::RecordNotFound: Couldn't find Pet with 'id'=1
  572. #
  573. # You can pass +Integer+ or +String+ values, it finds the records
  574. # responding to the +id+ and executes delete on them.
  575. #
  576. # class Person < ActiveRecord::Base
  577. # has_many :pets
  578. # end
  579. #
  580. # person.pets.size # => 3
  581. # person.pets
  582. # # => [
  583. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  584. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  585. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  586. # # ]
  587. #
  588. # person.pets.delete("1")
  589. # # => [#<Pet id: 1, name: "Fancy-Fancy", person_id: 1>]
  590. #
  591. # person.pets.delete(2, 3)
  592. # # => [
  593. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  594. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  595. # # ]
  596. 1 def delete(*records)
  597. @association.delete(*records).tap { reset_scope }
  598. end
  599. # Destroys the +records+ supplied and removes them from the collection.
  600. # This method will _always_ remove record from the database ignoring
  601. # the +:dependent+ option. Returns an array with the removed records.
  602. #
  603. # class Person < ActiveRecord::Base
  604. # has_many :pets
  605. # end
  606. #
  607. # person.pets.size # => 3
  608. # person.pets
  609. # # => [
  610. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  611. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  612. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  613. # # ]
  614. #
  615. # person.pets.destroy(Pet.find(1))
  616. # # => [#<Pet id: 1, name: "Fancy-Fancy", person_id: 1>]
  617. #
  618. # person.pets.size # => 2
  619. # person.pets
  620. # # => [
  621. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  622. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  623. # # ]
  624. #
  625. # person.pets.destroy(Pet.find(2), Pet.find(3))
  626. # # => [
  627. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  628. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  629. # # ]
  630. #
  631. # person.pets.size # => 0
  632. # person.pets # => []
  633. #
  634. # Pet.find(1, 2, 3) # => ActiveRecord::RecordNotFound: Couldn't find all Pets with 'id': (1, 2, 3)
  635. #
  636. # You can pass +Integer+ or +String+ values, it finds the records
  637. # responding to the +id+ and then deletes them from the database.
  638. #
  639. # person.pets.size # => 3
  640. # person.pets
  641. # # => [
  642. # # #<Pet id: 4, name: "Benny", person_id: 1>,
  643. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  644. # # #<Pet id: 6, name: "Boss", person_id: 1>
  645. # # ]
  646. #
  647. # person.pets.destroy("4")
  648. # # => #<Pet id: 4, name: "Benny", person_id: 1>
  649. #
  650. # person.pets.size # => 2
  651. # person.pets
  652. # # => [
  653. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  654. # # #<Pet id: 6, name: "Boss", person_id: 1>
  655. # # ]
  656. #
  657. # person.pets.destroy(5, 6)
  658. # # => [
  659. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  660. # # #<Pet id: 6, name: "Boss", person_id: 1>
  661. # # ]
  662. #
  663. # person.pets.size # => 0
  664. # person.pets # => []
  665. #
  666. # Pet.find(4, 5, 6) # => ActiveRecord::RecordNotFound: Couldn't find all Pets with 'id': (4, 5, 6)
  667. 1 def destroy(*records)
  668. @association.destroy(*records).tap { reset_scope }
  669. end
  670. ##
  671. # :method: distinct
  672. #
  673. # :call-seq:
  674. # distinct(value = true)
  675. #
  676. # Specifies whether the records should be unique or not.
  677. #
  678. # class Person < ActiveRecord::Base
  679. # has_many :pets
  680. # end
  681. #
  682. # person.pets.select(:name)
  683. # # => [
  684. # # #<Pet name: "Fancy-Fancy">,
  685. # # #<Pet name: "Fancy-Fancy">
  686. # # ]
  687. #
  688. # person.pets.select(:name).distinct
  689. # # => [#<Pet name: "Fancy-Fancy">]
  690. #
  691. # person.pets.select(:name).distinct.distinct(false)
  692. # # => [
  693. # # #<Pet name: "Fancy-Fancy">,
  694. # # #<Pet name: "Fancy-Fancy">
  695. # # ]
  696. #--
  697. 1 def calculate(operation, column_name)
  698. null_scope? ? scope.calculate(operation, column_name) : super
  699. end
  700. 1 def pluck(*column_names)
  701. null_scope? ? scope.pluck(*column_names) : super
  702. end
  703. ##
  704. # :method: count
  705. #
  706. # :call-seq:
  707. # count(column_name = nil, &block)
  708. #
  709. # Count all records.
  710. #
  711. # class Person < ActiveRecord::Base
  712. # has_many :pets
  713. # end
  714. #
  715. # # This will perform the count using SQL.
  716. # person.pets.count # => 3
  717. # person.pets
  718. # # => [
  719. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  720. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  721. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  722. # # ]
  723. #
  724. # Passing a block will select all of a person's pets in SQL and then
  725. # perform the count using Ruby.
  726. #
  727. # person.pets.count { |pet| pet.name.include?('-') } # => 2
  728. # Returns the size of the collection. If the collection hasn't been loaded,
  729. # it executes a <tt>SELECT COUNT(*)</tt> query. Else it calls <tt>collection.size</tt>.
  730. #
  731. # If the collection has been already loaded +size+ and +length+ are
  732. # equivalent. If not and you are going to need the records anyway
  733. # +length+ will take one less query. Otherwise +size+ is more efficient.
  734. #
  735. # class Person < ActiveRecord::Base
  736. # has_many :pets
  737. # end
  738. #
  739. # person.pets.size # => 3
  740. # # executes something like SELECT COUNT(*) FROM "pets" WHERE "pets"."person_id" = 1
  741. #
  742. # person.pets # This will execute a SELECT * FROM query
  743. # # => [
  744. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  745. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  746. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  747. # # ]
  748. #
  749. # person.pets.size # => 3
  750. # # Because the collection is already loaded, this will behave like
  751. # # collection.size and no SQL count query is executed.
  752. 1 def size
  753. @association.size
  754. end
  755. ##
  756. # :method: length
  757. #
  758. # :call-seq:
  759. # length()
  760. #
  761. # Returns the size of the collection calling +size+ on the target.
  762. # If the collection has been already loaded, +length+ and +size+ are
  763. # equivalent. If not and you are going to need the records anyway this
  764. # method will take one less query. Otherwise +size+ is more efficient.
  765. #
  766. # class Person < ActiveRecord::Base
  767. # has_many :pets
  768. # end
  769. #
  770. # person.pets.length # => 3
  771. # # executes something like SELECT "pets".* FROM "pets" WHERE "pets"."person_id" = 1
  772. #
  773. # # Because the collection is loaded, you can
  774. # # call the collection with no additional queries:
  775. # person.pets
  776. # # => [
  777. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  778. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  779. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  780. # # ]
  781. # Returns +true+ if the collection is empty. If the collection has been
  782. # loaded it is equivalent
  783. # to <tt>collection.size.zero?</tt>. If the collection has not been loaded,
  784. # it is equivalent to <tt>!collection.exists?</tt>. If the collection has
  785. # not already been loaded and you are going to fetch the records anyway it
  786. # is better to check <tt>collection.length.zero?</tt>.
  787. #
  788. # class Person < ActiveRecord::Base
  789. # has_many :pets
  790. # end
  791. #
  792. # person.pets.count # => 1
  793. # person.pets.empty? # => false
  794. #
  795. # person.pets.delete_all
  796. #
  797. # person.pets.count # => 0
  798. # person.pets.empty? # => true
  799. 1 def empty?
  800. @association.empty?
  801. end
  802. ##
  803. # :method: any?
  804. #
  805. # :call-seq:
  806. # any?()
  807. #
  808. # Returns +true+ if the collection is not empty.
  809. #
  810. # class Person < ActiveRecord::Base
  811. # has_many :pets
  812. # end
  813. #
  814. # person.pets.count # => 0
  815. # person.pets.any? # => false
  816. #
  817. # person.pets << Pet.new(name: 'Snoop')
  818. # person.pets.count # => 1
  819. # person.pets.any? # => true
  820. #
  821. # You can also pass a +block+ to define criteria. The behavior
  822. # is the same, it returns true if the collection based on the
  823. # criteria is not empty.
  824. #
  825. # person.pets
  826. # # => [#<Pet name: "Snoop", group: "dogs">]
  827. #
  828. # person.pets.any? do |pet|
  829. # pet.group == 'cats'
  830. # end
  831. # # => false
  832. #
  833. # person.pets.any? do |pet|
  834. # pet.group == 'dogs'
  835. # end
  836. # # => true
  837. ##
  838. # :method: many?
  839. #
  840. # :call-seq:
  841. # many?()
  842. #
  843. # Returns true if the collection has more than one record.
  844. # Equivalent to <tt>collection.size > 1</tt>.
  845. #
  846. # class Person < ActiveRecord::Base
  847. # has_many :pets
  848. # end
  849. #
  850. # person.pets.count # => 1
  851. # person.pets.many? # => false
  852. #
  853. # person.pets << Pet.new(name: 'Snoopy')
  854. # person.pets.count # => 2
  855. # person.pets.many? # => true
  856. #
  857. # You can also pass a +block+ to define criteria. The
  858. # behavior is the same, it returns true if the collection
  859. # based on the criteria has more than one record.
  860. #
  861. # person.pets
  862. # # => [
  863. # # #<Pet name: "Gorby", group: "cats">,
  864. # # #<Pet name: "Puff", group: "cats">,
  865. # # #<Pet name: "Snoop", group: "dogs">
  866. # # ]
  867. #
  868. # person.pets.many? do |pet|
  869. # pet.group == 'dogs'
  870. # end
  871. # # => false
  872. #
  873. # person.pets.many? do |pet|
  874. # pet.group == 'cats'
  875. # end
  876. # # => true
  877. # Returns +true+ if the given +record+ is present in the collection.
  878. #
  879. # class Person < ActiveRecord::Base
  880. # has_many :pets
  881. # end
  882. #
  883. # person.pets # => [#<Pet id: 20, name: "Snoop">]
  884. #
  885. # person.pets.include?(Pet.find(20)) # => true
  886. # person.pets.include?(Pet.find(21)) # => false
  887. 1 def include?(record)
  888. !!@association.include?(record)
  889. end
  890. 1 def proxy_association
  891. @association
  892. end
  893. # Returns a <tt>Relation</tt> object for the records in this association
  894. 1 def scope
  895. @scope ||= @association.scope
  896. end
  897. # Equivalent to <tt>Array#==</tt>. Returns +true+ if the two arrays
  898. # contain the same number of elements and if each element is equal
  899. # to the corresponding element in the +other+ array, otherwise returns
  900. # +false+.
  901. #
  902. # class Person < ActiveRecord::Base
  903. # has_many :pets
  904. # end
  905. #
  906. # person.pets
  907. # # => [
  908. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  909. # # #<Pet id: 2, name: "Spook", person_id: 1>
  910. # # ]
  911. #
  912. # other = person.pets.to_ary
  913. #
  914. # person.pets == other
  915. # # => true
  916. #
  917. # other = [Pet.new(id: 1), Pet.new(id: 2)]
  918. #
  919. # person.pets == other
  920. # # => false
  921. 1 def ==(other)
  922. load_target == other
  923. end
  924. ##
  925. # :method: to_ary
  926. #
  927. # :call-seq:
  928. # to_ary()
  929. #
  930. # Returns a new array of objects from the collection. If the collection
  931. # hasn't been loaded, it fetches the records from the database.
  932. #
  933. # class Person < ActiveRecord::Base
  934. # has_many :pets
  935. # end
  936. #
  937. # person.pets
  938. # # => [
  939. # # #<Pet id: 4, name: "Benny", person_id: 1>,
  940. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  941. # # #<Pet id: 6, name: "Boss", person_id: 1>
  942. # # ]
  943. #
  944. # other_pets = person.pets.to_ary
  945. # # => [
  946. # # #<Pet id: 4, name: "Benny", person_id: 1>,
  947. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  948. # # #<Pet id: 6, name: "Boss", person_id: 1>
  949. # # ]
  950. #
  951. # other_pets.replace([Pet.new(name: 'BooGoo')])
  952. #
  953. # other_pets
  954. # # => [#<Pet id: nil, name: "BooGoo", person_id: 1>]
  955. #
  956. # person.pets
  957. # # This is not affected by replace
  958. # # => [
  959. # # #<Pet id: 4, name: "Benny", person_id: 1>,
  960. # # #<Pet id: 5, name: "Brain", person_id: 1>,
  961. # # #<Pet id: 6, name: "Boss", person_id: 1>
  962. # # ]
  963. 1 def records # :nodoc:
  964. load_target
  965. end
  966. # Adds one or more +records+ to the collection by setting their foreign keys
  967. # to the association's primary key. Since +<<+ flattens its argument list and
  968. # inserts each record, +push+ and +concat+ behave identically. Returns +self+
  969. # so several appends may be chained together.
  970. #
  971. # class Person < ActiveRecord::Base
  972. # has_many :pets
  973. # end
  974. #
  975. # person.pets.size # => 0
  976. # person.pets << Pet.new(name: 'Fancy-Fancy')
  977. # person.pets << [Pet.new(name: 'Spook'), Pet.new(name: 'Choo-Choo')]
  978. # person.pets.size # => 3
  979. #
  980. # person.id # => 1
  981. # person.pets
  982. # # => [
  983. # # #<Pet id: 1, name: "Fancy-Fancy", person_id: 1>,
  984. # # #<Pet id: 2, name: "Spook", person_id: 1>,
  985. # # #<Pet id: 3, name: "Choo-Choo", person_id: 1>
  986. # # ]
  987. 1 def <<(*records)
  988. proxy_association.concat(records) && self
  989. end
  990. 1 alias_method :push, :<<
  991. 1 alias_method :append, :<<
  992. 1 alias_method :concat, :<<
  993. 1 def prepend(*args)
  994. raise NoMethodError, "prepend on association is not defined. Please use <<, push or append"
  995. end
  996. # Equivalent to +delete_all+. The difference is that returns +self+, instead
  997. # of an array with the deleted objects, so methods can be chained. See
  998. # +delete_all+ for more information.
  999. # Note that because +delete_all+ removes records by directly
  1000. # running an SQL query into the database, the +updated_at+ column of
  1001. # the object is not changed.
  1002. 1 def clear
  1003. delete_all
  1004. self
  1005. end
  1006. # Reloads the collection from the database. Returns +self+.
  1007. #
  1008. # class Person < ActiveRecord::Base
  1009. # has_many :pets
  1010. # end
  1011. #
  1012. # person.pets # fetches pets from the database
  1013. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1014. #
  1015. # person.pets # uses the pets cache
  1016. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1017. #
  1018. # person.pets.reload # fetches pets from the database
  1019. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1020. 1 def reload
  1021. proxy_association.reload
  1022. reset_scope
  1023. end
  1024. # Unloads the association. Returns +self+.
  1025. #
  1026. # class Person < ActiveRecord::Base
  1027. # has_many :pets
  1028. # end
  1029. #
  1030. # person.pets # fetches pets from the database
  1031. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1032. #
  1033. # person.pets # uses the pets cache
  1034. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1035. #
  1036. # person.pets.reset # clears the pets cache
  1037. #
  1038. # person.pets # fetches pets from the database
  1039. # # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
  1040. 1 def reset
  1041. proxy_association.reset
  1042. proxy_association.reset_scope
  1043. reset_scope
  1044. end
  1045. 1 def reset_scope # :nodoc:
  1046. @offsets = {}
  1047. @scope = nil
  1048. self
  1049. end
  1050. delegate_methods = [
  1051. 1 QueryMethods,
  1052. SpawnMethods,
  1053. ].flat_map { |klass|
  1054. 2 klass.public_instance_methods(false)
  1055. } - self.public_instance_methods(false) - [:select] + [:scoping]
  1056. 1 delegate(*delegate_methods, to: :scope)
  1057. 1 private
  1058. 1 def find_nth_with_limit(index, limit)
  1059. load_target if find_from_target?
  1060. super
  1061. end
  1062. 1 def find_nth_from_last(index)
  1063. load_target if find_from_target?
  1064. super
  1065. end
  1066. 1 def null_scope?
  1067. @association.null_scope?
  1068. end
  1069. 1 def find_from_target?
  1070. @association.find_from_target?
  1071. end
  1072. 1 def exec_queries
  1073. load_target
  1074. end
  1075. end
  1076. end
  1077. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/foreign_association.rb

50.0% lines covered

6 relevant lines. 3 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord::Associations
  3. 1 module ForeignAssociation # :nodoc:
  4. 1 def foreign_key_present?
  5. if reflection.klass.primary_key
  6. owner.attribute_present?(reflection.active_record_primary_key)
  7. else
  8. false
  9. end
  10. end
  11. end
  12. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_association.rb

29.69% lines covered

64 relevant lines. 19 lines covered and 45 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Has Many Association
  5. # This is the proxy that handles a has many association.
  6. #
  7. # If the association has a <tt>:through</tt> option further specialization
  8. # is provided by its child HasManyThroughAssociation.
  9. 1 class HasManyAssociation < CollectionAssociation #:nodoc:
  10. 1 include ForeignAssociation
  11. 1 def handle_dependency
  12. case options[:dependent]
  13. when :restrict_with_exception
  14. raise ActiveRecord::DeleteRestrictionError.new(reflection.name) unless empty?
  15. when :restrict_with_error
  16. unless empty?
  17. record = owner.class.human_attribute_name(reflection.name).downcase
  18. owner.errors.add(:base, :'restrict_dependent_destroy.has_many', record: record)
  19. throw(:abort)
  20. end
  21. when :destroy
  22. # No point in executing the counter update since we're going to destroy the parent anyway
  23. load_target.each { |t| t.destroyed_by_association = reflection }
  24. destroy_all
  25. else
  26. delete_all
  27. end
  28. end
  29. 1 def insert_record(record, validate = true, raise = false)
  30. set_owner_attributes(record)
  31. super
  32. end
  33. 1 def empty?
  34. if reflection.has_cached_counter?
  35. size.zero?
  36. else
  37. super
  38. end
  39. end
  40. 1 private
  41. # Returns the number of records in this collection.
  42. #
  43. # If the association has a counter cache it gets that value. Otherwise
  44. # it will attempt to do a count via SQL, bounded to <tt>:limit</tt> if
  45. # there's one. Some configuration options like :group make it impossible
  46. # to do an SQL count, in those cases the array count will be used.
  47. #
  48. # That does not depend on whether the collection has already been loaded
  49. # or not. The +size+ method is the one that takes the loaded flag into
  50. # account and delegates to +count_records+ if needed.
  51. #
  52. # If the collection is empty the target is set to an empty array and
  53. # the loaded flag is set to true as well.
  54. 1 def count_records
  55. count = if reflection.has_cached_counter?
  56. owner._read_attribute(reflection.counter_cache_column).to_i
  57. else
  58. scope.count(:all)
  59. end
  60. # If there's nothing in the database and @target has no new records
  61. # we are certain the current target is an empty array. This is a
  62. # documented side-effect of the method that may avoid an extra SELECT.
  63. (@target ||= []) && loaded! if count == 0
  64. [association_scope.limit_value, count].compact.min
  65. end
  66. 1 def update_counter(difference, reflection = reflection())
  67. if reflection.has_cached_counter?
  68. owner.increment!(reflection.counter_cache_column, difference)
  69. end
  70. end
  71. 1 def update_counter_in_memory(difference, reflection = reflection())
  72. if reflection.counter_must_be_updated_by_has_many?
  73. counter = reflection.counter_cache_column
  74. owner.increment(counter, difference)
  75. owner.send(:clear_attribute_change, counter) # eww
  76. end
  77. end
  78. 1 def delete_count(method, scope)
  79. if method == :delete_all
  80. scope.delete_all
  81. else
  82. scope.update_all(reflection.foreign_key => nil)
  83. end
  84. end
  85. 1 def delete_or_nullify_all_records(method)
  86. count = delete_count(method, scope)
  87. update_counter(-count)
  88. count
  89. end
  90. # Deletes the records according to the <tt>:dependent</tt> option.
  91. 1 def delete_records(records, method)
  92. if method == :destroy
  93. records.each(&:destroy!)
  94. update_counter(-records.length) unless reflection.inverse_updates_counter_cache?
  95. else
  96. scope = self.scope.where(reflection.klass.primary_key => records)
  97. update_counter(-delete_count(method, scope))
  98. end
  99. end
  100. 1 def concat_records(records, *)
  101. update_counter_if_success(super, records.length)
  102. end
  103. 1 def _create_record(attributes, *)
  104. if attributes.is_a?(Array)
  105. super
  106. else
  107. update_counter_if_success(super, 1)
  108. end
  109. end
  110. 1 def update_counter_if_success(saved_successfully, difference)
  111. if saved_successfully
  112. update_counter_in_memory(difference)
  113. end
  114. saved_successfully
  115. end
  116. 1 def difference(a, b)
  117. a - b
  118. end
  119. 1 def intersection(a, b)
  120. a & b
  121. end
  122. end
  123. end
  124. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_many_through_association.rb

23.68% lines covered

114 relevant lines. 27 lines covered and 87 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Has Many Through Association
  5. 1 class HasManyThroughAssociation < HasManyAssociation #:nodoc:
  6. 1 include ThroughAssociation
  7. 1 def initialize(owner, reflection)
  8. super
  9. @through_records = {}
  10. end
  11. 1 def concat(*records)
  12. unless owner.new_record?
  13. records.flatten.each do |record|
  14. raise_on_type_mismatch!(record)
  15. end
  16. end
  17. super
  18. end
  19. 1 def concat_records(records)
  20. ensure_not_nested
  21. records = super(records, true)
  22. if owner.new_record? && records
  23. records.flatten.each do |record|
  24. build_through_record(record)
  25. end
  26. end
  27. records
  28. end
  29. 1 def insert_record(record, validate = true, raise = false)
  30. ensure_not_nested
  31. if record.new_record? || record.has_changes_to_save?
  32. return unless super
  33. end
  34. save_through_record(record)
  35. record
  36. end
  37. 1 private
  38. # The through record (built with build_record) is temporarily cached
  39. # so that it may be reused if insert_record is subsequently called.
  40. #
  41. # However, after insert_record has been called, the cache is cleared in
  42. # order to allow multiple instances of the same record in an association.
  43. 1 def build_through_record(record)
  44. @through_records[record.object_id] ||= begin
  45. ensure_mutable
  46. through_record = through_association.build(*options_for_through_record)
  47. through_record.send("#{source_reflection.name}=", record)
  48. if options[:source_type]
  49. through_record.send("#{source_reflection.foreign_type}=", options[:source_type])
  50. end
  51. through_record
  52. end
  53. end
  54. 1 def options_for_through_record
  55. [through_scope_attributes]
  56. end
  57. 1 def through_scope_attributes
  58. scope.where_values_hash(through_association.reflection.name.to_s).
  59. except!(through_association.reflection.foreign_key,
  60. through_association.reflection.klass.inheritance_column)
  61. end
  62. 1 def save_through_record(record)
  63. association = build_through_record(record)
  64. if association.changed?
  65. association.save!
  66. end
  67. ensure
  68. @through_records.delete(record.object_id)
  69. end
  70. 1 def build_record(attributes)
  71. ensure_not_nested
  72. record = super
  73. inverse = source_reflection.inverse_of
  74. if inverse
  75. if inverse.collection?
  76. record.send(inverse.name) << build_through_record(record)
  77. elsif inverse.has_one?
  78. record.send("#{inverse.name}=", build_through_record(record))
  79. end
  80. end
  81. record
  82. end
  83. 1 def remove_records(existing_records, records, method)
  84. super
  85. delete_through_records(records)
  86. end
  87. 1 def target_reflection_has_associated_record?
  88. !(through_reflection.belongs_to? && owner[through_reflection.foreign_key].blank?)
  89. end
  90. 1 def update_through_counter?(method)
  91. case method
  92. when :destroy
  93. !through_reflection.inverse_updates_counter_cache?
  94. when :nullify
  95. false
  96. else
  97. true
  98. end
  99. end
  100. 1 def delete_or_nullify_all_records(method)
  101. delete_records(load_target, method)
  102. end
  103. 1 def delete_records(records, method)
  104. ensure_not_nested
  105. scope = through_association.scope
  106. scope.where! construct_join_attributes(*records)
  107. scope = scope.where(through_scope_attributes)
  108. case method
  109. when :destroy
  110. if scope.klass.primary_key
  111. count = scope.destroy_all.count(&:destroyed?)
  112. else
  113. scope.each(&:_run_destroy_callbacks)
  114. count = scope.delete_all
  115. end
  116. when :nullify
  117. count = scope.update_all(source_reflection.foreign_key => nil)
  118. else
  119. count = scope.delete_all
  120. end
  121. delete_through_records(records)
  122. if source_reflection.options[:counter_cache] && method != :destroy
  123. counter = source_reflection.counter_cache_column
  124. klass.decrement_counter counter, records.map(&:id)
  125. end
  126. if through_reflection.collection? && update_through_counter?(method)
  127. update_counter(-count, through_reflection)
  128. else
  129. update_counter(-count)
  130. end
  131. count
  132. end
  133. 1 def difference(a, b)
  134. distribution = distribution(b)
  135. a.reject { |record| mark_occurrence(distribution, record) }
  136. end
  137. 1 def intersection(a, b)
  138. distribution = distribution(b)
  139. a.select { |record| mark_occurrence(distribution, record) }
  140. end
  141. 1 def mark_occurrence(distribution, record)
  142. distribution[record] > 0 && distribution[record] -= 1
  143. end
  144. 1 def distribution(array)
  145. array.each_with_object(Hash.new(0)) do |record, distribution|
  146. distribution[record] += 1
  147. end
  148. end
  149. 1 def through_records_for(record)
  150. attributes = construct_join_attributes(record)
  151. candidates = Array.wrap(through_association.target)
  152. candidates.find_all do |c|
  153. attributes.all? do |key, value|
  154. c.public_send(key) == value
  155. end
  156. end
  157. end
  158. 1 def delete_through_records(records)
  159. records.each do |record|
  160. through_records = through_records_for(record)
  161. if through_reflection.collection?
  162. through_records.each { |r| through_association.target.delete(r) }
  163. else
  164. if through_records.include?(through_association.target)
  165. through_association.target = nil
  166. end
  167. end
  168. @through_records.delete(record.object_id)
  169. end
  170. end
  171. 1 def find_target
  172. return [] unless target_reflection_has_associated_record?
  173. super
  174. end
  175. # NOTE - not sure that we can actually cope with inverses here
  176. 1 def invertible_for?(record)
  177. false
  178. end
  179. end
  180. end
  181. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_association.rb

21.67% lines covered

60 relevant lines. 13 lines covered and 47 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Has One Association
  5. 1 class HasOneAssociation < SingularAssociation #:nodoc:
  6. 1 include ForeignAssociation
  7. 1 def handle_dependency
  8. case options[:dependent]
  9. when :restrict_with_exception
  10. raise ActiveRecord::DeleteRestrictionError.new(reflection.name) if load_target
  11. when :restrict_with_error
  12. if load_target
  13. record = owner.class.human_attribute_name(reflection.name).downcase
  14. owner.errors.add(:base, :'restrict_dependent_destroy.has_one', record: record)
  15. throw(:abort)
  16. end
  17. else
  18. delete
  19. end
  20. end
  21. 1 def replace(record, save = true)
  22. raise_on_type_mismatch!(record) if record
  23. load_target
  24. return target unless target || record
  25. assigning_another_record = target != record
  26. if assigning_another_record || record.has_changes_to_save?
  27. save &&= owner.persisted?
  28. transaction_if(save) do
  29. remove_target!(options[:dependent]) if target && !target.destroyed? && assigning_another_record
  30. if record
  31. set_owner_attributes(record)
  32. set_inverse_instance(record)
  33. if save && !record.save
  34. nullify_owner_attributes(record)
  35. set_owner_attributes(target) if target
  36. raise RecordNotSaved, "Failed to save the new associated #{reflection.name}."
  37. end
  38. end
  39. end
  40. end
  41. self.target = record
  42. end
  43. 1 def delete(method = options[:dependent])
  44. if load_target
  45. case method
  46. when :delete
  47. target.delete
  48. when :destroy
  49. target.destroyed_by_association = reflection
  50. target.destroy
  51. throw(:abort) unless target.destroyed?
  52. when :nullify
  53. target.update_columns(reflection.foreign_key => nil) if target.persisted?
  54. end
  55. end
  56. end
  57. 1 private
  58. # The reason that the save param for replace is false, if for create (not just build),
  59. # is because the setting of the foreign keys is actually handled by the scoping when
  60. # the record is instantiated, and so they are set straight away and do not need to be
  61. # updated within replace.
  62. 1 def set_new_record(record)
  63. replace(record, false)
  64. end
  65. 1 def remove_target!(method)
  66. case method
  67. when :delete
  68. target.delete
  69. when :destroy
  70. target.destroyed_by_association = reflection
  71. target.destroy
  72. else
  73. nullify_owner_attributes(target)
  74. remove_inverse_instance(target)
  75. if target.persisted? && owner.persisted? && !target.save
  76. set_owner_attributes(target)
  77. raise RecordNotSaved, "Failed to remove the existing associated #{reflection.name}. " \
  78. "The record failed to save after its foreign key was set to nil."
  79. end
  80. end
  81. end
  82. 1 def nullify_owner_attributes(record)
  83. record[reflection.foreign_key] = nil
  84. end
  85. 1 def transaction_if(value)
  86. if value
  87. reflection.klass.transaction { yield }
  88. else
  89. yield
  90. end
  91. end
  92. 1 def _create_record(attributes, raise_error = false, &block)
  93. unless owner.persisted?
  94. raise ActiveRecord::RecordNotSaved, "You cannot call create unless the parent is saved"
  95. end
  96. super
  97. end
  98. end
  99. end
  100. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/has_one_through_association.rb

30.43% lines covered

23 relevant lines. 7 lines covered and 16 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Has One Through Association
  5. 1 class HasOneThroughAssociation < HasOneAssociation #:nodoc:
  6. 1 include ThroughAssociation
  7. 1 def replace(record, save = true)
  8. create_through_record(record, save)
  9. self.target = record
  10. end
  11. 1 private
  12. 1 def create_through_record(record, save)
  13. ensure_not_nested
  14. through_proxy = through_association
  15. through_record = through_proxy.load_target
  16. if through_record && !record
  17. through_record.destroy
  18. elsif record
  19. attributes = construct_join_attributes(record)
  20. if through_record && through_record.destroyed?
  21. through_record = through_proxy.tap(&:reload).target
  22. end
  23. if through_record
  24. if through_record.new_record?
  25. through_record.assign_attributes(attributes)
  26. else
  27. through_record.update(attributes)
  28. end
  29. elsif owner.new_record? || !save
  30. through_proxy.build(attributes)
  31. else
  32. through_proxy.create(attributes)
  33. end
  34. end
  35. end
  36. end
  37. end
  38. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/join_dependency.rb

23.94% lines covered

142 relevant lines. 34 lines covered and 108 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. 1 class JoinDependency # :nodoc:
  5. 1 autoload :JoinBase, "active_record/associations/join_dependency/join_base"
  6. 1 autoload :JoinAssociation, "active_record/associations/join_dependency/join_association"
  7. 1 class Aliases # :nodoc:
  8. 1 def initialize(tables)
  9. @tables = tables
  10. @alias_cache = tables.each_with_object({}) { |table, h|
  11. h[table.node] = table.columns.each_with_object({}) { |column, i|
  12. i[column.name] = column.alias
  13. }
  14. }
  15. @name_and_alias_cache = tables.each_with_object({}) { |table, h|
  16. h[table.node] = table.columns.map { |column|
  17. [column.name, column.alias]
  18. }
  19. }
  20. end
  21. 1 def columns
  22. @tables.flat_map(&:column_aliases)
  23. end
  24. # An array of [column_name, alias] pairs for the table
  25. 1 def column_aliases(node)
  26. @name_and_alias_cache[node]
  27. end
  28. 1 def column_alias(node, column)
  29. @alias_cache[node][column]
  30. end
  31. 1 Table = Struct.new(:node, :columns) do # :nodoc:
  32. 1 def column_aliases
  33. t = node.table
  34. columns.map { |column| t[column.name].as Arel.sql column.alias }
  35. end
  36. end
  37. 1 Column = Struct.new(:name, :alias)
  38. end
  39. 1 def self.make_tree(associations)
  40. hash = {}
  41. walk_tree associations, hash
  42. hash
  43. end
  44. 1 def self.walk_tree(associations, hash)
  45. case associations
  46. when Symbol, String
  47. hash[associations.to_sym] ||= {}
  48. when Array
  49. associations.each do |assoc|
  50. walk_tree assoc, hash
  51. end
  52. when Hash
  53. associations.each do |k, v|
  54. cache = hash[k] ||= {}
  55. walk_tree v, cache
  56. end
  57. else
  58. raise ConfigurationError, associations.inspect
  59. end
  60. end
  61. 1 def initialize(base, table, associations)
  62. tree = self.class.make_tree associations
  63. @join_root = JoinBase.new(base, table, build(tree, base))
  64. end
  65. 1 def reflections
  66. join_root.drop(1).map!(&:reflection)
  67. end
  68. 1 def join_constraints(joins_to_add, join_type, alias_tracker)
  69. @alias_tracker = alias_tracker
  70. construct_tables!(join_root)
  71. joins = make_join_constraints(join_root, join_type)
  72. joins.concat joins_to_add.flat_map { |oj|
  73. construct_tables!(oj.join_root)
  74. if join_root.match? oj.join_root
  75. walk join_root, oj.join_root
  76. else
  77. make_join_constraints(oj.join_root, join_type)
  78. end
  79. }
  80. end
  81. 1 def instantiate(result_set, &block)
  82. primary_key = aliases.column_alias(join_root, join_root.primary_key)
  83. seen = Hash.new { |i, object_id|
  84. i[object_id] = Hash.new { |j, child_class|
  85. j[child_class] = {}
  86. }
  87. }
  88. model_cache = Hash.new { |h, klass| h[klass] = {} }
  89. parents = model_cache[join_root]
  90. column_aliases = aliases.column_aliases join_root
  91. message_bus = ActiveSupport::Notifications.instrumenter
  92. payload = {
  93. record_count: result_set.length,
  94. class_name: join_root.base_klass.name
  95. }
  96. message_bus.instrument("instantiation.active_record", payload) do
  97. result_set.each { |row_hash|
  98. parent_key = primary_key ? row_hash[primary_key] : row_hash
  99. parent = parents[parent_key] ||= join_root.instantiate(row_hash, column_aliases, &block)
  100. construct(parent, join_root, row_hash, result_set, seen, model_cache, aliases)
  101. }
  102. end
  103. parents.values
  104. end
  105. 1 def apply_column_aliases(relation)
  106. relation._select!(-> { aliases.columns })
  107. end
  108. 1 protected
  109. 1 attr_reader :alias_tracker, :join_root
  110. 1 private
  111. 1 def aliases
  112. @aliases ||= Aliases.new join_root.each_with_index.map { |join_part, i|
  113. columns = join_part.column_names.each_with_index.map { |column_name, j|
  114. Aliases::Column.new column_name, "t#{i}_r#{j}"
  115. }
  116. Aliases::Table.new(join_part, columns)
  117. }
  118. end
  119. 1 def construct_tables!(join_root)
  120. join_root.each_children do |parent, child|
  121. child.tables = table_aliases_for(parent, child)
  122. end
  123. end
  124. 1 def make_join_constraints(join_root, join_type)
  125. join_root.children.flat_map do |child|
  126. make_constraints(join_root, child, join_type)
  127. end
  128. end
  129. 1 def make_constraints(parent, child, join_type = Arel::Nodes::OuterJoin)
  130. foreign_table = parent.table
  131. foreign_klass = parent.base_klass
  132. joins = child.join_constraints(foreign_table, foreign_klass, join_type, alias_tracker)
  133. joins.concat child.children.flat_map { |c| make_constraints(child, c, join_type) }
  134. end
  135. 1 def table_aliases_for(parent, node)
  136. node.reflection.chain.map { |reflection|
  137. alias_tracker.aliased_table_for(
  138. reflection.table_name,
  139. table_alias_for(reflection, parent, reflection != node.reflection),
  140. reflection.klass.type_caster
  141. )
  142. }
  143. end
  144. 1 def table_alias_for(reflection, parent, join)
  145. name = "#{reflection.plural_name}_#{parent.table_name}"
  146. join ? "#{name}_join" : name
  147. end
  148. 1 def walk(left, right)
  149. intersection, missing = right.children.map { |node1|
  150. [left.children.find { |node2| node1.match? node2 }, node1]
  151. }.partition(&:first)
  152. joins = intersection.flat_map { |l, r| r.table = l.table; walk(l, r) }
  153. joins.concat missing.flat_map { |_, n| make_constraints(left, n) }
  154. end
  155. 1 def find_reflection(klass, name)
  156. klass._reflect_on_association(name) ||
  157. raise(ConfigurationError, "Can't join '#{klass.name}' to association named '#{name}'; perhaps you misspelled it?")
  158. end
  159. 1 def build(associations, base_klass)
  160. associations.map do |name, right|
  161. reflection = find_reflection base_klass, name
  162. reflection.check_validity!
  163. reflection.check_eager_loadable!
  164. if reflection.polymorphic?
  165. raise EagerLoadPolymorphicError.new(reflection)
  166. end
  167. JoinAssociation.new(reflection, build(right, reflection.klass))
  168. end
  169. end
  170. 1 def construct(ar_parent, parent, row, rs, seen, model_cache, aliases)
  171. return if ar_parent.nil?
  172. parent.children.each do |node|
  173. if node.reflection.collection?
  174. other = ar_parent.association(node.reflection.name)
  175. other.loaded!
  176. elsif ar_parent.association_cached?(node.reflection.name)
  177. model = ar_parent.association(node.reflection.name).target
  178. construct(model, node, row, rs, seen, model_cache, aliases)
  179. next
  180. end
  181. key = aliases.column_alias(node, node.primary_key)
  182. id = row[key]
  183. if id.nil?
  184. nil_association = ar_parent.association(node.reflection.name)
  185. nil_association.loaded!
  186. next
  187. end
  188. model = seen[ar_parent.object_id][node][id]
  189. if model
  190. construct(model, node, row, rs, seen, model_cache, aliases)
  191. else
  192. model = construct_model(ar_parent, node, row, model_cache, id, aliases)
  193. if node.reflection.scope &&
  194. node.reflection.scope_for(node.base_klass.unscoped).readonly_value
  195. model.readonly!
  196. end
  197. seen[ar_parent.object_id][node][id] = model
  198. construct(model, node, row, rs, seen, model_cache, aliases)
  199. end
  200. end
  201. end
  202. 1 def construct_model(record, node, row, model_cache, id, aliases)
  203. other = record.association(node.reflection.name)
  204. model = model_cache[node][id] ||=
  205. node.instantiate(row, aliases.column_aliases(node)) do |m|
  206. other.set_inverse_instance(m)
  207. end
  208. if node.reflection.collection?
  209. other.target.push(model)
  210. else
  211. other.target = model
  212. end
  213. model
  214. end
  215. end
  216. end
  217. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader.rb

33.9% lines covered

59 relevant lines. 20 lines covered and 39 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # Implements the details of eager loading of Active Record associations.
  5. #
  6. # Suppose that you have the following two Active Record models:
  7. #
  8. # class Author < ActiveRecord::Base
  9. # # columns: name, age
  10. # has_many :books
  11. # end
  12. #
  13. # class Book < ActiveRecord::Base
  14. # # columns: title, sales, author_id
  15. # end
  16. #
  17. # When you load an author with all associated books Active Record will make
  18. # multiple queries like this:
  19. #
  20. # Author.includes(:books).where(name: ['bell hooks', 'Homer']).to_a
  21. #
  22. # => SELECT `authors`.* FROM `authors` WHERE `name` IN ('bell hooks', 'Homer')
  23. # => SELECT `books`.* FROM `books` WHERE `author_id` IN (2, 5)
  24. #
  25. # Active Record saves the ids of the records from the first query to use in
  26. # the second. Depending on the number of associations involved there can be
  27. # arbitrarily many SQL queries made.
  28. #
  29. # However, if there is a WHERE clause that spans across tables Active
  30. # Record will fall back to a slightly more resource-intensive single query:
  31. #
  32. # Author.includes(:books).where(books: {title: 'Illiad'}).to_a
  33. # => SELECT `authors`.`id` AS t0_r0, `authors`.`name` AS t0_r1, `authors`.`age` AS t0_r2,
  34. # `books`.`id` AS t1_r0, `books`.`title` AS t1_r1, `books`.`sales` AS t1_r2
  35. # FROM `authors`
  36. # LEFT OUTER JOIN `books` ON `authors`.`id` = `books`.`author_id`
  37. # WHERE `books`.`title` = 'Illiad'
  38. #
  39. # This could result in many rows that contain redundant data and it performs poorly at scale
  40. # and is therefore only used when necessary.
  41. #
  42. 1 class Preloader #:nodoc:
  43. 1 extend ActiveSupport::Autoload
  44. 1 eager_autoload do
  45. 1 autoload :Association, "active_record/associations/preloader/association"
  46. 1 autoload :ThroughAssociation, "active_record/associations/preloader/through_association"
  47. end
  48. # Eager loads the named associations for the given Active Record record(s).
  49. #
  50. # In this description, 'association name' shall refer to the name passed
  51. # to an association creation method. For example, a model that specifies
  52. # <tt>belongs_to :author</tt>, <tt>has_many :buyers</tt> has association
  53. # names +:author+ and +:buyers+.
  54. #
  55. # == Parameters
  56. # +records+ is an array of ActiveRecord::Base. This array needs not be flat,
  57. # i.e. +records+ itself may also contain arrays of records. In any case,
  58. # +preload_associations+ will preload the all associations records by
  59. # flattening +records+.
  60. #
  61. # +associations+ specifies one or more associations that you want to
  62. # preload. It may be:
  63. # - a Symbol or a String which specifies a single association name. For
  64. # example, specifying +:books+ allows this method to preload all books
  65. # for an Author.
  66. # - an Array which specifies multiple association names. This array
  67. # is processed recursively. For example, specifying <tt>[:avatar, :books]</tt>
  68. # allows this method to preload an author's avatar as well as all of his
  69. # books.
  70. # - a Hash which specifies multiple association names, as well as
  71. # association names for the to-be-preloaded association objects. For
  72. # example, specifying <tt>{ author: :avatar }</tt> will preload a
  73. # book's author, as well as that author's avatar.
  74. #
  75. # +:associations+ has the same format as the +:include+ option for
  76. # <tt>ActiveRecord::Base.find</tt>. So +associations+ could look like this:
  77. #
  78. # :books
  79. # [ :books, :author ]
  80. # { author: :avatar }
  81. # [ :books, { author: :avatar } ]
  82. 1 def preload(records, associations, preload_scope = nil)
  83. records = Array.wrap(records).compact
  84. if records.empty?
  85. []
  86. else
  87. records.uniq!
  88. Array.wrap(associations).flat_map { |association|
  89. preloaders_on association, records, preload_scope
  90. }
  91. end
  92. end
  93. 1 private
  94. # Loads all the given data into +records+ for the +association+.
  95. 1 def preloaders_on(association, records, scope)
  96. case association
  97. when Hash
  98. preloaders_for_hash(association, records, scope)
  99. when Symbol
  100. preloaders_for_one(association, records, scope)
  101. when String
  102. preloaders_for_one(association.to_sym, records, scope)
  103. else
  104. raise ArgumentError, "#{association.inspect} was not recognized for preload"
  105. end
  106. end
  107. 1 def preloaders_for_hash(association, records, scope)
  108. association.flat_map { |parent, child|
  109. loaders = preloaders_for_one parent, records, scope
  110. recs = loaders.flat_map(&:preloaded_records).uniq
  111. loaders.concat Array.wrap(child).flat_map { |assoc|
  112. preloaders_on assoc, recs, scope
  113. }
  114. loaders
  115. }
  116. end
  117. # Loads all the given data into +records+ for a singular +association+.
  118. #
  119. # Functions by instantiating a preloader class such as Preloader::HasManyThrough and
  120. # call the +run+ method for each passed in class in the +records+ argument.
  121. #
  122. # Not all records have the same class, so group then preload group on the reflection
  123. # itself so that if various subclass share the same association then we do not split
  124. # them unnecessarily
  125. #
  126. # Additionally, polymorphic belongs_to associations can have multiple associated
  127. # classes, depending on the polymorphic_type field. So we group by the classes as
  128. # well.
  129. 1 def preloaders_for_one(association, records, scope)
  130. grouped_records(association, records).flat_map do |reflection, klasses|
  131. klasses.map do |rhs_klass, rs|
  132. loader = preloader_for(reflection, rs).new(rhs_klass, rs, reflection, scope)
  133. loader.run self
  134. loader
  135. end
  136. end
  137. end
  138. 1 def grouped_records(association, records)
  139. h = {}
  140. records.each do |record|
  141. next unless record
  142. assoc = record.association(association)
  143. next unless assoc.klass
  144. klasses = h[assoc.reflection] ||= {}
  145. (klasses[assoc.klass] ||= []) << record
  146. end
  147. h
  148. end
  149. 1 class AlreadyLoaded # :nodoc:
  150. 1 def initialize(klass, owners, reflection, preload_scope)
  151. @owners = owners
  152. @reflection = reflection
  153. end
  154. 1 def run(preloader); end
  155. 1 def preloaded_records
  156. owners.flat_map { |owner| owner.association(reflection.name).target }
  157. end
  158. 1 protected
  159. 1 attr_reader :owners, :reflection
  160. end
  161. # Returns a class containing the logic needed to load preload the data
  162. # and attach it to a relation. The class returned implements a `run` method
  163. # that accepts a preloader.
  164. 1 def preloader_for(reflection, owners)
  165. if owners.first.association(reflection.name).loaded?
  166. return AlreadyLoaded
  167. end
  168. reflection.check_preloadable!
  169. if reflection.options[:through]
  170. ThroughAssociation
  171. else
  172. Association
  173. end
  174. end
  175. end
  176. end
  177. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/association.rb

33.33% lines covered

72 relevant lines. 24 lines covered and 48 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. 1 class Preloader
  5. 1 class Association #:nodoc:
  6. 1 attr_reader :preloaded_records
  7. 1 def initialize(klass, owners, reflection, preload_scope)
  8. @klass = klass
  9. @owners = owners
  10. @reflection = reflection
  11. @preload_scope = preload_scope
  12. @model = owners.first && owners.first.class
  13. @preloaded_records = []
  14. end
  15. 1 def run(preloader)
  16. records = load_records do |record|
  17. owner = owners_by_key[convert_key(record[association_key_name])]
  18. association = owner.association(reflection.name)
  19. association.set_inverse_instance(record)
  20. end
  21. owners.each do |owner|
  22. associate_records_to_owner(owner, records[convert_key(owner[owner_key_name])] || [])
  23. end
  24. end
  25. 1 protected
  26. 1 attr_reader :owners, :reflection, :preload_scope, :model, :klass
  27. 1 private
  28. # The name of the key on the associated records
  29. 1 def association_key_name
  30. reflection.join_primary_key(klass)
  31. end
  32. # The name of the key on the model which declares the association
  33. 1 def owner_key_name
  34. reflection.join_foreign_key
  35. end
  36. 1 def associate_records_to_owner(owner, records)
  37. association = owner.association(reflection.name)
  38. association.loaded!
  39. if reflection.collection?
  40. association.target.concat(records)
  41. else
  42. association.target = records.first unless records.empty?
  43. end
  44. end
  45. 1 def owner_keys
  46. @owner_keys ||= owners_by_key.keys
  47. end
  48. 1 def owners_by_key
  49. unless defined?(@owners_by_key)
  50. @owners_by_key = owners.each_with_object({}) do |owner, h|
  51. key = convert_key(owner[owner_key_name])
  52. h[key] = owner if key
  53. end
  54. end
  55. @owners_by_key
  56. end
  57. 1 def key_conversion_required?
  58. unless defined?(@key_conversion_required)
  59. @key_conversion_required = (association_key_type != owner_key_type)
  60. end
  61. @key_conversion_required
  62. end
  63. 1 def convert_key(key)
  64. if key_conversion_required?
  65. key.to_s
  66. else
  67. key
  68. end
  69. end
  70. 1 def association_key_type
  71. @klass.type_for_attribute(association_key_name).type
  72. end
  73. 1 def owner_key_type
  74. @model.type_for_attribute(owner_key_name).type
  75. end
  76. 1 def load_records(&block)
  77. return {} if owner_keys.empty?
  78. # Some databases impose a limit on the number of ids in a list (in Oracle it's 1000)
  79. # Make several smaller queries if necessary or make one query if the adapter supports it
  80. slices = owner_keys.each_slice(klass.connection.in_clause_length || owner_keys.size)
  81. @preloaded_records = slices.flat_map do |slice|
  82. records_for(slice, &block)
  83. end
  84. @preloaded_records.group_by do |record|
  85. convert_key(record[association_key_name])
  86. end
  87. end
  88. 1 def records_for(ids, &block)
  89. scope.where(association_key_name => ids).load(&block)
  90. end
  91. 1 def scope
  92. @scope ||= build_scope
  93. end
  94. 1 def reflection_scope
  95. @reflection_scope ||= reflection.scope ? reflection.scope_for(klass.unscoped) : klass.unscoped
  96. end
  97. 1 def build_scope
  98. scope = klass.scope_for_association
  99. if reflection.type
  100. scope.where!(reflection.type => model.polymorphic_name)
  101. end
  102. scope.merge!(reflection_scope) if reflection.scope
  103. scope.merge!(preload_scope) if preload_scope
  104. scope
  105. end
  106. end
  107. end
  108. end
  109. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/preloader/through_association.rb

17.74% lines covered

62 relevant lines. 11 lines covered and 51 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. 1 class Preloader
  5. 1 class ThroughAssociation < Association # :nodoc:
  6. 1 def run(preloader)
  7. already_loaded = owners.first.association(through_reflection.name).loaded?
  8. through_scope = through_scope()
  9. reflection_scope = target_reflection_scope
  10. through_preloaders = preloader.preload(owners, through_reflection.name, through_scope)
  11. middle_records = through_preloaders.flat_map(&:preloaded_records)
  12. preloaders = preloader.preload(middle_records, source_reflection.name, reflection_scope)
  13. @preloaded_records = preloaders.flat_map(&:preloaded_records)
  14. owners.each do |owner|
  15. through_records = Array(owner.association(through_reflection.name).target)
  16. if already_loaded
  17. if source_type = reflection.options[:source_type]
  18. through_records = through_records.select do |record|
  19. record[reflection.foreign_type] == source_type
  20. end
  21. end
  22. else
  23. owner.association(through_reflection.name).reset if through_scope
  24. end
  25. result = through_records.flat_map do |record|
  26. association = record.association(source_reflection.name)
  27. target = association.target
  28. association.reset if preload_scope
  29. target
  30. end
  31. result.compact!
  32. if reflection_scope
  33. result.sort_by! { |rhs| preload_index[rhs] } if reflection_scope.order_values.any?
  34. result.uniq! if reflection_scope.distinct_value
  35. end
  36. associate_records_to_owner(owner, result)
  37. end
  38. end
  39. 1 private
  40. 1 def through_reflection
  41. reflection.through_reflection
  42. end
  43. 1 def source_reflection
  44. reflection.source_reflection
  45. end
  46. 1 def preload_index
  47. @preload_index ||= @preloaded_records.each_with_object({}).with_index do |(id, result), index|
  48. result[id] = index
  49. end
  50. end
  51. 1 def through_scope
  52. scope = through_reflection.klass.unscoped
  53. options = reflection.options
  54. if options[:source_type]
  55. scope.where! reflection.foreign_type => options[:source_type]
  56. elsif !reflection_scope.where_clause.empty?
  57. scope.where_clause = reflection_scope.where_clause
  58. values = reflection_scope.values
  59. if includes = values[:includes]
  60. scope.includes!(source_reflection.name => includes)
  61. else
  62. scope.includes!(source_reflection.name)
  63. end
  64. if values[:references] && !values[:references].empty?
  65. scope.references!(values[:references])
  66. else
  67. scope.references!(source_reflection.table_name)
  68. end
  69. if joins = values[:joins]
  70. scope.joins!(source_reflection.name => joins)
  71. end
  72. if left_outer_joins = values[:left_outer_joins]
  73. scope.left_outer_joins!(source_reflection.name => left_outer_joins)
  74. end
  75. if scope.eager_loading? && order_values = values[:order]
  76. scope = scope.order(order_values)
  77. end
  78. end
  79. scope unless scope.empty_scope?
  80. end
  81. 1 def target_reflection_scope
  82. if preload_scope
  83. reflection_scope.merge(preload_scope)
  84. elsif reflection.scope
  85. reflection_scope
  86. else
  87. nil
  88. end
  89. end
  90. end
  91. end
  92. end
  93. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/singular_association.rb

32.5% lines covered

40 relevant lines. 13 lines covered and 27 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. 1 class SingularAssociation < Association #:nodoc:
  5. # Implements the reader method, e.g. foo.bar for Foo.has_one :bar
  6. 1 def reader
  7. if !loaded? || stale_target?
  8. reload
  9. end
  10. target
  11. end
  12. # Implements the writer method, e.g. foo.bar= for Foo.belongs_to :bar
  13. 1 def writer(record)
  14. replace(record)
  15. end
  16. 1 def build(attributes = {}, &block)
  17. record = build_record(attributes, &block)
  18. set_new_record(record)
  19. record
  20. end
  21. # Implements the reload reader method, e.g. foo.reload_bar for
  22. # Foo.has_one :bar
  23. 1 def force_reload_reader
  24. klass.uncached { reload }
  25. target
  26. end
  27. 1 private
  28. 1 def scope_for_create
  29. super.except!(klass.primary_key)
  30. end
  31. 1 def find_target
  32. scope = self.scope
  33. return scope.take if skip_statement_cache?(scope)
  34. conn = klass.connection
  35. sc = reflection.association_scope_cache(conn, owner) do |params|
  36. as = AssociationScope.create { params.bind }
  37. target_scope.merge!(as.scope(self)).limit(1)
  38. end
  39. binds = AssociationScope.get_bind_values(owner, reflection.chain)
  40. sc.execute(binds, conn) do |record|
  41. set_inverse_instance record
  42. end.first
  43. rescue ::RangeError
  44. nil
  45. end
  46. 1 def replace(record)
  47. raise NotImplementedError, "Subclasses must implement a replace(record) method"
  48. end
  49. 1 def set_new_record(record)
  50. replace(record)
  51. end
  52. 1 def _create_record(attributes, raise_error = false, &block)
  53. record = build_record(attributes, &block)
  54. saved = record.save
  55. set_new_record(record)
  56. raise RecordInvalid.new(record) if !saved && raise_error
  57. record
  58. end
  59. end
  60. end
  61. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/associations/through_association.rb

27.45% lines covered

51 relevant lines. 14 lines covered and 37 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Associations
  4. # = Active Record Through Association
  5. 1 module ThroughAssociation #:nodoc:
  6. 1 delegate :source_reflection, to: :reflection
  7. 1 private
  8. 1 def through_reflection
  9. @through_reflection ||= begin
  10. refl = reflection.through_reflection
  11. while refl.through_reflection?
  12. refl = refl.through_reflection
  13. end
  14. refl
  15. end
  16. end
  17. 1 def through_association
  18. @through_association ||= owner.association(through_reflection.name)
  19. end
  20. # We merge in these scopes for two reasons:
  21. #
  22. # 1. To get the default_scope conditions for any of the other reflections in the chain
  23. # 2. To get the type conditions for any STI models in the chain
  24. 1 def target_scope
  25. scope = super
  26. reflection.chain.drop(1).each do |reflection|
  27. relation = reflection.klass.scope_for_association
  28. scope.merge!(
  29. relation.except(:select, :create_with, :includes, :preload, :joins, :eager_load)
  30. )
  31. end
  32. scope
  33. end
  34. # Construct attributes for :through pointing to owner and associate. This is used by the
  35. # methods which create and delete records on the association.
  36. #
  37. # We only support indirectly modifying through associations which have a belongs_to source.
  38. # This is the "has_many :tags, through: :taggings" situation, where the join model
  39. # typically has a belongs_to on both side. In other words, associations which could also
  40. # be represented as has_and_belongs_to_many associations.
  41. #
  42. # We do not support creating/deleting records on the association where the source has
  43. # some other type, because this opens up a whole can of worms, and in basically any
  44. # situation it is more natural for the user to just create or modify their join records
  45. # directly as required.
  46. 1 def construct_join_attributes(*records)
  47. ensure_mutable
  48. association_primary_key = source_reflection.association_primary_key(reflection.klass)
  49. if association_primary_key == reflection.klass.primary_key && !options[:source_type]
  50. join_attributes = { source_reflection.name => records }
  51. else
  52. join_attributes = {
  53. source_reflection.foreign_key => records.map(&association_primary_key.to_sym)
  54. }
  55. end
  56. if options[:source_type]
  57. join_attributes[source_reflection.foreign_type] = [ options[:source_type] ]
  58. end
  59. if records.count == 1
  60. join_attributes.transform_values!(&:first)
  61. else
  62. join_attributes
  63. end
  64. end
  65. # Note: this does not capture all cases, for example it would be crazy to try to
  66. # properly support stale-checking for nested associations.
  67. 1 def stale_state
  68. if through_reflection.belongs_to?
  69. owner[through_reflection.foreign_key] && owner[through_reflection.foreign_key].to_s
  70. end
  71. end
  72. 1 def foreign_key_present?
  73. through_reflection.belongs_to? && !owner[through_reflection.foreign_key].nil?
  74. end
  75. 1 def ensure_mutable
  76. unless source_reflection.belongs_to?
  77. if reflection.has_one?
  78. raise HasOneThroughCantAssociateThroughHasOneOrManyReflection.new(owner, reflection)
  79. else
  80. raise HasManyThroughCantAssociateThroughHasOneOrManyReflection.new(owner, reflection)
  81. end
  82. end
  83. end
  84. 1 def ensure_not_nested
  85. if reflection.nested?
  86. if reflection.has_one?
  87. raise HasOneThroughNestedAssociationsAreReadonly.new(owner, reflection)
  88. else
  89. raise HasManyThroughNestedAssociationsAreReadonly.new(owner, reflection)
  90. end
  91. end
  92. end
  93. 1 def build_record(attributes)
  94. inverse = source_reflection.inverse_of
  95. target = through_association.target
  96. if inverse && target && !target.is_a?(Array)
  97. attributes[inverse.foreign_key] = target.id
  98. end
  99. super
  100. end
  101. end
  102. end
  103. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/coders/json.rb

71.43% lines covered

7 relevant lines. 5 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Coders # :nodoc:
  4. 1 class JSON # :nodoc:
  5. 1 def self.dump(obj)
  6. ActiveSupport::JSON.encode(obj)
  7. end
  8. 1 def self.load(json)
  9. ActiveSupport::JSON.decode(json) unless json.blank?
  10. end
  11. end
  12. end
  13. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/transaction.rb

78.85% lines covered

156 relevant lines. 123 lines covered and 33 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module ConnectionAdapters
  4. 1 class TransactionState
  5. 1 def initialize(state = nil)
  6. 8 @state = state
  7. 8 @children = []
  8. end
  9. 1 def add_child(state)
  10. 1 @children << state
  11. end
  12. 1 def finalized?
  13. 10 @state
  14. end
  15. 1 def committed?
  16. 3 @state == :committed || @state == :fully_committed
  17. end
  18. 1 def fully_committed?
  19. 2 @state == :fully_committed
  20. end
  21. 1 def rolledback?
  22. 2 @state == :rolledback || @state == :fully_rolledback
  23. end
  24. 1 def fully_rolledback?
  25. @state == :fully_rolledback
  26. end
  27. 1 def fully_completed?
  28. 2 completed?
  29. end
  30. 1 def completed?
  31. 2 committed? || rolledback?
  32. end
  33. 1 def set_state(state)
  34. ActiveSupport::Deprecation.warn(<<-MSG.squish)
  35. The set_state method is deprecated and will be removed in
  36. Rails 6.0. Please use rollback! or commit! to set transaction
  37. state directly.
  38. MSG
  39. case state
  40. when :rolledback
  41. rollback!
  42. when :committed
  43. commit!
  44. when nil
  45. nullify!
  46. else
  47. raise ArgumentError, "Invalid transaction state: #{state}"
  48. end
  49. end
  50. 1 def rollback!
  51. 1 @children.each { |c| c.rollback! }
  52. 1 @state = :rolledback
  53. end
  54. 1 def full_rollback!
  55. 8 @children.each { |c| c.rollback! }
  56. 7 @state = :fully_rolledback
  57. end
  58. 1 def commit!
  59. 1 @state = :committed
  60. end
  61. 1 def full_commit!
  62. @state = :fully_committed
  63. end
  64. 1 def nullify!
  65. @state = nil
  66. end
  67. end
  68. 1 class NullTransaction #:nodoc:
  69. 1 def initialize; end
  70. 1 def state; end
  71. 1 def closed?; true; end
  72. 1 def open?; false; end
  73. 8 def joinable?; false; end
  74. 1 def add_record(record); end
  75. end
  76. 1 class Transaction #:nodoc:
  77. 1 attr_reader :connection, :state, :records, :savepoint_name
  78. 1 attr_writer :joinable
  79. 1 def initialize(connection, options, run_commit_callbacks: false)
  80. 8 @connection = connection
  81. 8 @state = TransactionState.new
  82. 8 @records = []
  83. 8 @joinable = options.fetch(:joinable, true)
  84. 8 @run_commit_callbacks = run_commit_callbacks
  85. end
  86. 1 def add_record(record)
  87. records << record
  88. end
  89. 1 def rollback_records
  90. 7 ite = records.uniq
  91. 7 while record = ite.shift
  92. record.rolledback!(force_restore_state: full_rollback?)
  93. end
  94. ensure
  95. 7 ite.each do |i|
  96. i.rolledback!(force_restore_state: full_rollback?, should_run_callbacks: false)
  97. end
  98. end
  99. 1 def before_commit_records
  100. 1 records.uniq.each(&:before_committed!) if @run_commit_callbacks
  101. end
  102. 1 def commit_records
  103. 1 ite = records.uniq
  104. 1 while record = ite.shift
  105. if @run_commit_callbacks
  106. record.committed!
  107. else
  108. # if not running callbacks, only adds the record to the parent transaction
  109. record.add_to_transaction
  110. end
  111. end
  112. ensure
  113. 1 ite.each { |i| i.committed!(should_run_callbacks: false) }
  114. end
  115. 1 def full_rollback?; true; end
  116. 3 def joinable?; @joinable; end
  117. 11 def closed?; false; end
  118. 11 def open?; !closed?; end
  119. end
  120. 1 class SavepointTransaction < Transaction
  121. 1 def initialize(connection, savepoint_name, parent_transaction, options, *args)
  122. 1 super(connection, options, *args)
  123. 1 parent_transaction.state.add_child(@state)
  124. 1 if options[:isolation]
  125. raise ActiveRecord::TransactionIsolationError, "cannot set transaction isolation in a nested transaction"
  126. end
  127. 1 connection.create_savepoint(@savepoint_name = savepoint_name)
  128. end
  129. 1 def rollback
  130. connection.rollback_to_savepoint(savepoint_name)
  131. @state.rollback!
  132. end
  133. 1 def commit
  134. 1 connection.release_savepoint(savepoint_name)
  135. 1 @state.commit!
  136. end
  137. 1 def full_rollback?; false; end
  138. end
  139. 1 class RealTransaction < Transaction
  140. 1 def initialize(connection, options, *args)
  141. 7 super
  142. 7 if options[:isolation]
  143. connection.begin_isolated_db_transaction(options[:isolation])
  144. else
  145. 7 connection.begin_db_transaction
  146. end
  147. end
  148. 1 def rollback
  149. 7 connection.rollback_db_transaction
  150. 7 @state.full_rollback!
  151. end
  152. 1 def commit
  153. connection.commit_db_transaction
  154. @state.full_commit!
  155. end
  156. end
  157. 1 class TransactionManager #:nodoc:
  158. 1 def initialize(connection)
  159. 1 @stack = []
  160. 1 @connection = connection
  161. end
  162. 1 def begin_transaction(options = {})
  163. 8 @connection.lock.synchronize do
  164. 8 run_commit_callbacks = !current_transaction.joinable?
  165. transaction =
  166. 7 if @stack.empty?
  167. 7 RealTransaction.new(@connection, options, run_commit_callbacks: run_commit_callbacks)
  168. else
  169. 1 SavepointTransaction.new(@connection, "active_record_#{@stack.size}", @stack.last, options,
  170. run_commit_callbacks: run_commit_callbacks)
  171. end
  172. 8 @stack.push(transaction)
  173. 8 transaction
  174. end
  175. end
  176. 1 def commit_transaction
  177. 1 @connection.lock.synchronize do
  178. 1 transaction = @stack.last
  179. 1 begin
  180. 1 transaction.before_commit_records
  181. ensure
  182. 1 @stack.pop
  183. end
  184. 1 transaction.commit
  185. 1 transaction.commit_records
  186. end
  187. end
  188. 1 def rollback_transaction(transaction = nil)
  189. 7 @connection.lock.synchronize do
  190. 7 transaction ||= @stack.pop
  191. 7 transaction.rollback
  192. 7 transaction.rollback_records
  193. end
  194. end
  195. 1 def within_new_transaction(options = {})
  196. 1 @connection.lock.synchronize do
  197. 1 begin
  198. 1 transaction = begin_transaction options
  199. 1 yield
  200. rescue Exception => error
  201. if transaction
  202. rollback_transaction
  203. after_failure_actions(transaction, error)
  204. end
  205. raise
  206. ensure
  207. 1 unless error
  208. 1 if Thread.current.status == "aborting"
  209. rollback_transaction if transaction
  210. else
  211. 1 begin
  212. 1 commit_transaction if transaction
  213. rescue Exception
  214. rollback_transaction(transaction) unless transaction.state.completed?
  215. raise
  216. end
  217. end
  218. end
  219. end
  220. end
  221. end
  222. 1 def open_transactions
  223. @stack.size
  224. end
  225. 1 def current_transaction
  226. 20 @stack.last || NULL_TRANSACTION
  227. end
  228. 1 private
  229. 1 NULL_TRANSACTION = NullTransaction.new
  230. # Deallocate invalidated prepared statements outside of the transaction
  231. 1 def after_failure_actions(transaction, error)
  232. return unless transaction.is_a?(RealTransaction)
  233. return unless error.is_a?(ActiveRecord::PreparedStatementCacheExpired)
  234. @connection.clear_cache!
  235. end
  236. end
  237. end
  238. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixture_set/file.rb

39.53% lines covered

43 relevant lines. 17 lines covered and 26 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "erb"
  3. 1 require "yaml"
  4. 1 module ActiveRecord
  5. 1 class FixtureSet
  6. 1 class File # :nodoc:
  7. 1 include Enumerable
  8. ##
  9. # Open a fixture file named +file+. When called with a block, the block
  10. # is called with the filehandle and the filehandle is automatically closed
  11. # when the block finishes.
  12. 1 def self.open(file)
  13. x = new file
  14. block_given? ? yield(x) : x
  15. end
  16. 1 def initialize(file)
  17. @file = file
  18. end
  19. 1 def each(&block)
  20. rows.each(&block)
  21. end
  22. 1 def model_class
  23. config_row["model_class"]
  24. end
  25. 1 private
  26. 1 def rows
  27. @rows ||= raw_rows.reject { |fixture_name, _| fixture_name == "_fixture" }
  28. end
  29. 1 def config_row
  30. @config_row ||= begin
  31. row = raw_rows.find { |fixture_name, _| fixture_name == "_fixture" }
  32. if row
  33. row.last
  34. else
  35. { 'model_class': nil }
  36. end
  37. end
  38. end
  39. 1 def raw_rows
  40. @raw_rows ||= begin
  41. data = YAML.load(render(IO.read(@file)))
  42. data ? validate(data).to_a : []
  43. rescue ArgumentError, Psych::SyntaxError => error
  44. raise Fixture::FormatError, "a YAML error occurred parsing #{@file}. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html\nThe exact error was:\n #{error.class}: #{error}", error.backtrace
  45. end
  46. end
  47. 1 def prepare_erb(content)
  48. erb = ERB.new(content)
  49. erb.filename = @file
  50. erb
  51. end
  52. 1 def render(content)
  53. context = ActiveRecord::FixtureSet::RenderContext.create_subclass.new
  54. prepare_erb(content).result(context.get_binding)
  55. end
  56. # Validate our unmarshalled data.
  57. 1 def validate(data)
  58. unless Hash === data || YAML::Omap === data
  59. raise Fixture::FormatError, "fixture is not a hash: #{@file}"
  60. end
  61. invalid = data.reject { |_, row| Hash === row }
  62. if invalid.any?
  63. raise Fixture::FormatError, "fixture key is not a hash: #{@file}, keys: #{invalid.keys.inspect}"
  64. end
  65. data
  66. end
  67. end
  68. end
  69. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/fixtures.rb

44.51% lines covered

328 relevant lines. 146 lines covered and 182 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "erb"
  3. 1 require "yaml"
  4. 1 require "zlib"
  5. 1 require "set"
  6. 1 require "active_support/dependencies"
  7. 1 require "active_support/core_ext/digest/uuid"
  8. 1 require "active_record/fixture_set/file"
  9. 1 require "active_record/errors"
  10. 1 module ActiveRecord
  11. 1 class FixtureClassNotFound < ActiveRecord::ActiveRecordError #:nodoc:
  12. end
  13. # \Fixtures are a way of organizing data that you want to test against; in short, sample data.
  14. #
  15. # They are stored in YAML files, one file per model, which are placed in the directory
  16. # appointed by <tt>ActiveSupport::TestCase.fixture_path=(path)</tt> (this is automatically
  17. # configured for Rails, so you can just put your files in <tt><your-rails-app>/test/fixtures/</tt>).
  18. # The fixture file ends with the +.yml+ file extension, for example:
  19. # <tt><your-rails-app>/test/fixtures/web_sites.yml</tt>).
  20. #
  21. # The format of a fixture file looks like this:
  22. #
  23. # rubyonrails:
  24. # id: 1
  25. # name: Ruby on Rails
  26. # url: http://www.rubyonrails.org
  27. #
  28. # google:
  29. # id: 2
  30. # name: Google
  31. # url: http://www.google.com
  32. #
  33. # This fixture file includes two fixtures. Each YAML fixture (ie. record) is given a name and
  34. # is followed by an indented list of key/value pairs in the "key: value" format. Records are
  35. # separated by a blank line for your viewing pleasure.
  36. #
  37. # Note: Fixtures are unordered. If you want ordered fixtures, use the omap YAML type.
  38. # See http://yaml.org/type/omap.html
  39. # for the specification. You will need ordered fixtures when you have foreign key constraints
  40. # on keys in the same table. This is commonly needed for tree structures. Example:
  41. #
  42. # --- !omap
  43. # - parent:
  44. # id: 1
  45. # parent_id: NULL
  46. # title: Parent
  47. # - child:
  48. # id: 2
  49. # parent_id: 1
  50. # title: Child
  51. #
  52. # = Using Fixtures in Test Cases
  53. #
  54. # Since fixtures are a testing construct, we use them in our unit and functional tests. There
  55. # are two ways to use the fixtures, but first let's take a look at a sample unit test:
  56. #
  57. # require 'test_helper'
  58. #
  59. # class WebSiteTest < ActiveSupport::TestCase
  60. # test "web_site_count" do
  61. # assert_equal 2, WebSite.count
  62. # end
  63. # end
  64. #
  65. # By default, +test_helper.rb+ will load all of your fixtures into your test
  66. # database, so this test will succeed.
  67. #
  68. # The testing environment will automatically load all the fixtures into the database before each
  69. # test. To ensure consistent data, the environment deletes the fixtures before running the load.
  70. #
  71. # In addition to being available in the database, the fixture's data may also be accessed by
  72. # using a special dynamic method, which has the same name as the model.
  73. #
  74. # Passing in a fixture name to this dynamic method returns the fixture matching this name:
  75. #
  76. # test "find one" do
  77. # assert_equal "Ruby on Rails", web_sites(:rubyonrails).name
  78. # end
  79. #
  80. # Passing in multiple fixture names returns all fixtures matching these names:
  81. #
  82. # test "find all by name" do
  83. # assert_equal 2, web_sites(:rubyonrails, :google).length
  84. # end
  85. #
  86. # Passing in no arguments returns all fixtures:
  87. #
  88. # test "find all" do
  89. # assert_equal 2, web_sites.length
  90. # end
  91. #
  92. # Passing in any fixture name that does not exist will raise <tt>StandardError</tt>:
  93. #
  94. # test "find by name that does not exist" do
  95. # assert_raise(StandardError) { web_sites(:reddit) }
  96. # end
  97. #
  98. # Alternatively, you may enable auto-instantiation of the fixture data. For instance, take the
  99. # following tests:
  100. #
  101. # test "find_alt_method_1" do
  102. # assert_equal "Ruby on Rails", @web_sites['rubyonrails']['name']
  103. # end
  104. #
  105. # test "find_alt_method_2" do
  106. # assert_equal "Ruby on Rails", @rubyonrails.name
  107. # end
  108. #
  109. # In order to use these methods to access fixtured data within your test cases, you must specify one of the
  110. # following in your ActiveSupport::TestCase-derived class:
  111. #
  112. # - to fully enable instantiated fixtures (enable alternate methods #1 and #2 above)
  113. # self.use_instantiated_fixtures = true
  114. #
  115. # - create only the hash for the fixtures, do not 'find' each instance (enable alternate method #1 only)
  116. # self.use_instantiated_fixtures = :no_instances
  117. #
  118. # Using either of these alternate methods incurs a performance hit, as the fixtured data must be fully
  119. # traversed in the database to create the fixture hash and/or instance variables. This is expensive for
  120. # large sets of fixtured data.
  121. #
  122. # = Dynamic fixtures with ERB
  123. #
  124. # Sometimes you don't care about the content of the fixtures as much as you care about the volume.
  125. # In these cases, you can mix ERB in with your YAML fixtures to create a bunch of fixtures for load
  126. # testing, like:
  127. #
  128. # <% 1.upto(1000) do |i| %>
  129. # fix_<%= i %>:
  130. # id: <%= i %>
  131. # name: guy_<%= i %>
  132. # <% end %>
  133. #
  134. # This will create 1000 very simple fixtures.
  135. #
  136. # Using ERB, you can also inject dynamic values into your fixtures with inserts like
  137. # <tt><%= Date.today.strftime("%Y-%m-%d") %></tt>.
  138. # This is however a feature to be used with some caution. The point of fixtures are that they're
  139. # stable units of predictable sample data. If you feel that you need to inject dynamic values, then
  140. # perhaps you should reexamine whether your application is properly testable. Hence, dynamic values
  141. # in fixtures are to be considered a code smell.
  142. #
  143. # Helper methods defined in a fixture will not be available in other fixtures, to prevent against
  144. # unwanted inter-test dependencies. Methods used by multiple fixtures should be defined in a module
  145. # that is included in ActiveRecord::FixtureSet.context_class.
  146. #
  147. # - define a helper method in <tt>test_helper.rb</tt>
  148. # module FixtureFileHelpers
  149. # def file_sha(path)
  150. # Digest::SHA2.hexdigest(File.read(Rails.root.join('test/fixtures', path)))
  151. # end
  152. # end
  153. # ActiveRecord::FixtureSet.context_class.include FixtureFileHelpers
  154. #
  155. # - use the helper method in a fixture
  156. # photo:
  157. # name: kitten.png
  158. # sha: <%= file_sha 'files/kitten.png' %>
  159. #
  160. # = Transactional Tests
  161. #
  162. # Test cases can use begin+rollback to isolate their changes to the database instead of having to
  163. # delete+insert for every test case.
  164. #
  165. # class FooTest < ActiveSupport::TestCase
  166. # self.use_transactional_tests = true
  167. #
  168. # test "godzilla" do
  169. # assert_not_empty Foo.all
  170. # Foo.destroy_all
  171. # assert_empty Foo.all
  172. # end
  173. #
  174. # test "godzilla aftermath" do
  175. # assert_not_empty Foo.all
  176. # end
  177. # end
  178. #
  179. # If you preload your test database with all fixture data (probably in the rake task) and use
  180. # transactional tests, then you may omit all fixtures declarations in your test cases since
  181. # all the data's already there and every case rolls back its changes.
  182. #
  183. # In order to use instantiated fixtures with preloaded data, set +self.pre_loaded_fixtures+ to
  184. # true. This will provide access to fixture data for every table that has been loaded through
  185. # fixtures (depending on the value of +use_instantiated_fixtures+).
  186. #
  187. # When *not* to use transactional tests:
  188. #
  189. # 1. You're testing whether a transaction works correctly. Nested transactions don't commit until
  190. # all parent transactions commit, particularly, the fixtures transaction which is begun in setup
  191. # and rolled back in teardown. Thus, you won't be able to verify
  192. # the results of your transaction until Active Record supports nested transactions or savepoints (in progress).
  193. # 2. Your database does not support transactions. Every Active Record database supports transactions except MySQL MyISAM.
  194. # Use InnoDB, MaxDB, or NDB instead.
  195. #
  196. # = Advanced Fixtures
  197. #
  198. # Fixtures that don't specify an ID get some extra features:
  199. #
  200. # * Stable, autogenerated IDs
  201. # * Label references for associations (belongs_to, has_one, has_many)
  202. # * HABTM associations as inline lists
  203. #
  204. # There are some more advanced features available even if the id is specified:
  205. #
  206. # * Autofilled timestamp columns
  207. # * Fixture label interpolation
  208. # * Support for YAML defaults
  209. #
  210. # == Stable, Autogenerated IDs
  211. #
  212. # Here, have a monkey fixture:
  213. #
  214. # george:
  215. # id: 1
  216. # name: George the Monkey
  217. #
  218. # reginald:
  219. # id: 2
  220. # name: Reginald the Pirate
  221. #
  222. # Each of these fixtures has two unique identifiers: one for the database
  223. # and one for the humans. Why don't we generate the primary key instead?
  224. # Hashing each fixture's label yields a consistent ID:
  225. #
  226. # george: # generated id: 503576764
  227. # name: George the Monkey
  228. #
  229. # reginald: # generated id: 324201669
  230. # name: Reginald the Pirate
  231. #
  232. # Active Record looks at the fixture's model class, discovers the correct
  233. # primary key, and generates it right before inserting the fixture
  234. # into the database.
  235. #
  236. # The generated ID for a given label is constant, so we can discover
  237. # any fixture's ID without loading anything, as long as we know the label.
  238. #
  239. # == Label references for associations (belongs_to, has_one, has_many)
  240. #
  241. # Specifying foreign keys in fixtures can be very fragile, not to
  242. # mention difficult to read. Since Active Record can figure out the ID of
  243. # any fixture from its label, you can specify FK's by label instead of ID.
  244. #
  245. # === belongs_to
  246. #
  247. # Let's break out some more monkeys and pirates.
  248. #
  249. # ### in pirates.yml
  250. #
  251. # reginald:
  252. # id: 1
  253. # name: Reginald the Pirate
  254. # monkey_id: 1
  255. #
  256. # ### in monkeys.yml
  257. #
  258. # george:
  259. # id: 1
  260. # name: George the Monkey
  261. # pirate_id: 1
  262. #
  263. # Add a few more monkeys and pirates and break this into multiple files,
  264. # and it gets pretty hard to keep track of what's going on. Let's
  265. # use labels instead of IDs:
  266. #
  267. # ### in pirates.yml
  268. #
  269. # reginald:
  270. # name: Reginald the Pirate
  271. # monkey: george
  272. #
  273. # ### in monkeys.yml
  274. #
  275. # george:
  276. # name: George the Monkey
  277. # pirate: reginald
  278. #
  279. # Pow! All is made clear. Active Record reflects on the fixture's model class,
  280. # finds all the +belongs_to+ associations, and allows you to specify
  281. # a target *label* for the *association* (monkey: george) rather than
  282. # a target *id* for the *FK* (<tt>monkey_id: 1</tt>).
  283. #
  284. # ==== Polymorphic belongs_to
  285. #
  286. # Supporting polymorphic relationships is a little bit more complicated, since
  287. # Active Record needs to know what type your association is pointing at. Something
  288. # like this should look familiar:
  289. #
  290. # ### in fruit.rb
  291. #
  292. # belongs_to :eater, polymorphic: true
  293. #
  294. # ### in fruits.yml
  295. #
  296. # apple:
  297. # id: 1
  298. # name: apple
  299. # eater_id: 1
  300. # eater_type: Monkey
  301. #
  302. # Can we do better? You bet!
  303. #
  304. # apple:
  305. # eater: george (Monkey)
  306. #
  307. # Just provide the polymorphic target type and Active Record will take care of the rest.
  308. #
  309. # === has_and_belongs_to_many
  310. #
  311. # Time to give our monkey some fruit.
  312. #
  313. # ### in monkeys.yml
  314. #
  315. # george:
  316. # id: 1
  317. # name: George the Monkey
  318. #
  319. # ### in fruits.yml
  320. #
  321. # apple:
  322. # id: 1
  323. # name: apple
  324. #
  325. # orange:
  326. # id: 2
  327. # name: orange
  328. #
  329. # grape:
  330. # id: 3
  331. # name: grape
  332. #
  333. # ### in fruits_monkeys.yml
  334. #
  335. # apple_george:
  336. # fruit_id: 1
  337. # monkey_id: 1
  338. #
  339. # orange_george:
  340. # fruit_id: 2
  341. # monkey_id: 1
  342. #
  343. # grape_george:
  344. # fruit_id: 3
  345. # monkey_id: 1
  346. #
  347. # Let's make the HABTM fixture go away.
  348. #
  349. # ### in monkeys.yml
  350. #
  351. # george:
  352. # id: 1
  353. # name: George the Monkey
  354. # fruits: apple, orange, grape
  355. #
  356. # ### in fruits.yml
  357. #
  358. # apple:
  359. # name: apple
  360. #
  361. # orange:
  362. # name: orange
  363. #
  364. # grape:
  365. # name: grape
  366. #
  367. # Zap! No more fruits_monkeys.yml file. We've specified the list of fruits
  368. # on George's fixture, but we could've just as easily specified a list
  369. # of monkeys on each fruit. As with +belongs_to+, Active Record reflects on
  370. # the fixture's model class and discovers the +has_and_belongs_to_many+
  371. # associations.
  372. #
  373. # == Autofilled Timestamp Columns
  374. #
  375. # If your table/model specifies any of Active Record's
  376. # standard timestamp columns (+created_at+, +created_on+, +updated_at+, +updated_on+),
  377. # they will automatically be set to <tt>Time.now</tt>.
  378. #
  379. # If you've set specific values, they'll be left alone.
  380. #
  381. # == Fixture label interpolation
  382. #
  383. # The label of the current fixture is always available as a column value:
  384. #
  385. # geeksomnia:
  386. # name: Geeksomnia's Account
  387. # subdomain: $LABEL
  388. # email: $LABEL@email.com
  389. #
  390. # Also, sometimes (like when porting older join table fixtures) you'll need
  391. # to be able to get a hold of the identifier for a given label. ERB
  392. # to the rescue:
  393. #
  394. # george_reginald:
  395. # monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
  396. # pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>
  397. #
  398. # == Support for YAML defaults
  399. #
  400. # You can set and reuse defaults in your fixtures YAML file.
  401. # This is the same technique used in the +database.yml+ file to specify
  402. # defaults:
  403. #
  404. # DEFAULTS: &DEFAULTS
  405. # created_on: <%= 3.weeks.ago.to_s(:db) %>
  406. #
  407. # first:
  408. # name: Smurf
  409. # <<: *DEFAULTS
  410. #
  411. # second:
  412. # name: Fraggle
  413. # <<: *DEFAULTS
  414. #
  415. # Any fixture labeled "DEFAULTS" is safely ignored.
  416. #
  417. # == Configure the fixture model class
  418. #
  419. # It's possible to set the fixture's model class directly in the YAML file.
  420. # This is helpful when fixtures are loaded outside tests and
  421. # +set_fixture_class+ is not available (e.g.
  422. # when running <tt>rails db:fixtures:load</tt>).
  423. #
  424. # _fixture:
  425. # model_class: User
  426. # david:
  427. # name: David
  428. #
  429. # Any fixtures labeled "_fixture" are safely ignored.
  430. 1 class FixtureSet
  431. #--
  432. # An instance of FixtureSet is normally stored in a single YAML file and
  433. # possibly in a folder with the same name.
  434. #++
  435. 1 MAX_ID = 2**30 - 1
  436. 2 @@all_cached_fixtures = Hash.new { |h, k| h[k] = {} }
  437. 1 def self.default_fixture_model_name(fixture_set_name, config = ActiveRecord::Base) # :nodoc:
  438. config.pluralize_table_names ?
  439. fixture_set_name.singularize.camelize :
  440. fixture_set_name.camelize
  441. end
  442. 1 def self.default_fixture_table_name(fixture_set_name, config = ActiveRecord::Base) # :nodoc:
  443. "#{ config.table_name_prefix }"\
  444. "#{ fixture_set_name.tr('/', '_') }"\
  445. "#{ config.table_name_suffix }".to_sym
  446. end
  447. 1 def self.reset_cache
  448. @@all_cached_fixtures.clear
  449. end
  450. 1 def self.cache_for_connection(connection)
  451. 5 @@all_cached_fixtures[connection]
  452. end
  453. 1 def self.fixture_is_cached?(connection, table_name)
  454. cache_for_connection(connection)[table_name]
  455. end
  456. 1 def self.cached_fixtures(connection, keys_to_fetch = nil)
  457. 5 if keys_to_fetch
  458. 5 cache_for_connection(connection).values_at(*keys_to_fetch)
  459. else
  460. cache_for_connection(connection).values
  461. end
  462. end
  463. 1 def self.cache_fixtures(connection, fixtures_map)
  464. cache_for_connection(connection).update(fixtures_map)
  465. end
  466. 1 def self.instantiate_fixtures(object, fixture_set, load_instances = true)
  467. if load_instances
  468. fixture_set.each do |fixture_name, fixture|
  469. begin
  470. object.instance_variable_set "@#{fixture_name}", fixture.find
  471. rescue FixtureClassNotFound
  472. nil
  473. end
  474. end
  475. end
  476. end
  477. 1 def self.instantiate_all_loaded_fixtures(object, load_instances = true)
  478. all_loaded_fixtures.each_value do |fixture_set|
  479. instantiate_fixtures(object, fixture_set, load_instances)
  480. end
  481. end
  482. 1 cattr_accessor :all_loaded_fixtures, default: {}
  483. 1 class ClassCache
  484. 1 def initialize(class_names, config)
  485. 5 @class_names = class_names.stringify_keys
  486. 5 @config = config
  487. # Remove string values that aren't constants or subclasses of AR
  488. 5 @class_names.delete_if { |klass_name, klass| !insert_class(@class_names, klass_name, klass) }
  489. end
  490. 1 def [](fs_name)
  491. @class_names.fetch(fs_name) {
  492. klass = default_fixture_model(fs_name, @config).safe_constantize
  493. insert_class(@class_names, fs_name, klass)
  494. }
  495. end
  496. 1 private
  497. 1 def insert_class(class_names, name, klass)
  498. # We only want to deal with AR objects.
  499. if klass && klass < ActiveRecord::Base
  500. class_names[name] = klass
  501. else
  502. class_names[name] = nil
  503. end
  504. end
  505. 1 def default_fixture_model(fs_name, config)
  506. ActiveRecord::FixtureSet.default_fixture_model_name(fs_name, config)
  507. end
  508. end
  509. 1 def self.create_fixtures(fixtures_directory, fixture_set_names, class_names = {}, config = ActiveRecord::Base)
  510. 5 fixture_set_names = Array(fixture_set_names).map(&:to_s)
  511. 5 class_names = ClassCache.new class_names, config
  512. # FIXME: Apparently JK uses this.
  513. 5 connection = block_given? ? yield : ActiveRecord::Base.connection
  514. 5 files_to_read = fixture_set_names.reject { |fs_name|
  515. fixture_is_cached?(connection, fs_name)
  516. }
  517. 5 unless files_to_read.empty?
  518. fixtures_map = {}
  519. fixture_sets = files_to_read.map do |fs_name|
  520. klass = class_names[fs_name]
  521. conn = klass ? klass.connection : connection
  522. fixtures_map[fs_name] = new( # ActiveRecord::FixtureSet.new
  523. conn,
  524. fs_name,
  525. klass,
  526. ::File.join(fixtures_directory, fs_name))
  527. end
  528. update_all_loaded_fixtures fixtures_map
  529. fixture_sets_by_connection = fixture_sets.group_by { |fs| fs.model_class ? fs.model_class.connection : connection }
  530. fixture_sets_by_connection.each do |conn, set|
  531. table_rows_for_connection = Hash.new { |h, k| h[k] = [] }
  532. set.each do |fs|
  533. fs.table_rows.each do |table, rows|
  534. table_rows_for_connection[table].unshift(*rows)
  535. end
  536. end
  537. conn.insert_fixtures_set(table_rows_for_connection, table_rows_for_connection.keys)
  538. # Cap primary key sequences to max(pk).
  539. if conn.respond_to?(:reset_pk_sequence!)
  540. set.each { |fs| conn.reset_pk_sequence!(fs.table_name) }
  541. end
  542. end
  543. cache_fixtures(connection, fixtures_map)
  544. end
  545. 5 cached_fixtures(connection, fixture_set_names)
  546. end
  547. # Returns a consistent, platform-independent identifier for +label+.
  548. # Integer identifiers are values less than 2^30. UUIDs are RFC 4122 version 5 SHA-1 hashes.
  549. 1 def self.identify(label, column_type = :integer)
  550. if column_type == :uuid
  551. Digest::UUID.uuid_v5(Digest::UUID::OID_NAMESPACE, label.to_s)
  552. else
  553. Zlib.crc32(label.to_s) % MAX_ID
  554. end
  555. end
  556. # Superclass for the evaluation contexts used by ERB fixtures.
  557. 1 def self.context_class
  558. @context_class ||= Class.new
  559. end
  560. 1 def self.update_all_loaded_fixtures(fixtures_map) # :nodoc:
  561. all_loaded_fixtures.update(fixtures_map)
  562. end
  563. 1 attr_reader :table_name, :name, :fixtures, :model_class, :config
  564. 1 def initialize(connection, name, class_name, path, config = ActiveRecord::Base)
  565. @name = name
  566. @path = path
  567. @config = config
  568. self.model_class = class_name
  569. @fixtures = read_fixture_files(path)
  570. @connection = connection
  571. @table_name = (model_class.respond_to?(:table_name) ?
  572. model_class.table_name :
  573. self.class.default_fixture_table_name(name, config))
  574. end
  575. 1 def [](x)
  576. fixtures[x]
  577. end
  578. 1 def []=(k, v)
  579. fixtures[k] = v
  580. end
  581. 1 def each(&block)
  582. fixtures.each(&block)
  583. end
  584. 1 def size
  585. fixtures.size
  586. end
  587. # Returns a hash of rows to be inserted. The key is the table, the value is
  588. # a list of rows to insert to that table.
  589. 1 def table_rows
  590. now = config.default_timezone == :utc ? Time.now.utc : Time.now
  591. # allow a standard key to be used for doing defaults in YAML
  592. fixtures.delete("DEFAULTS")
  593. # track any join tables we need to insert later
  594. rows = Hash.new { |h, table| h[table] = [] }
  595. rows[table_name] = fixtures.map do |label, fixture|
  596. row = fixture.to_hash
  597. if model_class
  598. # fill in timestamp columns if they aren't specified and the model is set to record_timestamps
  599. if model_class.record_timestamps
  600. timestamp_column_names.each do |c_name|
  601. row[c_name] = now unless row.key?(c_name)
  602. end
  603. end
  604. # interpolate the fixture label
  605. row.each do |key, value|
  606. row[key] = value.gsub("$LABEL", label.to_s) if value.is_a?(String)
  607. end
  608. # generate a primary key if necessary
  609. if has_primary_key_column? && !row.include?(primary_key_name)
  610. row[primary_key_name] = ActiveRecord::FixtureSet.identify(label, primary_key_type)
  611. end
  612. # Resolve enums
  613. model_class.defined_enums.each do |name, values|
  614. if row.include?(name)
  615. row[name] = values.fetch(row[name], row[name])
  616. end
  617. end
  618. # If STI is used, find the correct subclass for association reflection
  619. reflection_class =
  620. if row.include?(inheritance_column_name)
  621. row[inheritance_column_name].constantize rescue model_class
  622. else
  623. model_class
  624. end
  625. reflection_class._reflections.each_value do |association|
  626. case association.macro
  627. when :belongs_to
  628. # Do not replace association name with association foreign key if they are named the same
  629. fk_name = (association.options[:foreign_key] || "#{association.name}_id").to_s
  630. if association.name.to_s != fk_name && value = row.delete(association.name.to_s)
  631. if association.polymorphic? && value.sub!(/\s*\(([^\)]*)\)\s*$/, "")
  632. # support polymorphic belongs_to as "label (Type)"
  633. row[association.foreign_type] = $1
  634. end
  635. fk_type = reflection_class.type_for_attribute(fk_name).type
  636. row[fk_name] = ActiveRecord::FixtureSet.identify(value, fk_type)
  637. end
  638. when :has_many
  639. if association.options[:through]
  640. add_join_records(rows, row, HasManyThroughProxy.new(association))
  641. end
  642. end
  643. end
  644. end
  645. row
  646. end
  647. rows
  648. end
  649. 1 class ReflectionProxy # :nodoc:
  650. 1 def initialize(association)
  651. @association = association
  652. end
  653. 1 def join_table
  654. @association.join_table
  655. end
  656. 1 def name
  657. @association.name
  658. end
  659. 1 def primary_key_type
  660. @association.klass.type_for_attribute(@association.klass.primary_key).type
  661. end
  662. end
  663. 1 class HasManyThroughProxy < ReflectionProxy # :nodoc:
  664. 1 def rhs_key
  665. @association.foreign_key
  666. end
  667. 1 def lhs_key
  668. @association.through_reflection.foreign_key
  669. end
  670. 1 def join_table
  671. @association.through_reflection.table_name
  672. end
  673. end
  674. 1 private
  675. 1 def primary_key_name
  676. @primary_key_name ||= model_class && model_class.primary_key
  677. end
  678. 1 def primary_key_type
  679. @primary_key_type ||= model_class && model_class.type_for_attribute(model_class.primary_key).type
  680. end
  681. 1 def add_join_records(rows, row, association)
  682. # This is the case when the join table has no fixtures file
  683. if (targets = row.delete(association.name.to_s))
  684. table_name = association.join_table
  685. column_type = association.primary_key_type
  686. lhs_key = association.lhs_key
  687. rhs_key = association.rhs_key
  688. targets = targets.is_a?(Array) ? targets : targets.split(/\s*,\s*/)
  689. rows[table_name].concat targets.map { |target|
  690. { lhs_key => row[primary_key_name],
  691. rhs_key => ActiveRecord::FixtureSet.identify(target, column_type) }
  692. }
  693. end
  694. end
  695. 1 def has_primary_key_column?
  696. @has_primary_key_column ||= primary_key_name &&
  697. model_class.columns.any? { |c| c.name == primary_key_name }
  698. end
  699. 1 def timestamp_column_names
  700. @timestamp_column_names ||=
  701. %w(created_at created_on updated_at updated_on) & column_names
  702. end
  703. 1 def inheritance_column_name
  704. @inheritance_column_name ||= model_class && model_class.inheritance_column
  705. end
  706. 1 def column_names
  707. @column_names ||= @connection.columns(@table_name).collect(&:name)
  708. end
  709. 1 def model_class=(class_name)
  710. if class_name.is_a?(Class) # TODO: Should be an AR::Base type class, or any?
  711. @model_class = class_name
  712. else
  713. @model_class = class_name.safe_constantize if class_name
  714. end
  715. end
  716. # Loads the fixtures from the YAML file at +path+.
  717. # If the file sets the +model_class+ and current instance value is not set,
  718. # it uses the file value.
  719. 1 def read_fixture_files(path)
  720. yaml_files = Dir["#{path}/{**,*}/*.yml"].select { |f|
  721. ::File.file?(f)
  722. } + [yaml_file_path(path)]
  723. yaml_files.each_with_object({}) do |file, fixtures|
  724. FixtureSet::File.open(file) do |fh|
  725. self.model_class ||= fh.model_class if fh.model_class
  726. fh.each do |fixture_name, row|
  727. fixtures[fixture_name] = ActiveRecord::Fixture.new(row, model_class)
  728. end
  729. end
  730. end
  731. end
  732. 1 def yaml_file_path(path)
  733. "#{path}.yml"
  734. end
  735. end
  736. 1 class Fixture #:nodoc:
  737. 1 include Enumerable
  738. 1 class FixtureError < StandardError #:nodoc:
  739. end
  740. 1 class FormatError < FixtureError #:nodoc:
  741. end
  742. 1 attr_reader :model_class, :fixture
  743. 1 def initialize(fixture, model_class)
  744. @fixture = fixture
  745. @model_class = model_class
  746. end
  747. 1 def class_name
  748. model_class.name if model_class
  749. end
  750. 1 def each
  751. fixture.each { |item| yield item }
  752. end
  753. 1 def [](key)
  754. fixture[key]
  755. end
  756. 1 alias :to_hash :fixture
  757. 1 def find
  758. if model_class
  759. model_class.unscoped do
  760. model_class.find(fixture[model_class.primary_key])
  761. end
  762. else
  763. raise FixtureClassNotFound, "No class attached to find."
  764. end
  765. end
  766. end
  767. end
  768. 1 module ActiveRecord
  769. 1 module TestFixtures
  770. 1 extend ActiveSupport::Concern
  771. 1 def before_setup # :nodoc:
  772. 7 setup_fixtures
  773. 7 super
  774. end
  775. 1 def after_teardown # :nodoc:
  776. 7 super
  777. 7 teardown_fixtures
  778. end
  779. 1 included do
  780. 1 class_attribute :fixture_path, instance_writer: false
  781. 1 class_attribute :fixture_table_names, default: []
  782. 1 class_attribute :fixture_class_names, default: {}
  783. 1 class_attribute :use_transactional_tests, default: true
  784. 1 class_attribute :use_instantiated_fixtures, default: false # true, false, or :no_instances
  785. 1 class_attribute :pre_loaded_fixtures, default: false
  786. 1 class_attribute :config, default: ActiveRecord::Base
  787. end
  788. 1 module ClassMethods
  789. # Sets the model class for a fixture when the class name cannot be inferred from the fixture name.
  790. #
  791. # Examples:
  792. #
  793. # set_fixture_class some_fixture: SomeModel,
  794. # 'namespaced/fixture' => Another::Model
  795. #
  796. # The keys must be the fixture names, that coincide with the short paths to the fixture files.
  797. 1 def set_fixture_class(class_names = {})
  798. self.fixture_class_names = fixture_class_names.merge(class_names.stringify_keys)
  799. end
  800. 1 def fixtures(*fixture_set_names)
  801. if fixture_set_names.first == :all
  802. fixture_set_names = Dir["#{fixture_path}/{**,*}/*.{yml}"].uniq
  803. fixture_set_names.map! { |f| f[(fixture_path.to_s.size + 1)..-5] }
  804. else
  805. fixture_set_names = fixture_set_names.flatten.map(&:to_s)
  806. end
  807. self.fixture_table_names |= fixture_set_names
  808. setup_fixture_accessors(fixture_set_names)
  809. end
  810. 1 def setup_fixture_accessors(fixture_set_names = nil)
  811. fixture_set_names = Array(fixture_set_names || fixture_table_names)
  812. methods = Module.new do
  813. fixture_set_names.each do |fs_name|
  814. fs_name = fs_name.to_s
  815. accessor_name = fs_name.tr("/", "_").to_sym
  816. define_method(accessor_name) do |*fixture_names|
  817. force_reload = fixture_names.pop if fixture_names.last == true || fixture_names.last == :reload
  818. return_single_record = fixture_names.size == 1
  819. fixture_names = @loaded_fixtures[fs_name].fixtures.keys if fixture_names.empty?
  820. @fixture_cache[fs_name] ||= {}
  821. instances = fixture_names.map do |f_name|
  822. f_name = f_name.to_s if f_name.is_a?(Symbol)
  823. @fixture_cache[fs_name].delete(f_name) if force_reload
  824. if @loaded_fixtures[fs_name][f_name]
  825. @fixture_cache[fs_name][f_name] ||= @loaded_fixtures[fs_name][f_name].find
  826. else
  827. raise StandardError, "No fixture named '#{f_name}' found for fixture set '#{fs_name}'"
  828. end
  829. end
  830. return_single_record ? instances.first : instances
  831. end
  832. private accessor_name
  833. end
  834. end
  835. include methods
  836. end
  837. 1 def uses_transaction(*methods)
  838. @uses_transaction = [] unless defined?(@uses_transaction)
  839. @uses_transaction.concat methods.map(&:to_s)
  840. end
  841. 1 def uses_transaction?(method)
  842. 14 @uses_transaction = [] unless defined?(@uses_transaction)
  843. 14 @uses_transaction.include?(method.to_s)
  844. end
  845. end
  846. 1 def run_in_transaction?
  847. 14 use_transactional_tests &&
  848. 13 !self.class.uses_transaction?(method_name)
  849. end
  850. 1 def setup_fixtures(config = ActiveRecord::Base)
  851. 7 if pre_loaded_fixtures && !use_transactional_tests
  852. raise RuntimeError, "pre_loaded_fixtures requires use_transactional_tests"
  853. end
  854. 7 @fixture_cache = {}
  855. 7 @fixture_connections = []
  856. 7 @@already_loaded_fixtures ||= {}
  857. 7 @connection_subscriber = nil
  858. # Load fixtures once and begin transaction.
  859. 7 if run_in_transaction?
  860. 7 if @@already_loaded_fixtures[self.class]
  861. 2 @loaded_fixtures = @@already_loaded_fixtures[self.class]
  862. else
  863. 5 @loaded_fixtures = load_fixtures(config)
  864. 5 @@already_loaded_fixtures[self.class] = @loaded_fixtures
  865. end
  866. # Begin transactions for connections already established
  867. 7 @fixture_connections = enlist_fixture_connections
  868. 7 @fixture_connections.each do |connection|
  869. 7 connection.begin_transaction joinable: false
  870. 7 connection.pool.lock_thread = true
  871. end
  872. # When connections are established in the future, begin a transaction too
  873. 7 @connection_subscriber = ActiveSupport::Notifications.subscribe("!connection.active_record") do |_, _, _, _, payload|
  874. spec_name = payload[:spec_name] if payload.key?(:spec_name)
  875. if spec_name
  876. begin
  877. connection = ActiveRecord::Base.connection_handler.retrieve_connection(spec_name)
  878. rescue ConnectionNotEstablished
  879. connection = nil
  880. end
  881. if connection && !@fixture_connections.include?(connection)
  882. connection.begin_transaction joinable: false
  883. connection.pool.lock_thread = true
  884. @fixture_connections << connection
  885. end
  886. end
  887. end
  888. # Load fixtures for every test.
  889. else
  890. ActiveRecord::FixtureSet.reset_cache
  891. @@already_loaded_fixtures[self.class] = nil
  892. @loaded_fixtures = load_fixtures(config)
  893. end
  894. # Instantiate fixtures for every test if requested.
  895. 7 instantiate_fixtures if use_instantiated_fixtures
  896. end
  897. 1 def teardown_fixtures
  898. # Rollback changes if a transaction is active.
  899. 7 if run_in_transaction?
  900. 7 ActiveSupport::Notifications.unsubscribe(@connection_subscriber) if @connection_subscriber
  901. 7 @fixture_connections.each do |connection|
  902. 7 connection.rollback_transaction if connection.transaction_open?
  903. 7 connection.pool.lock_thread = false
  904. end
  905. 7 @fixture_connections.clear
  906. else
  907. ActiveRecord::FixtureSet.reset_cache
  908. end
  909. 7 ActiveRecord::Base.clear_active_connections!
  910. end
  911. 1 def enlist_fixture_connections
  912. 7 ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection)
  913. end
  914. 1 private
  915. 1 def load_fixtures(config)
  916. 5 fixtures = ActiveRecord::FixtureSet.create_fixtures(fixture_path, fixture_table_names, fixture_class_names, config)
  917. 5 Hash[fixtures.map { |f| [f.name, f] }]
  918. end
  919. 1 def instantiate_fixtures
  920. if pre_loaded_fixtures
  921. raise RuntimeError, "Load fixtures before instantiating them." if ActiveRecord::FixtureSet.all_loaded_fixtures.empty?
  922. ActiveRecord::FixtureSet.instantiate_all_loaded_fixtures(self, load_instances?)
  923. else
  924. raise RuntimeError, "Load fixtures before instantiating them." if @loaded_fixtures.nil?
  925. @loaded_fixtures.each_value do |fixture_set|
  926. ActiveRecord::FixtureSet.instantiate_fixtures(self, fixture_set, load_instances?)
  927. end
  928. end
  929. end
  930. 1 def load_instances?
  931. use_instantiated_fixtures != :no_instances
  932. end
  933. end
  934. end
  935. 1 class ActiveRecord::FixtureSet::RenderContext # :nodoc:
  936. 1 def self.create_subclass
  937. Class.new ActiveRecord::FixtureSet.context_class do
  938. def get_binding
  939. binding()
  940. end
  941. def binary(path)
  942. %(!!binary "#{Base64.strict_encode64(File.read(path))}")
  943. end
  944. end
  945. end
  946. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/legacy_yaml_adapter.rb

34.78% lines covered

23 relevant lines. 8 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module LegacyYamlAdapter
  4. 1 def self.convert(klass, coder)
  5. 10 return coder unless coder.is_a?(Psych::Coder)
  6. case coder["active_record_yaml_version"]
  7. when 1, 2 then coder
  8. else
  9. if coder["attributes"].is_a?(ActiveModel::AttributeSet)
  10. Rails420.convert(klass, coder)
  11. else
  12. Rails41.convert(klass, coder)
  13. end
  14. end
  15. end
  16. 1 module Rails420
  17. 1 def self.convert(klass, coder)
  18. attribute_set = coder["attributes"]
  19. klass.attribute_names.each do |attr_name|
  20. attribute = attribute_set[attr_name]
  21. if attribute.type.is_a?(Delegator)
  22. type_from_klass = klass.type_for_attribute(attr_name)
  23. attribute_set[attr_name] = attribute.with_type(type_from_klass)
  24. end
  25. end
  26. coder
  27. end
  28. end
  29. 1 module Rails41
  30. 1 def self.convert(klass, coder)
  31. attributes = klass.attributes_builder
  32. .build_from_database(coder["attributes"])
  33. new_record = coder["attributes"][klass.primary_key].blank?
  34. {
  35. "attributes" => attributes,
  36. "new_record" => new_record,
  37. }
  38. end
  39. end
  40. end
  41. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/null_relation.rb

51.52% lines covered

33 relevant lines. 17 lines covered and 16 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module NullRelation # :nodoc:
  4. 1 def pluck(*column_names)
  5. []
  6. end
  7. 1 def delete_all
  8. 0
  9. end
  10. 1 def update_all(_updates)
  11. 0
  12. end
  13. 1 def delete(_id_or_array)
  14. 0
  15. end
  16. 1 def empty?
  17. true
  18. end
  19. 1 def none?
  20. true
  21. end
  22. 1 def any?
  23. false
  24. end
  25. 1 def one?
  26. false
  27. end
  28. 1 def many?
  29. false
  30. end
  31. 1 def to_sql
  32. ""
  33. end
  34. 1 def calculate(operation, _column_name)
  35. case operation
  36. when :count, :sum
  37. group_values.any? ? Hash.new : 0
  38. when :average, :minimum, :maximum
  39. group_values.any? ? Hash.new : nil
  40. end
  41. end
  42. 1 def exists?(_conditions = :none)
  43. false
  44. end
  45. 1 def or(other)
  46. other.spawn
  47. end
  48. 1 private
  49. 1 def exec_queries
  50. @records = [].freeze
  51. end
  52. end
  53. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/railties/controller_runtime.rb

96.67% lines covered

30 relevant lines. 29 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/attr_internal"
  3. 1 require "active_record/log_subscriber"
  4. 1 module ActiveRecord
  5. 1 module Railties # :nodoc:
  6. 1 module ControllerRuntime #:nodoc:
  7. 1 extend ActiveSupport::Concern
  8. # TODO Change this to private once we've dropped Ruby 2.2 support.
  9. # Workaround for Ruby 2.2 "private attribute?" warning.
  10. 1 protected
  11. 1 attr_internal :db_runtime
  12. 1 private
  13. 1 def process_action(action, *args)
  14. # We also need to reset the runtime before each action
  15. # because of queries in middleware or in cases we are streaming
  16. # and it won't be cleaned up by the method below.
  17. 3 ActiveRecord::LogSubscriber.reset_runtime
  18. 3 super
  19. end
  20. 1 def cleanup_view_runtime
  21. 1 if logger && logger.info? && ActiveRecord::Base.connected?
  22. 1 db_rt_before_render = ActiveRecord::LogSubscriber.reset_runtime
  23. 1 self.db_runtime = (db_runtime || 0) + db_rt_before_render
  24. 1 runtime = super
  25. 1 db_rt_after_render = ActiveRecord::LogSubscriber.reset_runtime
  26. 1 self.db_runtime += db_rt_after_render
  27. 1 runtime - db_rt_after_render
  28. else
  29. super
  30. end
  31. end
  32. 1 def append_info_to_payload(payload)
  33. 3 super
  34. 3 if ActiveRecord::Base.connected?
  35. 3 payload[:db_runtime] = (db_runtime || 0) + ActiveRecord::LogSubscriber.reset_runtime
  36. end
  37. end
  38. 1 module ClassMethods # :nodoc:
  39. 1 def log_process_action(payload)
  40. 3 messages, db_runtime = super, payload[:db_runtime]
  41. 3 messages << ("ActiveRecord: %.1fms" % db_runtime.to_f) if db_runtime
  42. 3 messages
  43. end
  44. end
  45. end
  46. end
  47. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation.rb

48.25% lines covered

228 relevant lines. 110 lines covered and 118 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. # = Active Record \Relation
  4. 1 class Relation
  5. 1 MULTI_VALUE_METHODS = [:includes, :eager_load, :preload, :select, :group,
  6. :order, :joins, :left_outer_joins, :references,
  7. :extending, :unscope]
  8. 1 SINGLE_VALUE_METHODS = [:limit, :offset, :lock, :readonly, :reordering,
  9. :reverse_order, :distinct, :create_with, :skip_query_cache]
  10. 1 CLAUSE_METHODS = [:where, :having, :from]
  11. 1 INVALID_METHODS_FOR_DELETE_ALL = [:distinct, :group, :having]
  12. 1 VALUE_METHODS = MULTI_VALUE_METHODS + SINGLE_VALUE_METHODS + CLAUSE_METHODS
  13. 1 include Enumerable
  14. 1 include FinderMethods, Calculations, SpawnMethods, QueryMethods, Batches, Explain, Delegation
  15. 1 attr_reader :table, :klass, :loaded, :predicate_builder
  16. 1 alias :model :klass
  17. 1 alias :loaded? :loaded
  18. 1 alias :locked? :lock_value
  19. 14 def initialize(klass, table: klass.arel_table, predicate_builder: klass.predicate_builder, values: {})
  20. 13 @klass = klass
  21. 13 @table = table
  22. 13 @values = values
  23. 13 @offsets = {}
  24. 13 @loaded = false
  25. 13 @predicate_builder = predicate_builder
  26. 13 @delegate_to_klass = false
  27. end
  28. 1 def initialize_copy(other)
  29. 19 @values = @values.dup
  30. 19 reset
  31. end
  32. 1 def arel_attribute(name) # :nodoc:
  33. 5 klass.arel_attribute(name, table)
  34. end
  35. # Initializes new record from relation while maintaining the current
  36. # scope.
  37. #
  38. # Expects arguments in the same format as {ActiveRecord::Base.new}[rdoc-ref:Core.new].
  39. #
  40. # users = User.where(name: 'DHH')
  41. # user = users.new # => #<User id: nil, name: "DHH", created_at: nil, updated_at: nil>
  42. #
  43. # You can also pass a block to new with the new record as argument:
  44. #
  45. # user = users.new { |user| user.name = 'Oscar' }
  46. # user.name # => Oscar
  47. 1 def new(attributes = nil, &block)
  48. scoping { klass.new(values_for_create(attributes), &block) }
  49. end
  50. 1 alias build new
  51. # Tries to create a new record with the same scoped attributes
  52. # defined in the relation. Returns the initialized object if validation fails.
  53. #
  54. # Expects arguments in the same format as
  55. # {ActiveRecord::Base.create}[rdoc-ref:Persistence::ClassMethods#create].
  56. #
  57. # ==== Examples
  58. #
  59. # users = User.where(name: 'Oscar')
  60. # users.create # => #<User id: 3, name: "Oscar", ...>
  61. #
  62. # users.create(name: 'fxn')
  63. # users.create # => #<User id: 4, name: "fxn", ...>
  64. #
  65. # users.create { |user| user.name = 'tenderlove' }
  66. # # => #<User id: 5, name: "tenderlove", ...>
  67. #
  68. # users.create(name: nil) # validation on name
  69. # # => #<User id: nil, name: nil, ...>
  70. 1 def create(attributes = nil, &block)
  71. if attributes.is_a?(Array)
  72. attributes.collect { |attr| create(attr, &block) }
  73. else
  74. scoping { klass.create(values_for_create(attributes), &block) }
  75. end
  76. end
  77. # Similar to #create, but calls
  78. # {create!}[rdoc-ref:Persistence::ClassMethods#create!]
  79. # on the base class. Raises an exception if a validation error occurs.
  80. #
  81. # Expects arguments in the same format as
  82. # {ActiveRecord::Base.create!}[rdoc-ref:Persistence::ClassMethods#create!].
  83. 1 def create!(attributes = nil, &block)
  84. if attributes.is_a?(Array)
  85. attributes.collect { |attr| create!(attr, &block) }
  86. else
  87. scoping { klass.create!(values_for_create(attributes), &block) }
  88. end
  89. end
  90. 1 def first_or_create(attributes = nil, &block) # :nodoc:
  91. first || create(attributes, &block)
  92. end
  93. 1 def first_or_create!(attributes = nil, &block) # :nodoc:
  94. first || create!(attributes, &block)
  95. end
  96. 1 def first_or_initialize(attributes = nil, &block) # :nodoc:
  97. first || new(attributes, &block)
  98. end
  99. # Finds the first record with the given attributes, or creates a record
  100. # with the attributes if one is not found:
  101. #
  102. # # Find the first user named "Pen��lope" or create a new one.
  103. # User.find_or_create_by(first_name: 'Pen��lope')
  104. # # => #<User id: 1, first_name: "Pen��lope", last_name: nil>
  105. #
  106. # # Find the first user named "Pen��lope" or create a new one.
  107. # # We already have one so the existing record will be returned.
  108. # User.find_or_create_by(first_name: 'Pen��lope')
  109. # # => #<User id: 1, first_name: "Pen��lope", last_name: nil>
  110. #
  111. # # Find the first user named "Scarlett" or create a new one with
  112. # # a particular last name.
  113. # User.create_with(last_name: 'Johansson').find_or_create_by(first_name: 'Scarlett')
  114. # # => #<User id: 2, first_name: "Scarlett", last_name: "Johansson">
  115. #
  116. # This method accepts a block, which is passed down to #create. The last example
  117. # above can be alternatively written this way:
  118. #
  119. # # Find the first user named "Scarlett" or create a new one with a
  120. # # different last name.
  121. # User.find_or_create_by(first_name: 'Scarlett') do |user|
  122. # user.last_name = 'Johansson'
  123. # end
  124. # # => #<User id: 2, first_name: "Scarlett", last_name: "Johansson">
  125. #
  126. # This method always returns a record, but if creation was attempted and
  127. # failed due to validation errors it won't be persisted, you get what
  128. # #create returns in such situation.
  129. #
  130. # Please note *this method is not atomic*, it runs first a SELECT, and if
  131. # there are no results an INSERT is attempted. If there are other threads
  132. # or processes there is a race condition between both calls and it could
  133. # be the case that you end up with two similar records.
  134. #
  135. # Whether that is a problem or not depends on the logic of the
  136. # application, but in the particular case in which rows have a UNIQUE
  137. # constraint an exception may be raised, just retry:
  138. #
  139. # begin
  140. # CreditAccount.transaction(requires_new: true) do
  141. # CreditAccount.find_or_create_by(user_id: user.id)
  142. # end
  143. # rescue ActiveRecord::RecordNotUnique
  144. # retry
  145. # end
  146. #
  147. 1 def find_or_create_by(attributes, &block)
  148. find_by(attributes) || create(attributes, &block)
  149. end
  150. # Like #find_or_create_by, but calls
  151. # {create!}[rdoc-ref:Persistence::ClassMethods#create!] so an exception
  152. # is raised if the created record is invalid.
  153. 1 def find_or_create_by!(attributes, &block)
  154. find_by(attributes) || create!(attributes, &block)
  155. end
  156. # Like #find_or_create_by, but calls {new}[rdoc-ref:Core#new]
  157. # instead of {create}[rdoc-ref:Persistence::ClassMethods#create].
  158. 1 def find_or_initialize_by(attributes, &block)
  159. find_by(attributes) || new(attributes, &block)
  160. end
  161. # Runs EXPLAIN on the query or queries triggered by this relation and
  162. # returns the result as a string. The string is formatted imitating the
  163. # ones printed by the database shell.
  164. #
  165. # Note that this method actually runs the queries, since the results of some
  166. # are needed by the next ones when eager loading is going on.
  167. #
  168. # Please see further details in the
  169. # {Active Record Query Interface guide}[http://guides.rubyonrails.org/active_record_querying.html#running-explain].
  170. 1 def explain
  171. exec_explain(collecting_queries_for_explain { exec_queries })
  172. end
  173. # Converts relation objects to Array.
  174. 1 def to_ary
  175. 3 records.dup
  176. end
  177. 1 alias to_a to_ary
  178. 1 def records # :nodoc:
  179. 4 load
  180. 4 @records
  181. end
  182. # Serializes the relation objects Array.
  183. 1 def encode_with(coder)
  184. coder.represent_seq(nil, records)
  185. end
  186. # Returns size of the records.
  187. 1 def size
  188. loaded? ? @records.length : count(:all)
  189. end
  190. # Returns true if there are no records.
  191. 1 def empty?
  192. return @records.empty? if loaded?
  193. !exists?
  194. end
  195. # Returns true if there are no records.
  196. 1 def none?
  197. return super if block_given?
  198. empty?
  199. end
  200. # Returns true if there are any records.
  201. 1 def any?
  202. return super if block_given?
  203. !empty?
  204. end
  205. # Returns true if there is exactly one record.
  206. 1 def one?
  207. return super if block_given?
  208. limit_value ? records.one? : size == 1
  209. end
  210. # Returns true if there is more than one record.
  211. 1 def many?
  212. return super if block_given?
  213. limit_value ? records.many? : size > 1
  214. end
  215. # Returns a cache key that can be used to identify the records fetched by
  216. # this query. The cache key is built with a fingerprint of the sql query,
  217. # the number of records matched by the query and a timestamp of the last
  218. # updated record. When a new record comes to match the query, or any of
  219. # the existing records is updated or deleted, the cache key changes.
  220. #
  221. # Product.where("name like ?", "%Cosmic Encounter%").cache_key
  222. # # => "products/query-1850ab3d302391b85b8693e941286659-1-20150714212553907087000"
  223. #
  224. # If the collection is loaded, the method will iterate through the records
  225. # to generate the timestamp, otherwise it will trigger one SQL query like:
  226. #
  227. # SELECT COUNT(*), MAX("products"."updated_at") FROM "products" WHERE (name like '%Cosmic Encounter%')
  228. #
  229. # You can also pass a custom timestamp column to fetch the timestamp of the
  230. # last updated record.
  231. #
  232. # Product.where("name like ?", "%Game%").cache_key(:last_reviewed_at)
  233. #
  234. # You can customize the strategy to generate the key on a per model basis
  235. # overriding ActiveRecord::Base#collection_cache_key.
  236. 1 def cache_key(timestamp_column = :updated_at)
  237. @cache_keys ||= {}
  238. @cache_keys[timestamp_column] ||= @klass.collection_cache_key(self, timestamp_column)
  239. end
  240. # Scope all queries to the current scope.
  241. #
  242. # Comment.where(post_id: 1).scoping do
  243. # Comment.first
  244. # end
  245. # # => SELECT "comments".* FROM "comments" WHERE "comments"."post_id" = 1 ORDER BY "comments"."id" ASC LIMIT 1
  246. #
  247. # Please check unscoped if you want to remove all previous scopes (including
  248. # the default_scope) during the execution of a block.
  249. 1 def scoping
  250. 1 previous, klass.current_scope = klass.current_scope(true), self unless @delegate_to_klass
  251. 1 yield
  252. ensure
  253. 1 klass.current_scope = previous unless @delegate_to_klass
  254. end
  255. 1 def _exec_scope(*args, &block) # :nodoc:
  256. @delegate_to_klass = true
  257. instance_exec(*args, &block) || self
  258. ensure
  259. @delegate_to_klass = false
  260. end
  261. # Updates all records in the current relation with details given. This method constructs a single SQL UPDATE
  262. # statement and sends it straight to the database. It does not instantiate the involved models and it does not
  263. # trigger Active Record callbacks or validations. However, values passed to #update_all will still go through
  264. # Active Record's normal type casting and serialization.
  265. #
  266. # ==== Parameters
  267. #
  268. # * +updates+ - A string, array, or hash representing the SET part of an SQL statement.
  269. #
  270. # ==== Examples
  271. #
  272. # # Update all customers with the given attributes
  273. # Customer.update_all wants_email: true
  274. #
  275. # # Update all books with 'Rails' in their title
  276. # Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
  277. #
  278. # # Update all books that match conditions, but limit it to 5 ordered by date
  279. # Book.where('title LIKE ?', '%Rails%').order(:created_at).limit(5).update_all(author: 'David')
  280. #
  281. # # Update all invoices and set the number column to its id value.
  282. # Invoice.update_all('number = id')
  283. 1 def update_all(updates)
  284. raise ArgumentError, "Empty list of attributes to change" if updates.blank?
  285. if eager_loading?
  286. relation = apply_join_dependency
  287. return relation.update_all(updates)
  288. end
  289. stmt = Arel::UpdateManager.new
  290. stmt.set Arel.sql(@klass.sanitize_sql_for_assignment(updates))
  291. stmt.table(table)
  292. if has_join_values? || offset_value
  293. @klass.connection.join_to_update(stmt, arel, arel_attribute(primary_key))
  294. else
  295. stmt.key = arel_attribute(primary_key)
  296. stmt.take(arel.limit)
  297. stmt.order(*arel.orders)
  298. stmt.wheres = arel.constraints
  299. end
  300. @klass.connection.update stmt, "#{@klass} Update All"
  301. end
  302. 1 def update(id = :all, attributes) # :nodoc:
  303. if id == :all
  304. each { |record| record.update(attributes) }
  305. else
  306. klass.update(id, attributes)
  307. end
  308. end
  309. # Destroys the records by instantiating each
  310. # record and calling its {#destroy}[rdoc-ref:Persistence#destroy] method.
  311. # Each object's callbacks are executed (including <tt>:dependent</tt> association options).
  312. # Returns the collection of objects that were destroyed; each will be frozen, to
  313. # reflect that no changes should be made (since they can't be persisted).
  314. #
  315. # Note: Instantiation, callback execution, and deletion of each
  316. # record can be time consuming when you're removing many records at
  317. # once. It generates at least one SQL +DELETE+ query per record (or
  318. # possibly more, to enforce your callbacks). If you want to delete many
  319. # rows quickly, without concern for their associations or callbacks, use
  320. # #delete_all instead.
  321. #
  322. # ==== Examples
  323. #
  324. # Person.where(age: 0..18).destroy_all
  325. 1 def destroy_all
  326. records.each(&:destroy).tap { reset }
  327. end
  328. # Deletes the records without instantiating the records
  329. # first, and hence not calling the {#destroy}[rdoc-ref:Persistence#destroy]
  330. # method nor invoking callbacks.
  331. # This is a single SQL DELETE statement that goes straight to the database, much more
  332. # efficient than #destroy_all. Be careful with relations though, in particular
  333. # <tt>:dependent</tt> rules defined on associations are not honored. Returns the
  334. # number of rows affected.
  335. #
  336. # Post.where(person_id: 5).where(category: ['Something', 'Else']).delete_all
  337. #
  338. # Both calls delete the affected posts all at once with a single DELETE statement.
  339. # If you need to destroy dependent associations or call your <tt>before_*</tt> or
  340. # +after_destroy+ callbacks, use the #destroy_all method instead.
  341. #
  342. # If an invalid method is supplied, #delete_all raises an ActiveRecordError:
  343. #
  344. # Post.distinct.delete_all
  345. # # => ActiveRecord::ActiveRecordError: delete_all doesn't support distinct
  346. 1 def delete_all
  347. invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select do |method|
  348. value = get_value(method)
  349. SINGLE_VALUE_METHODS.include?(method) ? value : value.any?
  350. end
  351. if invalid_methods.any?
  352. raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
  353. end
  354. if eager_loading?
  355. relation = apply_join_dependency
  356. return relation.delete_all
  357. end
  358. stmt = Arel::DeleteManager.new
  359. stmt.from(table)
  360. if has_join_values? || has_limit_or_offset?
  361. @klass.connection.join_to_delete(stmt, arel, arel_attribute(primary_key))
  362. else
  363. stmt.wheres = arel.constraints
  364. end
  365. affected = @klass.connection.delete(stmt, "#{@klass} Destroy")
  366. reset
  367. affected
  368. end
  369. # Causes the records to be loaded from the database if they have not
  370. # been loaded already. You can use this if for some reason you need
  371. # to explicitly load some records before actually using them. The
  372. # return value is the relation itself, not the records.
  373. #
  374. # Post.where(published: true).load # => #<ActiveRecord::Relation>
  375. 1 def load(&block)
  376. 4 exec_queries(&block) unless loaded?
  377. 4 self
  378. end
  379. # Forces reloading of relation.
  380. 1 def reload
  381. reset
  382. load
  383. end
  384. 1 def reset
  385. 19 @delegate_to_klass = false
  386. 19 @to_sql = @arel = @loaded = @should_eager_load = nil
  387. 19 @records = [].freeze
  388. 19 @offsets = {}
  389. 19 self
  390. end
  391. # Returns sql statement for the relation.
  392. #
  393. # User.where(name: 'Oscar').to_sql
  394. # # => SELECT "users".* FROM "users" WHERE "users"."name" = 'Oscar'
  395. 1 def to_sql
  396. @to_sql ||= begin
  397. if eager_loading?
  398. apply_join_dependency do |relation, join_dependency|
  399. relation = join_dependency.apply_column_aliases(relation)
  400. relation.to_sql
  401. end
  402. else
  403. conn = klass.connection
  404. conn.unprepared_statement { conn.to_sql(arel) }
  405. end
  406. end
  407. end
  408. # Returns a hash of where conditions.
  409. #
  410. # User.where(name: 'Oscar').where_values_hash
  411. # # => {name: "Oscar"}
  412. 1 def where_values_hash(relation_table_name = klass.table_name)
  413. where_clause.to_h(relation_table_name)
  414. end
  415. 1 def scope_for_create
  416. where_values_hash.merge!(create_with_value.stringify_keys)
  417. end
  418. # Returns true if relation needs eager loading.
  419. 1 def eager_loading?
  420. 14 @should_eager_load ||=
  421. 13 eager_load_values.any? ||
  422. 14 includes_values.any? && (joined_includes_values.any? || references_eager_loaded_tables?)
  423. end
  424. # Joins that are also marked for preloading. In which case we should just eager load them.
  425. # Note that this is a naive implementation because we could have strings and symbols which
  426. # represent the same association, but that aren't matched by this. Also, we could have
  427. # nested hashes which partially match, e.g. { a: :b } & { a: [:b, :c] }
  428. 1 def joined_includes_values
  429. includes_values & joins_values
  430. end
  431. # Compares two relations for equality.
  432. 1 def ==(other)
  433. case other
  434. when Associations::CollectionProxy, AssociationRelation
  435. self == other.records
  436. when Relation
  437. other.to_sql == to_sql
  438. when Array
  439. records == other
  440. end
  441. end
  442. 1 def pretty_print(q)
  443. q.pp(records)
  444. end
  445. # Returns true if relation is blank.
  446. 1 def blank?
  447. records.blank?
  448. end
  449. 1 def values
  450. 1 @values.dup
  451. end
  452. 1 def inspect
  453. subject = loaded? ? records : self
  454. entries = subject.take([limit_value, 11].compact.min).map!(&:inspect)
  455. entries[10] = "..." if entries.size == 11
  456. "#<#{self.class.name} [#{entries.join(', ')}]>"
  457. end
  458. 1 def empty_scope? # :nodoc:
  459. @values == klass.unscoped.values
  460. end
  461. 1 def has_limit_or_offset? # :nodoc:
  462. 7 limit_value || offset_value
  463. end
  464. 1 def alias_tracker(joins = [], aliases = nil) # :nodoc:
  465. joins += [aliases] if aliases
  466. ActiveRecord::Associations::AliasTracker.create(connection, table.name, joins)
  467. end
  468. 1 protected
  469. 1 def load_records(records)
  470. @records = records.freeze
  471. @loaded = true
  472. end
  473. 1 private
  474. 1 def has_join_values?
  475. joins_values.any? || left_outer_joins_values.any?
  476. end
  477. 1 def exec_queries(&block)
  478. 4 skip_query_cache_if_necessary do
  479. @records =
  480. 3 if eager_loading?
  481. apply_join_dependency do |relation, join_dependency|
  482. if ActiveRecord::NullRelation === relation
  483. []
  484. else
  485. relation = join_dependency.apply_column_aliases(relation)
  486. rows = connection.select_all(relation.arel, "SQL")
  487. join_dependency.instantiate(rows, &block)
  488. end.freeze
  489. end
  490. else
  491. 4 klass.find_by_sql(arel, &block).freeze
  492. end
  493. 4 preload = preload_values
  494. 4 preload += includes_values unless eager_loading?
  495. 4 preloader = nil
  496. 4 preload.each do |associations|
  497. preloader ||= build_preloader
  498. preloader.preload @records, associations
  499. end
  500. 4 @records.each(&:readonly!) if readonly_value
  501. 4 @loaded = true
  502. 4 @records
  503. end
  504. end
  505. 1 def skip_query_cache_if_necessary
  506. 10 if skip_query_cache_value
  507. uncached do
  508. yield
  509. end
  510. else
  511. 10 yield
  512. end
  513. end
  514. 1 def build_preloader
  515. ActiveRecord::Associations::Preloader.new
  516. end
  517. 1 def references_eager_loaded_tables?
  518. joined_tables = arel.join_sources.map do |join|
  519. if join.is_a?(Arel::Nodes::StringJoin)
  520. tables_in_string(join.left)
  521. else
  522. [join.left.table_name, join.left.table_alias]
  523. end
  524. end
  525. joined_tables += [table.name, table.table_alias]
  526. # always convert table names to downcase as in Oracle quoted table names are in uppercase
  527. joined_tables = joined_tables.flatten.compact.map(&:downcase).uniq
  528. (references_values - joined_tables).any?
  529. end
  530. 1 def tables_in_string(string)
  531. return [] if string.blank?
  532. # always convert table names to downcase as in Oracle quoted table names are in uppercase
  533. # ignore raw_sql_ that is used by Oracle adapter as alias for limit/offset subqueries
  534. string.scan(/([a-zA-Z_][.\w]+).?\./).flatten.map(&:downcase).uniq - ["raw_sql_"]
  535. end
  536. 1 def values_for_create(attributes = nil)
  537. result = attributes ? where_values_hash.merge!(attributes) : where_values_hash
  538. # NOTE: if there are same keys in both create_with and result, create_with should be used.
  539. # This is to make sure nested attributes don't get passed to the klass.new,
  540. # while keeping the precedence of the duplicate keys in create_with.
  541. create_with_value.stringify_keys.each do |k, v|
  542. result[k] = v if result.key?(k)
  543. end
  544. result
  545. end
  546. end
  547. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches.rb

15.94% lines covered

69 relevant lines. 11 lines covered and 58 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_record/relation/batches/batch_enumerator"
  3. 1 module ActiveRecord
  4. 1 module Batches
  5. 1 ORDER_IGNORE_MESSAGE = "Scoped order is ignored, it's forced to be batch order."
  6. # Looping through a collection of records from the database
  7. # (using the Scoping::Named::ClassMethods.all method, for example)
  8. # is very inefficient since it will try to instantiate all the objects at once.
  9. #
  10. # In that case, batch processing methods allow you to work
  11. # with the records in batches, thereby greatly reducing memory consumption.
  12. #
  13. # The #find_each method uses #find_in_batches with a batch size of 1000 (or as
  14. # specified by the +:batch_size+ option).
  15. #
  16. # Person.find_each do |person|
  17. # person.do_awesome_stuff
  18. # end
  19. #
  20. # Person.where("age > 21").find_each do |person|
  21. # person.party_all_night!
  22. # end
  23. #
  24. # If you do not provide a block to #find_each, it will return an Enumerator
  25. # for chaining with other methods:
  26. #
  27. # Person.find_each.with_index do |person, index|
  28. # person.award_trophy(index + 1)
  29. # end
  30. #
  31. # ==== Options
  32. # * <tt>:batch_size</tt> - Specifies the size of the batch. Defaults to 1000.
  33. # * <tt>:start</tt> - Specifies the primary key value to start from, inclusive of the value.
  34. # * <tt>:finish</tt> - Specifies the primary key value to end at, inclusive of the value.
  35. # * <tt>:error_on_ignore</tt> - Overrides the application config to specify if an error should be raised when
  36. # an order is present in the relation.
  37. #
  38. # Limits are honored, and if present there is no requirement for the batch
  39. # size: it can be less than, equal to, or greater than the limit.
  40. #
  41. # The options +start+ and +finish+ are especially useful if you want
  42. # multiple workers dealing with the same processing queue. You can make
  43. # worker 1 handle all the records between id 1 and 9999 and worker 2
  44. # handle from 10000 and beyond by setting the +:start+ and +:finish+
  45. # option on each worker.
  46. #
  47. # # In worker 1, let's process until 9999 records.
  48. # Person.find_each(finish: 9_999) do |person|
  49. # person.party_all_night!
  50. # end
  51. #
  52. # # In worker 2, let's process from record 10_000 and onwards.
  53. # Person.find_each(start: 10_000) do |person|
  54. # person.party_all_night!
  55. # end
  56. #
  57. # NOTE: It's not possible to set the order. That is automatically set to
  58. # ascending on the primary key ("id ASC") to make the batch ordering
  59. # work. This also means that this method only works when the primary key is
  60. # orderable (e.g. an integer or string).
  61. #
  62. # NOTE: By its nature, batch processing is subject to race conditions if
  63. # other processes are modifying the database.
  64. 1 def find_each(start: nil, finish: nil, batch_size: 1000, error_on_ignore: nil)
  65. if block_given?
  66. find_in_batches(start: start, finish: finish, batch_size: batch_size, error_on_ignore: error_on_ignore) do |records|
  67. records.each { |record| yield record }
  68. end
  69. else
  70. enum_for(:find_each, start: start, finish: finish, batch_size: batch_size, error_on_ignore: error_on_ignore) do
  71. relation = self
  72. apply_limits(relation, start, finish).size
  73. end
  74. end
  75. end
  76. # Yields each batch of records that was found by the find options as
  77. # an array.
  78. #
  79. # Person.where("age > 21").find_in_batches do |group|
  80. # sleep(50) # Make sure it doesn't get too crowded in there!
  81. # group.each { |person| person.party_all_night! }
  82. # end
  83. #
  84. # If you do not provide a block to #find_in_batches, it will return an Enumerator
  85. # for chaining with other methods:
  86. #
  87. # Person.find_in_batches.with_index do |group, batch|
  88. # puts "Processing group ##{batch}"
  89. # group.each(&:recover_from_last_night!)
  90. # end
  91. #
  92. # To be yielded each record one by one, use #find_each instead.
  93. #
  94. # ==== Options
  95. # * <tt>:batch_size</tt> - Specifies the size of the batch. Defaults to 1000.
  96. # * <tt>:start</tt> - Specifies the primary key value to start from, inclusive of the value.
  97. # * <tt>:finish</tt> - Specifies the primary key value to end at, inclusive of the value.
  98. # * <tt>:error_on_ignore</tt> - Overrides the application config to specify if an error should be raised when
  99. # an order is present in the relation.
  100. #
  101. # Limits are honored, and if present there is no requirement for the batch
  102. # size: it can be less than, equal to, or greater than the limit.
  103. #
  104. # The options +start+ and +finish+ are especially useful if you want
  105. # multiple workers dealing with the same processing queue. You can make
  106. # worker 1 handle all the records between id 1 and 9999 and worker 2
  107. # handle from 10000 and beyond by setting the +:start+ and +:finish+
  108. # option on each worker.
  109. #
  110. # # Let's process from record 10_000 on.
  111. # Person.find_in_batches(start: 10_000) do |group|
  112. # group.each { |person| person.party_all_night! }
  113. # end
  114. #
  115. # NOTE: It's not possible to set the order. That is automatically set to
  116. # ascending on the primary key ("id ASC") to make the batch ordering
  117. # work. This also means that this method only works when the primary key is
  118. # orderable (e.g. an integer or string).
  119. #
  120. # NOTE: By its nature, batch processing is subject to race conditions if
  121. # other processes are modifying the database.
  122. 1 def find_in_batches(start: nil, finish: nil, batch_size: 1000, error_on_ignore: nil)
  123. relation = self
  124. unless block_given?
  125. return to_enum(:find_in_batches, start: start, finish: finish, batch_size: batch_size, error_on_ignore: error_on_ignore) do
  126. total = apply_limits(relation, start, finish).size
  127. (total - 1).div(batch_size) + 1
  128. end
  129. end
  130. in_batches(of: batch_size, start: start, finish: finish, load: true, error_on_ignore: error_on_ignore) do |batch|
  131. yield batch.to_a
  132. end
  133. end
  134. # Yields ActiveRecord::Relation objects to work with a batch of records.
  135. #
  136. # Person.where("age > 21").in_batches do |relation|
  137. # relation.delete_all
  138. # sleep(10) # Throttle the delete queries
  139. # end
  140. #
  141. # If you do not provide a block to #in_batches, it will return a
  142. # BatchEnumerator which is enumerable.
  143. #
  144. # Person.in_batches.each_with_index do |relation, batch_index|
  145. # puts "Processing relation ##{batch_index}"
  146. # relation.delete_all
  147. # end
  148. #
  149. # Examples of calling methods on the returned BatchEnumerator object:
  150. #
  151. # Person.in_batches.delete_all
  152. # Person.in_batches.update_all(awesome: true)
  153. # Person.in_batches.each_record(&:party_all_night!)
  154. #
  155. # ==== Options
  156. # * <tt>:of</tt> - Specifies the size of the batch. Defaults to 1000.
  157. # * <tt>:load</tt> - Specifies if the relation should be loaded. Defaults to false.
  158. # * <tt>:start</tt> - Specifies the primary key value to start from, inclusive of the value.
  159. # * <tt>:finish</tt> - Specifies the primary key value to end at, inclusive of the value.
  160. # * <tt>:error_on_ignore</tt> - Overrides the application config to specify if an error should be raised when
  161. # an order is present in the relation.
  162. #
  163. # Limits are honored, and if present there is no requirement for the batch
  164. # size, it can be less than, equal, or greater than the limit.
  165. #
  166. # The options +start+ and +finish+ are especially useful if you want
  167. # multiple workers dealing with the same processing queue. You can make
  168. # worker 1 handle all the records between id 1 and 9999 and worker 2
  169. # handle from 10000 and beyond by setting the +:start+ and +:finish+
  170. # option on each worker.
  171. #
  172. # # Let's process from record 10_000 on.
  173. # Person.in_batches(start: 10_000).update_all(awesome: true)
  174. #
  175. # An example of calling where query method on the relation:
  176. #
  177. # Person.in_batches.each do |relation|
  178. # relation.update_all('age = age + 1')
  179. # relation.where('age > 21').update_all(should_party: true)
  180. # relation.where('age <= 21').delete_all
  181. # end
  182. #
  183. # NOTE: If you are going to iterate through each record, you should call
  184. # #each_record on the yielded BatchEnumerator:
  185. #
  186. # Person.in_batches.each_record(&:party_all_night!)
  187. #
  188. # NOTE: It's not possible to set the order. That is automatically set to
  189. # ascending on the primary key ("id ASC") to make the batch ordering
  190. # consistent. Therefore the primary key must be orderable, e.g. an integer
  191. # or a string.
  192. #
  193. # NOTE: By its nature, batch processing is subject to race conditions if
  194. # other processes are modifying the database.
  195. 1 def in_batches(of: 1000, start: nil, finish: nil, load: false, error_on_ignore: nil)
  196. relation = self
  197. unless block_given?
  198. return BatchEnumerator.new(of: of, start: start, finish: finish, relation: self)
  199. end
  200. if arel.orders.present?
  201. act_on_ignored_order(error_on_ignore)
  202. end
  203. batch_limit = of
  204. if limit_value
  205. remaining = limit_value
  206. batch_limit = remaining if remaining < batch_limit
  207. end
  208. relation = relation.reorder(batch_order).limit(batch_limit)
  209. relation = apply_limits(relation, start, finish)
  210. relation.skip_query_cache! # Retaining the results in the query cache would undermine the point of batching
  211. batch_relation = relation
  212. loop do
  213. if load
  214. records = batch_relation.records
  215. ids = records.map(&:id)
  216. yielded_relation = where(primary_key => ids)
  217. yielded_relation.load_records(records)
  218. else
  219. ids = batch_relation.pluck(primary_key)
  220. yielded_relation = where(primary_key => ids)
  221. end
  222. break if ids.empty?
  223. primary_key_offset = ids.last
  224. raise ArgumentError.new("Primary key not included in the custom select clause") unless primary_key_offset
  225. yield yielded_relation
  226. break if ids.length < batch_limit
  227. if limit_value
  228. remaining -= ids.length
  229. if remaining == 0
  230. # Saves a useless iteration when the limit is a multiple of the
  231. # batch size.
  232. break
  233. elsif remaining < batch_limit
  234. relation = relation.limit(remaining)
  235. end
  236. end
  237. attr = Relation::QueryAttribute.new(primary_key, primary_key_offset, klass.type_for_attribute(primary_key))
  238. batch_relation = relation.where(arel_attribute(primary_key).gt(Arel::Nodes::BindParam.new(attr)))
  239. end
  240. end
  241. 1 private
  242. 1 def apply_limits(relation, start, finish)
  243. if start
  244. attr = Relation::QueryAttribute.new(primary_key, start, klass.type_for_attribute(primary_key))
  245. relation = relation.where(arel_attribute(primary_key).gteq(Arel::Nodes::BindParam.new(attr)))
  246. end
  247. if finish
  248. attr = Relation::QueryAttribute.new(primary_key, finish, klass.type_for_attribute(primary_key))
  249. relation = relation.where(arel_attribute(primary_key).lteq(Arel::Nodes::BindParam.new(attr)))
  250. end
  251. relation
  252. end
  253. 1 def batch_order
  254. arel_attribute(primary_key).asc
  255. end
  256. 1 def act_on_ignored_order(error_on_ignore)
  257. raise_error = (error_on_ignore.nil? ? klass.error_on_ignored_order : error_on_ignore)
  258. if raise_error
  259. raise ArgumentError.new(ORDER_IGNORE_MESSAGE)
  260. elsif logger
  261. logger.warn(ORDER_IGNORE_MESSAGE)
  262. end
  263. end
  264. end
  265. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/batches/batch_enumerator.rb

42.86% lines covered

21 relevant lines. 9 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Batches
  4. 1 class BatchEnumerator
  5. 1 include Enumerable
  6. 1 def initialize(of: 1000, start: nil, finish: nil, relation:) #:nodoc:
  7. @of = of
  8. @relation = relation
  9. @start = start
  10. @finish = finish
  11. end
  12. # Looping through a collection of records from the database (using the
  13. # +all+ method, for example) is very inefficient since it will try to
  14. # instantiate all the objects at once.
  15. #
  16. # In that case, batch processing methods allow you to work with the
  17. # records in batches, thereby greatly reducing memory consumption.
  18. #
  19. # Person.in_batches.each_record do |person|
  20. # person.do_awesome_stuff
  21. # end
  22. #
  23. # Person.where("age > 21").in_batches(of: 10).each_record do |person|
  24. # person.party_all_night!
  25. # end
  26. #
  27. # If you do not provide a block to #each_record, it will return an Enumerator
  28. # for chaining with other methods:
  29. #
  30. # Person.in_batches.each_record.with_index do |person, index|
  31. # person.award_trophy(index + 1)
  32. # end
  33. 1 def each_record
  34. return to_enum(:each_record) unless block_given?
  35. @relation.to_enum(:in_batches, of: @of, start: @start, finish: @finish, load: true).each do |relation|
  36. relation.records.each { |record| yield record }
  37. end
  38. end
  39. # Delegates #delete_all, #update_all, #destroy_all methods to each batch.
  40. #
  41. # People.in_batches.delete_all
  42. # People.where('age < 10').in_batches.destroy_all
  43. # People.in_batches.update_all('age = age + 1')
  44. 1 [:delete_all, :update_all, :destroy_all].each do |method|
  45. 3 define_method(method) do |*args, &block|
  46. @relation.to_enum(:in_batches, of: @of, start: @start, finish: @finish, load: false).each do |relation|
  47. relation.send(method, *args, &block)
  48. end
  49. end
  50. end
  51. # Yields an ActiveRecord::Relation object for each batch of records.
  52. #
  53. # Person.in_batches.each do |relation|
  54. # relation.update_all(awesome: true)
  55. # end
  56. 1 def each
  57. enum = @relation.to_enum(:in_batches, of: @of, start: @start, finish: @finish, load: false)
  58. return enum.each { |relation| yield relation } if block_given?
  59. enum
  60. end
  61. end
  62. end
  63. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/calculations.rb

44.16% lines covered

154 relevant lines. 68 lines covered and 86 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 module Calculations
  4. # Count the records.
  5. #
  6. # Person.count
  7. # # => the total count of all people
  8. #
  9. # Person.count(:age)
  10. # # => returns the total count of all people whose age is present in database
  11. #
  12. # Person.count(:all)
  13. # # => performs a COUNT(*) (:all is an alias for '*')
  14. #
  15. # Person.distinct.count(:age)
  16. # # => counts the number of different age values
  17. #
  18. # If #count is used with {Relation#group}[rdoc-ref:QueryMethods#group],
  19. # it returns a Hash whose keys represent the aggregated column,
  20. # and the values are the respective amounts:
  21. #
  22. # Person.group(:city).count
  23. # # => { 'Rome' => 5, 'Paris' => 3 }
  24. #
  25. # If #count is used with {Relation#group}[rdoc-ref:QueryMethods#group] for multiple columns, it returns a Hash whose
  26. # keys are an array containing the individual values of each column and the value
  27. # of each key would be the #count.
  28. #
  29. # Article.group(:status, :category).count
  30. # # => {["draft", "business"]=>10, ["draft", "technology"]=>4,
  31. # ["published", "business"]=>0, ["published", "technology"]=>2}
  32. #
  33. # If #count is used with {Relation#select}[rdoc-ref:QueryMethods#select], it will count the selected columns:
  34. #
  35. # Person.select(:age).count
  36. # # => counts the number of different age values
  37. #
  38. # Note: not all valid {Relation#select}[rdoc-ref:QueryMethods#select] expressions are valid #count expressions. The specifics differ
  39. # between databases. In invalid cases, an error from the database is thrown.
  40. 1 def count(column_name = nil)
  41. 4 if block_given?
  42. unless column_name.nil?
  43. ActiveSupport::Deprecation.warn \
  44. "When `count' is called with a block, it ignores other arguments. " \
  45. "This behavior is now deprecated and will result in an ArgumentError in Rails 6.0."
  46. end
  47. return super()
  48. end
  49. 4 calculate(:count, column_name)
  50. end
  51. # Calculates the average value on a given column. Returns +nil+ if there's
  52. # no row. See #calculate for examples with options.
  53. #
  54. # Person.average(:age) # => 35.8
  55. 1 def average(column_name)
  56. calculate(:average, column_name)
  57. end
  58. # Calculates the minimum value on a given column. The value is returned
  59. # with the same data type of the column, or +nil+ if there's no row. See
  60. # #calculate for examples with options.
  61. #
  62. # Person.minimum(:age) # => 7
  63. 1 def minimum(column_name)
  64. calculate(:minimum, column_name)
  65. end
  66. # Calculates the maximum value on a given column. The value is returned
  67. # with the same data type of the column, or +nil+ if there's no row. See
  68. # #calculate for examples with options.
  69. #
  70. # Person.maximum(:age) # => 93
  71. 1 def maximum(column_name)
  72. calculate(:maximum, column_name)
  73. end
  74. # Calculates the sum of values on a given column. The value is returned
  75. # with the same data type of the column, +0+ if there's no row. See
  76. # #calculate for examples with options.
  77. #
  78. # Person.sum(:age) # => 4562
  79. 1 def sum(column_name = nil)
  80. if block_given?
  81. unless column_name.nil?
  82. ActiveSupport::Deprecation.warn \
  83. "When `sum' is called with a block, it ignores other arguments. " \
  84. "This behavior is now deprecated and will result in an ArgumentError in Rails 6.0."
  85. end
  86. return super()
  87. end
  88. calculate(:sum, column_name)
  89. end
  90. # This calculates aggregate values in the given column. Methods for #count, #sum, #average,
  91. # #minimum, and #maximum have been added as shortcuts.
  92. #
  93. # Person.calculate(:count, :all) # The same as Person.count
  94. # Person.average(:age) # SELECT AVG(age) FROM people...
  95. #
  96. # # Selects the minimum age for any family without any minors
  97. # Person.group(:last_name).having("min(age) > 17").minimum(:age)
  98. #
  99. # Person.sum("2 * age")
  100. #
  101. # There are two basic forms of output:
  102. #
  103. # * Single aggregate value: The single value is type cast to Integer for COUNT, Float
  104. # for AVG, and the given column's type for everything else.
  105. #
  106. # * Grouped values: This returns an ordered hash of the values and groups them. It
  107. # takes either a column name, or the name of a belongs_to association.
  108. #
  109. # values = Person.group('last_name').maximum(:age)
  110. # puts values["Drake"]
  111. # # => 43
  112. #
  113. # drake = Family.find_by(last_name: 'Drake')
  114. # values = Person.group(:family).maximum(:age) # Person belongs_to :family
  115. # puts values[drake]
  116. # # => 43
  117. #
  118. # values.each do |family, max_age|
  119. # ...
  120. # end
  121. 1 def calculate(operation, column_name)
  122. 4 if has_include?(column_name)
  123. relation = apply_join_dependency
  124. if operation.to_s.downcase == "count"
  125. relation.distinct!
  126. # PostgreSQL: ORDER BY expressions must appear in SELECT list when using DISTINCT
  127. if (column_name == :all || column_name.nil?) && select_values.empty?
  128. relation.order_values = []
  129. end
  130. end
  131. relation.calculate(operation, column_name)
  132. else
  133. 4 perform_calculation(operation, column_name)
  134. end
  135. end
  136. # Use #pluck as a shortcut to select one or more attributes without
  137. # loading a bunch of records just to grab the attributes you want.
  138. #
  139. # Person.pluck(:name)
  140. #
  141. # instead of
  142. #
  143. # Person.all.map(&:name)
  144. #
  145. # Pluck returns an Array of attribute values type-casted to match
  146. # the plucked column names, if they can be deduced. Plucking an SQL fragment
  147. # returns String values by default.
  148. #
  149. # Person.pluck(:name)
  150. # # SELECT people.name FROM people
  151. # # => ['David', 'Jeremy', 'Jose']
  152. #
  153. # Person.pluck(:id, :name)
  154. # # SELECT people.id, people.name FROM people
  155. # # => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
  156. #
  157. # Person.distinct.pluck(:role)
  158. # # SELECT DISTINCT role FROM people
  159. # # => ['admin', 'member', 'guest']
  160. #
  161. # Person.where(age: 21).limit(5).pluck(:id)
  162. # # SELECT people.id FROM people WHERE people.age = 21 LIMIT 5
  163. # # => [2, 3]
  164. #
  165. # Person.pluck('DATEDIFF(updated_at, created_at)')
  166. # # SELECT DATEDIFF(updated_at, created_at) FROM people
  167. # # => ['0', '27761', '173']
  168. #
  169. # See also #ids.
  170. #
  171. 1 def pluck(*column_names)
  172. 1 if loaded? && (column_names.map(&:to_s) - @klass.attribute_names - @klass.attribute_aliases.keys).empty?
  173. return records.pluck(*column_names)
  174. end
  175. 1 if has_include?(column_names.first)
  176. relation = apply_join_dependency
  177. relation.pluck(*column_names)
  178. else
  179. 1 klass.enforce_raw_sql_whitelist(column_names)
  180. 1 relation = spawn
  181. 1 relation.select_values = column_names
  182. 2 result = skip_query_cache_if_necessary { klass.connection.select_all(relation.arel, nil) }
  183. 1 result.cast_values(klass.attribute_types)
  184. end
  185. end
  186. # Pluck all the ID's for the relation using the table's primary key
  187. #
  188. # Person.ids # SELECT people.id FROM people
  189. # Person.joins(:companies).ids # SELECT people.id FROM people INNER JOIN companies ON companies.person_id = people.id
  190. 1 def ids
  191. pluck primary_key
  192. end
  193. 1 private
  194. 1 def has_include?(column_name)
  195. 5 eager_loading? || (includes_values.present? && column_name && column_name != :all)
  196. end
  197. 1 def perform_calculation(operation, column_name)
  198. 4 operation = operation.to_s.downcase
  199. # If #count is used with #distinct (i.e. `relation.distinct.count`) it is
  200. # considered distinct.
  201. 4 distinct = distinct_value
  202. 4 if operation == "count"
  203. 4 column_name ||= select_for_count
  204. 4 if column_name == :all
  205. 4 if !distinct
  206. 4 distinct = distinct_select?(select_for_count) if group_values.empty?
  207. elsif group_values.any? || select_values.empty? && order_values.empty?
  208. column_name = primary_key
  209. end
  210. elsif distinct_select?(column_name)
  211. distinct = nil
  212. end
  213. end
  214. 4 if group_values.any?
  215. execute_grouped_calculation(operation, column_name, distinct)
  216. else
  217. 4 execute_simple_calculation(operation, column_name, distinct)
  218. end
  219. end
  220. 1 def distinct_select?(column_name)
  221. 4 column_name.is_a?(::String) && /\bDISTINCT[\s(]/i.match?(column_name)
  222. end
  223. 1 def aggregate_column(column_name)
  224. 4 return column_name if Arel::Expressions === column_name
  225. 4 if @klass.has_attribute?(column_name) || @klass.attribute_alias?(column_name)
  226. @klass.arel_attribute(column_name)
  227. else
  228. 4 Arel.sql(column_name == :all ? "*" : column_name.to_s)
  229. end
  230. end
  231. 1 def operation_over_aggregate_column(column, operation, distinct)
  232. 4 operation == "count" ? column.count(distinct) : column.send(operation)
  233. end
  234. 1 def execute_simple_calculation(operation, column_name, distinct) #:nodoc:
  235. 4 column_alias = column_name
  236. 4 if operation == "count" && (column_name == :all && distinct || has_limit_or_offset?)
  237. # Shortcut when limit is zero.
  238. return 0 if limit_value == 0
  239. query_builder = build_count_subquery(spawn, column_name, distinct)
  240. else
  241. # PostgreSQL doesn't like ORDER BY when there are no GROUP BY
  242. 4 relation = unscope(:order).distinct!(false)
  243. 4 column = aggregate_column(column_name)
  244. 4 select_value = operation_over_aggregate_column(column, operation, distinct)
  245. 4 if operation == "sum" && distinct
  246. select_value.distinct = true
  247. end
  248. 4 column_alias = select_value.alias
  249. 4 column_alias ||= @klass.connection.column_name_for_operation(operation, select_value)
  250. 4 relation.select_values = [select_value]
  251. 4 query_builder = relation.arel
  252. end
  253. 8 result = skip_query_cache_if_necessary { @klass.connection.select_all(query_builder, nil) }
  254. 4 row = result.first
  255. 4 value = row && row.values.first
  256. 4 type = result.column_types.fetch(column_alias) do
  257. type_for(column_name)
  258. end
  259. 4 type_cast_calculated_value(value, type, operation)
  260. end
  261. 1 def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
  262. group_attrs = group_values
  263. if group_attrs.first.respond_to?(:to_sym)
  264. association = @klass._reflect_on_association(group_attrs.first)
  265. associated = group_attrs.size == 1 && association && association.belongs_to? # only count belongs_to associations
  266. group_fields = Array(associated ? association.foreign_key : group_attrs)
  267. else
  268. group_fields = group_attrs
  269. end
  270. group_fields = arel_columns(group_fields)
  271. group_aliases = group_fields.map { |field| column_alias_for(field) }
  272. group_columns = group_aliases.zip(group_fields)
  273. if operation == "count" && column_name == :all
  274. aggregate_alias = "count_all"
  275. else
  276. aggregate_alias = column_alias_for([operation, column_name].join(" "))
  277. end
  278. select_values = [
  279. operation_over_aggregate_column(
  280. aggregate_column(column_name),
  281. operation,
  282. distinct).as(aggregate_alias)
  283. ]
  284. select_values += self.select_values unless having_clause.empty?
  285. select_values.concat group_columns.map { |aliaz, field|
  286. if field.respond_to?(:as)
  287. field.as(aliaz)
  288. else
  289. "#{field} AS #{aliaz}"
  290. end
  291. }
  292. relation = except(:group).distinct!(false)
  293. relation.group_values = group_fields
  294. relation.select_values = select_values
  295. calculated_data = skip_query_cache_if_necessary { @klass.connection.select_all(relation.arel, nil) }
  296. if association
  297. key_ids = calculated_data.collect { |row| row[group_aliases.first] }
  298. key_records = association.klass.base_class.where(association.klass.base_class.primary_key => key_ids)
  299. key_records = Hash[key_records.map { |r| [r.id, r] }]
  300. end
  301. Hash[calculated_data.map do |row|
  302. key = group_columns.map { |aliaz, col_name|
  303. type = type_for(col_name) do
  304. calculated_data.column_types.fetch(aliaz, Type.default_value)
  305. end
  306. type_cast_calculated_value(row[aliaz], type)
  307. }
  308. key = key.first if key.size == 1
  309. key = key_records[key] if associated
  310. type = calculated_data.column_types.fetch(aggregate_alias) { type_for(column_name) }
  311. [key, type_cast_calculated_value(row[aggregate_alias], type, operation)]
  312. end]
  313. end
  314. # Converts the given keys to the value that the database adapter returns as
  315. # a usable column name:
  316. #
  317. # column_alias_for("users.id") # => "users_id"
  318. # column_alias_for("sum(id)") # => "sum_id"
  319. # column_alias_for("count(distinct users.id)") # => "count_distinct_users_id"
  320. # column_alias_for("count(*)") # => "count_all"
  321. 1 def column_alias_for(keys)
  322. if keys.respond_to? :name
  323. keys = "#{keys.relation.name}.#{keys.name}"
  324. end
  325. table_name = keys.to_s.downcase
  326. table_name.gsub!(/\*/, "all")
  327. table_name.gsub!(/\W+/, " ")
  328. table_name.strip!
  329. table_name.gsub!(/ +/, "_")
  330. @klass.connection.table_alias_for(table_name)
  331. end
  332. 1 def type_for(field, &block)
  333. field_name = field.respond_to?(:name) ? field.name.to_s : field.to_s.split(".").last
  334. @klass.type_for_attribute(field_name, &block)
  335. end
  336. 1 def type_cast_calculated_value(value, type, operation = nil)
  337. 4 case operation
  338. 4 when "count" then value.to_i
  339. when "sum" then type.deserialize(value || 0)
  340. when "average" then value && value.respond_to?(:to_d) ? value.to_d : value
  341. else type.deserialize(value)
  342. end
  343. end
  344. 1 def select_for_count
  345. 8 if select_values.present?
  346. return select_values.first if select_values.one?
  347. select_values.join(", ")
  348. else
  349. 8 :all
  350. end
  351. end
  352. 1 def build_count_subquery(relation, column_name, distinct)
  353. if column_name == :all
  354. relation.select_values = [ Arel.sql(FinderMethods::ONE_AS_ONE) ] unless distinct
  355. else
  356. column_alias = Arel.sql("count_column")
  357. relation.select_values = [ aggregate_column(column_name).as(column_alias) ]
  358. end
  359. subquery = relation.arel.as(Arel.sql("subquery_for_count"))
  360. select_value = operation_over_aggregate_column(column_alias || Arel.star, "count", false)
  361. Arel::SelectManager.new(subquery).project(select_value)
  362. end
  363. end
  364. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/finder_methods.rb

39.57% lines covered

187 relevant lines. 74 lines covered and 113 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/filters"
  3. 1 module ActiveRecord
  4. 1 module FinderMethods
  5. 1 ONE_AS_ONE = "1 AS one"
  6. # Find by id - This can either be a specific id (1), a list of ids (1, 5, 6), or an array of ids ([5, 6, 10]).
  7. # If one or more records can not be found for the requested ids, then RecordNotFound will be raised. If the primary key
  8. # is an integer, find by id coerces its arguments using +to_i+.
  9. #
  10. # Person.find(1) # returns the object for ID = 1
  11. # Person.find("1") # returns the object for ID = 1
  12. # Person.find("31-sarah") # returns the object for ID = 31
  13. # Person.find(1, 2, 6) # returns an array for objects with IDs in (1, 2, 6)
  14. # Person.find([7, 17]) # returns an array for objects with IDs in (7, 17)
  15. # Person.find([1]) # returns an array for the object with ID = 1
  16. # Person.where("administrator = 1").order("created_on DESC").find(1)
  17. #
  18. # NOTE: The returned records are in the same order as the ids you provide.
  19. # If you want the results to be sorted by database, you can use ActiveRecord::QueryMethods#where
  20. # method and provide an explicit ActiveRecord::QueryMethods#order option.
  21. # But ActiveRecord::QueryMethods#where method doesn't raise ActiveRecord::RecordNotFound.
  22. #
  23. # ==== Find with lock
  24. #
  25. # Example for find with a lock: Imagine two concurrent transactions:
  26. # each will read <tt>person.visits == 2</tt>, add 1 to it, and save, resulting
  27. # in two saves of <tt>person.visits = 3</tt>. By locking the row, the second
  28. # transaction has to wait until the first is finished; we get the
  29. # expected <tt>person.visits == 4</tt>.
  30. #
  31. # Person.transaction do
  32. # person = Person.lock(true).find(1)
  33. # person.visits += 1
  34. # person.save!
  35. # end
  36. #
  37. # ==== Variations of #find
  38. #
  39. # Person.where(name: 'Spartacus', rating: 4)
  40. # # returns a chainable list (which can be empty).
  41. #
  42. # Person.find_by(name: 'Spartacus', rating: 4)
  43. # # returns the first item or nil.
  44. #
  45. # Person.find_or_initialize_by(name: 'Spartacus', rating: 4)
  46. # # returns the first item or returns a new instance (requires you call .save to persist against the database).
  47. #
  48. # Person.find_or_create_by(name: 'Spartacus', rating: 4)
  49. # # returns the first item or creates it and returns it.
  50. #
  51. # ==== Alternatives for #find
  52. #
  53. # Person.where(name: 'Spartacus', rating: 4).exists?(conditions = :none)
  54. # # returns a boolean indicating if any record with the given conditions exist.
  55. #
  56. # Person.where(name: 'Spartacus', rating: 4).select("field1, field2, field3")
  57. # # returns a chainable list of instances with only the mentioned fields.
  58. #
  59. # Person.where(name: 'Spartacus', rating: 4).ids
  60. # # returns an Array of ids.
  61. #
  62. # Person.where(name: 'Spartacus', rating: 4).pluck(:field1, :field2)
  63. # # returns an Array of the required fields.
  64. 1 def find(*args)
  65. return super if block_given?
  66. find_with_ids(*args)
  67. end
  68. # Finds the first record matching the specified conditions. There
  69. # is no implied ordering so if order matters, you should specify it
  70. # yourself.
  71. #
  72. # If no record is found, returns <tt>nil</tt>.
  73. #
  74. # Post.find_by name: 'Spartacus', rating: 4
  75. # Post.find_by "published_at < ?", 2.weeks.ago
  76. 1 def find_by(arg, *args)
  77. where(arg, *args).take
  78. rescue ::RangeError
  79. nil
  80. end
  81. # Like #find_by, except that if no record is found, raises
  82. # an ActiveRecord::RecordNotFound error.
  83. 1 def find_by!(arg, *args)
  84. where(arg, *args).take!
  85. rescue ::RangeError
  86. raise RecordNotFound.new("Couldn't find #{@klass.name} with an out of range value",
  87. @klass.name, @klass.primary_key)
  88. end
  89. # Gives a record (or N records if a parameter is supplied) without any implied
  90. # order. The order will depend on the database implementation.
  91. # If an order is supplied it will be respected.
  92. #
  93. # Person.take # returns an object fetched by SELECT * FROM people LIMIT 1
  94. # Person.take(5) # returns 5 objects fetched by SELECT * FROM people LIMIT 5
  95. # Person.where(["name LIKE '%?'", name]).take
  96. 1 def take(limit = nil)
  97. limit ? find_take_with_limit(limit) : find_take
  98. end
  99. # Same as #take but raises ActiveRecord::RecordNotFound if no record
  100. # is found. Note that #take! accepts no arguments.
  101. 1 def take!
  102. take || raise_record_not_found_exception!
  103. end
  104. # Find the first record (or first N records if a parameter is supplied).
  105. # If no order is defined it will order by primary key.
  106. #
  107. # Person.first # returns the first object fetched by SELECT * FROM people ORDER BY people.id LIMIT 1
  108. # Person.where(["user_name = ?", user_name]).first
  109. # Person.where(["user_name = :u", { u: user_name }]).first
  110. # Person.order("created_on DESC").offset(5).first
  111. # Person.first(3) # returns the first three objects fetched by SELECT * FROM people ORDER BY people.id LIMIT 3
  112. #
  113. 1 def first(limit = nil)
  114. 3 if limit
  115. find_nth_with_limit(0, limit)
  116. else
  117. 3 find_nth 0
  118. end
  119. end
  120. # Same as #first but raises ActiveRecord::RecordNotFound if no record
  121. # is found. Note that #first! accepts no arguments.
  122. 1 def first!
  123. first || raise_record_not_found_exception!
  124. end
  125. # Find the last record (or last N records if a parameter is supplied).
  126. # If no order is defined it will order by primary key.
  127. #
  128. # Person.last # returns the last object fetched by SELECT * FROM people
  129. # Person.where(["user_name = ?", user_name]).last
  130. # Person.order("created_on DESC").offset(5).last
  131. # Person.last(3) # returns the last three objects fetched by SELECT * FROM people.
  132. #
  133. # Take note that in that last case, the results are sorted in ascending order:
  134. #
  135. # [#<Person id:2>, #<Person id:3>, #<Person id:4>]
  136. #
  137. # and not:
  138. #
  139. # [#<Person id:4>, #<Person id:3>, #<Person id:2>]
  140. 1 def last(limit = nil)
  141. 3 return find_last(limit) if loaded? || has_limit_or_offset?
  142. 3 result = ordered_relation.limit(limit)
  143. 3 result = result.reverse_order!
  144. 3 limit ? result.reverse : result.first
  145. end
  146. # Same as #last but raises ActiveRecord::RecordNotFound if no record
  147. # is found. Note that #last! accepts no arguments.
  148. 1 def last!
  149. last || raise_record_not_found_exception!
  150. end
  151. # Find the second record.
  152. # If no order is defined it will order by primary key.
  153. #
  154. # Person.second # returns the second object fetched by SELECT * FROM people
  155. # Person.offset(3).second # returns the second object from OFFSET 3 (which is OFFSET 4)
  156. # Person.where(["user_name = :u", { u: user_name }]).second
  157. 1 def second
  158. find_nth 1
  159. end
  160. # Same as #second but raises ActiveRecord::RecordNotFound if no record
  161. # is found.
  162. 1 def second!
  163. second || raise_record_not_found_exception!
  164. end
  165. # Find the third record.
  166. # If no order is defined it will order by primary key.
  167. #
  168. # Person.third # returns the third object fetched by SELECT * FROM people
  169. # Person.offset(3).third # returns the third object from OFFSET 3 (which is OFFSET 5)
  170. # Person.where(["user_name = :u", { u: user_name }]).third
  171. 1 def third
  172. find_nth 2
  173. end
  174. # Same as #third but raises ActiveRecord::RecordNotFound if no record
  175. # is found.
  176. 1 def third!
  177. third || raise_record_not_found_exception!
  178. end
  179. # Find the fourth record.
  180. # If no order is defined it will order by primary key.
  181. #
  182. # Person.fourth # returns the fourth object fetched by SELECT * FROM people
  183. # Person.offset(3).fourth # returns the fourth object from OFFSET 3 (which is OFFSET 6)
  184. # Person.where(["user_name = :u", { u: user_name }]).fourth
  185. 1 def fourth
  186. find_nth 3
  187. end
  188. # Same as #fourth but raises ActiveRecord::RecordNotFound if no record
  189. # is found.
  190. 1 def fourth!
  191. fourth || raise_record_not_found_exception!
  192. end
  193. # Find the fifth record.
  194. # If no order is defined it will order by primary key.
  195. #
  196. # Person.fifth # returns the fifth object fetched by SELECT * FROM people
  197. # Person.offset(3).fifth # returns the fifth object from OFFSET 3 (which is OFFSET 7)
  198. # Person.where(["user_name = :u", { u: user_name }]).fifth
  199. 1 def fifth
  200. find_nth 4
  201. end
  202. # Same as #fifth but raises ActiveRecord::RecordNotFound if no record
  203. # is found.
  204. 1 def fifth!
  205. fifth || raise_record_not_found_exception!
  206. end
  207. # Find the forty-second record. Also known as accessing "the reddit".
  208. # If no order is defined it will order by primary key.
  209. #
  210. # Person.forty_two # returns the forty-second object fetched by SELECT * FROM people
  211. # Person.offset(3).forty_two # returns the forty-second object from OFFSET 3 (which is OFFSET 44)
  212. # Person.where(["user_name = :u", { u: user_name }]).forty_two
  213. 1 def forty_two
  214. find_nth 41
  215. end
  216. # Same as #forty_two but raises ActiveRecord::RecordNotFound if no record
  217. # is found.
  218. 1 def forty_two!
  219. forty_two || raise_record_not_found_exception!
  220. end
  221. # Find the third-to-last record.
  222. # If no order is defined it will order by primary key.
  223. #
  224. # Person.third_to_last # returns the third-to-last object fetched by SELECT * FROM people
  225. # Person.offset(3).third_to_last # returns the third-to-last object from OFFSET 3
  226. # Person.where(["user_name = :u", { u: user_name }]).third_to_last
  227. 1 def third_to_last
  228. find_nth_from_last 3
  229. end
  230. # Same as #third_to_last but raises ActiveRecord::RecordNotFound if no record
  231. # is found.
  232. 1 def third_to_last!
  233. third_to_last || raise_record_not_found_exception!
  234. end
  235. # Find the second-to-last record.
  236. # If no order is defined it will order by primary key.
  237. #
  238. # Person.second_to_last # returns the second-to-last object fetched by SELECT * FROM people
  239. # Person.offset(3).second_to_last # returns the second-to-last object from OFFSET 3
  240. # Person.where(["user_name = :u", { u: user_name }]).second_to_last
  241. 1 def second_to_last
  242. find_nth_from_last 2
  243. end
  244. # Same as #second_to_last but raises ActiveRecord::RecordNotFound if no record
  245. # is found.
  246. 1 def second_to_last!
  247. second_to_last || raise_record_not_found_exception!
  248. end
  249. # Returns true if a record exists in the table that matches the +id+ or
  250. # conditions given, or false otherwise. The argument can take six forms:
  251. #
  252. # * Integer - Finds the record with this primary key.
  253. # * String - Finds the record with a primary key corresponding to this
  254. # string (such as <tt>'5'</tt>).
  255. # * Array - Finds the record that matches these +find+-style conditions
  256. # (such as <tt>['name LIKE ?', "%#{query}%"]</tt>).
  257. # * Hash - Finds the record that matches these +find+-style conditions
  258. # (such as <tt>{name: 'David'}</tt>).
  259. # * +false+ - Returns always +false+.
  260. # * No args - Returns +false+ if the relation is empty, +true+ otherwise.
  261. #
  262. # For more information about specifying conditions as a hash or array,
  263. # see the Conditions section in the introduction to ActiveRecord::Base.
  264. #
  265. # Note: You can't pass in a condition as a string (like <tt>name =
  266. # 'Jamie'</tt>), since it would be sanitized and then queried against
  267. # the primary key column, like <tt>id = 'name = \'Jamie\''</tt>.
  268. #
  269. # Person.exists?(5)
  270. # Person.exists?('5')
  271. # Person.exists?(['name LIKE ?', "%#{query}%"])
  272. # Person.exists?(id: [1, 4, 8])
  273. # Person.exists?(name: 'David')
  274. # Person.exists?(false)
  275. # Person.exists?
  276. # Person.where(name: 'Spartacus', rating: 4).exists?
  277. 1 def exists?(conditions = :none)
  278. 1 if Base === conditions
  279. raise ArgumentError, <<-MSG.squish
  280. You are passing an instance of ActiveRecord::Base to `exists?`.
  281. Please pass the id of the object by calling `.id`.
  282. MSG
  283. end
  284. 1 return false if !conditions || limit_value == 0
  285. 1 if eager_loading?
  286. relation = apply_join_dependency(eager_loading: false)
  287. return relation.exists?(conditions)
  288. end
  289. 1 relation = construct_relation_for_exists(conditions)
  290. 2 skip_query_cache_if_necessary { connection.select_one(relation.arel, "#{name} Exists") } ? true : false
  291. rescue ::RangeError
  292. false
  293. end
  294. # This method is called whenever no records are found with either a single
  295. # id or multiple ids and raises an ActiveRecord::RecordNotFound exception.
  296. #
  297. # The error message is different depending on whether a single id or
  298. # multiple ids are provided. If multiple ids are provided, then the number
  299. # of results obtained should be provided in the +result_size+ argument and
  300. # the expected number of results should be provided in the +expected_size+
  301. # argument.
  302. 1 def raise_record_not_found_exception!(ids = nil, result_size = nil, expected_size = nil, key = primary_key, not_found_ids = nil) # :nodoc:
  303. conditions = arel.where_sql(@klass)
  304. conditions = " [#{conditions}]" if conditions
  305. name = @klass.name
  306. if ids.nil?
  307. error = "Couldn't find #{name}".dup
  308. error << " with#{conditions}" if conditions
  309. raise RecordNotFound.new(error, name, key)
  310. elsif Array(ids).size == 1
  311. error = "Couldn't find #{name} with '#{key}'=#{ids}#{conditions}"
  312. raise RecordNotFound.new(error, name, key, ids)
  313. else
  314. error = "Couldn't find all #{name.pluralize} with '#{key}': ".dup
  315. error << "(#{ids.join(", ")})#{conditions} (found #{result_size} results, but was looking for #{expected_size})."
  316. error << " Couldn't find #{name.pluralize(not_found_ids.size)} with #{key.to_s.pluralize(not_found_ids.size)} #{not_found_ids.join(', ')}." if not_found_ids
  317. raise RecordNotFound.new(error, name, key, ids)
  318. end
  319. end
  320. 1 private
  321. 1 def offset_index
  322. 3 offset_value || 0
  323. end
  324. 1 def construct_relation_for_exists(conditions)
  325. 1 if distinct_value && offset_value
  326. relation = limit(1)
  327. else
  328. 1 relation = except(:select, :distinct, :order)._select!(ONE_AS_ONE).limit!(1)
  329. end
  330. 1 case conditions
  331. when Array, Hash
  332. relation.where!(conditions) unless conditions.empty?
  333. else
  334. 1 relation.where!(primary_key => conditions) unless conditions == :none
  335. end
  336. 1 relation
  337. end
  338. 1 def construct_join_dependency
  339. including = eager_load_values + includes_values
  340. ActiveRecord::Associations::JoinDependency.new(
  341. klass, table, including
  342. )
  343. end
  344. 1 def apply_join_dependency(eager_loading: group_values.empty?)
  345. join_dependency = construct_join_dependency
  346. relation = except(:includes, :eager_load, :preload).joins!(join_dependency)
  347. if eager_loading && !using_limitable_reflections?(join_dependency.reflections)
  348. if has_limit_or_offset?
  349. limited_ids = limited_ids_for(relation)
  350. limited_ids.empty? ? relation.none! : relation.where!(primary_key => limited_ids)
  351. end
  352. relation.limit_value = relation.offset_value = nil
  353. end
  354. if block_given?
  355. yield relation, join_dependency
  356. else
  357. relation
  358. end
  359. end
  360. 1 def limited_ids_for(relation)
  361. values = @klass.connection.columns_for_distinct(
  362. connection.column_name_from_arel_node(arel_attribute(primary_key)),
  363. relation.order_values
  364. )
  365. relation = relation.except(:select).select(values).distinct!
  366. id_rows = skip_query_cache_if_necessary { @klass.connection.select_all(relation.arel, "SQL") }
  367. id_rows.map { |row| row[primary_key] }
  368. end
  369. 1 def using_limitable_reflections?(reflections)
  370. reflections.none?(&:collection?)
  371. end
  372. 1 def find_with_ids(*ids)
  373. raise UnknownPrimaryKey.new(@klass) if primary_key.nil?
  374. expects_array = ids.first.kind_of?(Array)
  375. return [] if expects_array && ids.first.empty?
  376. ids = ids.flatten.compact.uniq
  377. model_name = @klass.name
  378. case ids.size
  379. when 0
  380. error_message = "Couldn't find #{model_name} without an ID"
  381. raise RecordNotFound.new(error_message, model_name, primary_key)
  382. when 1
  383. result = find_one(ids.first)
  384. expects_array ? [ result ] : result
  385. else
  386. find_some(ids)
  387. end
  388. rescue ::RangeError
  389. error_message = "Couldn't find #{model_name} with an out of range ID"
  390. raise RecordNotFound.new(error_message, model_name, primary_key, ids)
  391. end
  392. 1 def find_one(id)
  393. if ActiveRecord::Base === id
  394. raise ArgumentError, <<-MSG.squish
  395. You are passing an instance of ActiveRecord::Base to `find`.
  396. Please pass the id of the object by calling `.id`.
  397. MSG
  398. end
  399. relation = where(primary_key => id)
  400. record = relation.take
  401. raise_record_not_found_exception!(id, 0, 1) unless record
  402. record
  403. end
  404. 1 def find_some(ids)
  405. return find_some_ordered(ids) unless order_values.present?
  406. result = where(primary_key => ids).to_a
  407. expected_size =
  408. if limit_value && ids.size > limit_value
  409. limit_value
  410. else
  411. ids.size
  412. end
  413. # 11 ids with limit 3, offset 9 should give 2 results.
  414. if offset_value && (ids.size - offset_value < expected_size)
  415. expected_size = ids.size - offset_value
  416. end
  417. if result.size == expected_size
  418. result
  419. else
  420. raise_record_not_found_exception!(ids, result.size, expected_size)
  421. end
  422. end
  423. 1 def find_some_ordered(ids)
  424. ids = ids.slice(offset_value || 0, limit_value || ids.size) || []
  425. result = except(:limit, :offset).where(primary_key => ids).records
  426. if result.size == ids.size
  427. pk_type = @klass.type_for_attribute(primary_key)
  428. records_by_id = result.index_by(&:id)
  429. ids.map { |id| records_by_id.fetch(pk_type.cast(id)) }
  430. else
  431. raise_record_not_found_exception!(ids, result.size, ids.size)
  432. end
  433. end
  434. 1 def find_take
  435. if loaded?
  436. records.first
  437. else
  438. @take ||= limit(1).records.first
  439. end
  440. end
  441. 1 def find_take_with_limit(limit)
  442. if loaded?
  443. records.take(limit)
  444. else
  445. limit(limit).to_a
  446. end
  447. end
  448. 1 def find_nth(index)
  449. 3 @offsets[offset_index + index] ||= find_nth_with_limit(index, 1).first
  450. end
  451. 1 def find_nth_with_limit(index, limit)
  452. 3 if loaded?
  453. records[index, limit] || []
  454. else
  455. 3 relation = ordered_relation
  456. 3 if limit_value
  457. limit = [limit_value - index, limit].min
  458. end
  459. 3 if limit > 0
  460. 3 relation = relation.offset(offset_index + index) unless index.zero?
  461. 3 relation.limit(limit).to_a
  462. else
  463. []
  464. end
  465. end
  466. end
  467. 1 def find_nth_from_last(index)
  468. if loaded?
  469. records[-index]
  470. else
  471. relation = ordered_relation
  472. if equal?(relation) || has_limit_or_offset?
  473. relation.records[-index]
  474. else
  475. relation.last(index)[-index]
  476. end
  477. end
  478. end
  479. 1 def find_last(limit)
  480. limit ? records.last(limit) : records.last
  481. end
  482. 1 def ordered_relation
  483. 6 if order_values.empty? && primary_key
  484. 3 order(arel_attribute(primary_key).asc)
  485. else
  486. 3 self
  487. end
  488. end
  489. end
  490. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/from_clause.rb

92.31% lines covered

13 relevant lines. 12 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class Relation
  4. 1 class FromClause # :nodoc:
  5. 1 attr_reader :value, :name
  6. 1 def initialize(value, name)
  7. 1 @value = value
  8. 1 @name = name
  9. end
  10. 1 def merge(other)
  11. self
  12. end
  13. 1 def empty?
  14. 12 value.nil?
  15. end
  16. 1 def self.empty
  17. 1 @empty ||= new(nil, nil)
  18. end
  19. end
  20. end
  21. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/merger.rb

23.91% lines covered

92 relevant lines. 22 lines covered and 70 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/keys"
  3. 1 module ActiveRecord
  4. 1 class Relation
  5. 1 class HashMerger # :nodoc:
  6. 1 attr_reader :relation, :hash
  7. 1 def initialize(relation, hash)
  8. hash.assert_valid_keys(*Relation::VALUE_METHODS)
  9. @relation = relation
  10. @hash = hash
  11. end
  12. 1 def merge #:nodoc:
  13. Merger.new(relation, other).merge
  14. end
  15. # Applying values to a relation has some side effects. E.g.
  16. # interpolation might take place for where values. So we should
  17. # build a relation to merge in rather than directly merging
  18. # the values.
  19. 1 def other
  20. other = Relation.create(
  21. relation.klass,
  22. table: relation.table,
  23. predicate_builder: relation.predicate_builder
  24. )
  25. hash.each { |k, v|
  26. if k == :joins
  27. if Hash === v
  28. other.joins!(v)
  29. else
  30. other.joins!(*v)
  31. end
  32. elsif k == :select
  33. other._select!(v)
  34. else
  35. other.send("#{k}!", v)
  36. end
  37. }
  38. other
  39. end
  40. end
  41. 1 class Merger # :nodoc:
  42. 1 attr_reader :relation, :values, :other
  43. 1 def initialize(relation, other)
  44. @relation = relation
  45. @values = other.values
  46. @other = other
  47. end
  48. 1 NORMAL_VALUES = Relation::VALUE_METHODS -
  49. Relation::CLAUSE_METHODS -
  50. [:includes, :preload, :joins, :left_outer_joins, :order, :reverse_order, :lock, :create_with, :reordering] # :nodoc:
  51. 1 def normal_values
  52. NORMAL_VALUES
  53. end
  54. 1 def merge
  55. normal_values.each do |name|
  56. value = values[name]
  57. # The unless clause is here mostly for performance reasons (since the `send` call might be moderately
  58. # expensive), most of the time the value is going to be `nil` or `.blank?`, the only catch is that
  59. # `false.blank?` returns `true`, so there needs to be an extra check so that explicit `false` values
  60. # don't fall through the cracks.
  61. unless value.nil? || (value.blank? && false != value)
  62. if name == :select
  63. relation._select!(*value)
  64. else
  65. relation.send("#{name}!", *value)
  66. end
  67. end
  68. end
  69. merge_multi_values
  70. merge_single_values
  71. merge_clauses
  72. merge_preloads
  73. merge_joins
  74. merge_outer_joins
  75. relation
  76. end
  77. 1 private
  78. 1 def merge_preloads
  79. return if other.preload_values.empty? && other.includes_values.empty?
  80. if other.klass == relation.klass
  81. relation.preload!(*other.preload_values) unless other.preload_values.empty?
  82. relation.includes!(other.includes_values) unless other.includes_values.empty?
  83. else
  84. reflection = relation.klass.reflect_on_all_associations.find do |r|
  85. r.class_name == other.klass.name
  86. end || return
  87. unless other.preload_values.empty?
  88. relation.preload! reflection.name => other.preload_values
  89. end
  90. unless other.includes_values.empty?
  91. relation.includes! reflection.name => other.includes_values
  92. end
  93. end
  94. end
  95. 1 def merge_joins
  96. return if other.joins_values.blank?
  97. if other.klass == relation.klass
  98. relation.joins!(*other.joins_values)
  99. else
  100. joins_dependency = other.joins_values.map do |join|
  101. case join
  102. when Hash, Symbol, Array
  103. ActiveRecord::Associations::JoinDependency.new(
  104. other.klass, other.table, join
  105. )
  106. else
  107. join
  108. end
  109. end
  110. relation.joins!(*joins_dependency)
  111. end
  112. end
  113. 1 def merge_outer_joins
  114. return if other.left_outer_joins_values.blank?
  115. if other.klass == relation.klass
  116. relation.left_outer_joins!(*other.left_outer_joins_values)
  117. else
  118. joins_dependency = other.left_outer_joins_values.map do |join|
  119. case join
  120. when Hash, Symbol, Array
  121. ActiveRecord::Associations::JoinDependency.new(
  122. other.klass, other.table, join
  123. )
  124. else
  125. join
  126. end
  127. end
  128. relation.left_outer_joins!(*joins_dependency)
  129. end
  130. end
  131. 1 def merge_multi_values
  132. if other.reordering_value
  133. # override any order specified in the original relation
  134. relation.reorder!(*other.order_values)
  135. elsif other.order_values.any?
  136. # merge in order_values from relation
  137. relation.order!(*other.order_values)
  138. end
  139. extensions = other.extensions - relation.extensions
  140. relation.extending!(*extensions) if extensions.any?
  141. end
  142. 1 def merge_single_values
  143. relation.lock_value ||= other.lock_value if other.lock_value
  144. unless other.create_with_value.blank?
  145. relation.create_with_value = (relation.create_with_value || {}).merge(other.create_with_value)
  146. end
  147. end
  148. 1 def merge_clauses
  149. relation.from_clause = other.from_clause if replace_from_clause?
  150. where_clause = relation.where_clause.merge(other.where_clause)
  151. relation.where_clause = where_clause unless where_clause.empty?
  152. having_clause = relation.having_clause.merge(other.having_clause)
  153. relation.having_clause = having_clause unless having_clause.empty?
  154. end
  155. 1 def replace_from_clause?
  156. relation.from_clause.empty? && !other.from_clause.empty? &&
  157. relation.klass.base_class == other.klass.base_class
  158. end
  159. end
  160. end
  161. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder.rb

64.63% lines covered

82 relevant lines. 53 lines covered and 29 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder # :nodoc:
  4. 1 delegate :resolve_column_aliases, to: :table
  5. 1 def initialize(table)
  6. 2 @table = table
  7. 2 @handlers = []
  8. 2 register_handler(BasicObject, BasicObjectHandler.new(self))
  9. 2 register_handler(Base, BaseHandler.new(self))
  10. 2 register_handler(Range, RangeHandler.new(self))
  11. 2 register_handler(Relation, RelationHandler.new)
  12. 2 register_handler(Array, ArrayHandler.new(self))
  13. 2 register_handler(Set, ArrayHandler.new(self))
  14. end
  15. 1 def build_from_hash(attributes)
  16. 2 attributes = convert_dot_notation_to_hash(attributes)
  17. 2 expand_from_hash(attributes)
  18. end
  19. 1 def self.references(attributes)
  20. 2 attributes.map do |key, value|
  21. 2 if value.is_a?(Hash)
  22. key
  23. else
  24. 2 key = key.to_s
  25. 2 key.split(".".freeze).first if key.include?(".".freeze)
  26. end
  27. end.compact
  28. end
  29. # Define how a class is converted to Arel nodes when passed to +where+.
  30. # The handler can be any object that responds to +call+, and will be used
  31. # for any value that +===+ the class given. For example:
  32. #
  33. # MyCustomDateRange = Struct.new(:start, :end)
  34. # handler = proc do |column, range|
  35. # Arel::Nodes::Between.new(column,
  36. # Arel::Nodes::And.new([range.start, range.end])
  37. # )
  38. # end
  39. # ActiveRecord::PredicateBuilder.new("users").register_handler(MyCustomDateRange, handler)
  40. 1 def register_handler(klass, handler)
  41. 12 @handlers.unshift([klass, handler])
  42. end
  43. 1 def build(attribute, value)
  44. 2 if table.type(attribute.name).force_equality?(value)
  45. bind = build_bind_attribute(attribute.name, value)
  46. attribute.eq(bind)
  47. else
  48. 2 handler_for(value).call(attribute, value)
  49. end
  50. end
  51. 1 def build_bind_attribute(column_name, value)
  52. 9 attr = Relation::QueryAttribute.new(column_name.to_s, value, table.type(column_name))
  53. 9 Arel::Nodes::BindParam.new(attr)
  54. end
  55. 1 protected
  56. 1 attr_reader :table
  57. 1 def expand_from_hash(attributes)
  58. 2 return ["1=0"] if attributes.empty?
  59. 2 attributes.flat_map do |key, value|
  60. 2 if value.is_a?(Hash) && !table.has_column?(key)
  61. associated_predicate_builder(key).expand_from_hash(value)
  62. 1 elsif table.associated_with?(key)
  63. # Find the foreign key when using queries such as:
  64. # Post.where(author: author)
  65. #
  66. # For polymorphic relationships, find the foreign key and type:
  67. # PriceEstimate.where(estimate_of: treasure)
  68. associated_table = table.associated_table(key)
  69. if associated_table.polymorphic_association?
  70. case value.is_a?(Array) ? value.first : value
  71. when Base, Relation
  72. value = [value] unless value.is_a?(Array)
  73. klass = PolymorphicArrayValue
  74. end
  75. end
  76. klass ||= AssociationQueryValue
  77. queries = klass.new(associated_table, value).queries.map do |query|
  78. expand_from_hash(query).reduce(&:and)
  79. end
  80. queries.reduce(&:or)
  81. 1 elsif table.aggregated_with?(key)
  82. mapping = table.reflect_on_aggregation(key).mapping
  83. values = value.nil? ? [nil] : Array.wrap(value)
  84. if mapping.length == 1 || values.empty?
  85. column_name, aggr_attr = mapping.first
  86. values = values.map do |object|
  87. object.respond_to?(aggr_attr) ? object.public_send(aggr_attr) : object
  88. end
  89. build(table.arel_attribute(column_name), values)
  90. else
  91. queries = values.map do |object|
  92. mapping.map do |field_attr, aggregate_attr|
  93. build(table.arel_attribute(field_attr), object.try!(aggregate_attr))
  94. end.reduce(&:and)
  95. end
  96. queries.reduce(&:or)
  97. end
  98. else
  99. 2 build(table.arel_attribute(key), value)
  100. end
  101. end
  102. end
  103. 1 private
  104. 1 def associated_predicate_builder(association_name)
  105. self.class.new(table.associated_table(association_name))
  106. end
  107. 1 def convert_dot_notation_to_hash(attributes)
  108. 2 dot_notation = attributes.select do |k, v|
  109. 2 k.include?(".".freeze) && !v.is_a?(Hash)
  110. end
  111. 2 dot_notation.each_key do |key|
  112. table_name, column_name = key.split(".".freeze)
  113. value = attributes.delete(key)
  114. attributes[table_name] ||= {}
  115. attributes[table_name] = attributes[table_name].merge(column_name => value)
  116. end
  117. 2 attributes
  118. end
  119. 1 def handler_for(object)
  120. 14 @handlers.detect { |klass, _| klass === object }.last
  121. end
  122. end
  123. end
  124. 1 require "active_record/relation/predicate_builder/array_handler"
  125. 1 require "active_record/relation/predicate_builder/base_handler"
  126. 1 require "active_record/relation/predicate_builder/basic_object_handler"
  127. 1 require "active_record/relation/predicate_builder/range_handler"
  128. 1 require "active_record/relation/predicate_builder/relation_handler"
  129. 1 require "active_record/relation/predicate_builder/association_query_value"
  130. 1 require "active_record/relation/predicate_builder/polymorphic_array_value"

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/array_handler.rb

38.46% lines covered

26 relevant lines. 10 lines covered and 16 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class ArrayHandler # :nodoc:
  5. 1 def initialize(predicate_builder)
  6. 4 @predicate_builder = predicate_builder
  7. end
  8. 1 def call(attribute, value)
  9. return attribute.in([]) if value.empty?
  10. values = value.map { |x| x.is_a?(Base) ? x.id : x }
  11. nils, values = values.partition(&:nil?)
  12. ranges, values = values.partition { |v| v.is_a?(Range) }
  13. values_predicate =
  14. case values.length
  15. when 0 then NullPredicate
  16. when 1 then predicate_builder.build(attribute, values.first)
  17. else
  18. values.map! do |v|
  19. predicate_builder.build_bind_attribute(attribute.name, v)
  20. end
  21. values.empty? ? NullPredicate : attribute.in(values)
  22. end
  23. unless nils.empty?
  24. values_predicate = values_predicate.or(predicate_builder.build(attribute, nil))
  25. end
  26. array_predicates = ranges.map { |range| predicate_builder.build(attribute, range) }
  27. array_predicates.unshift(values_predicate)
  28. array_predicates.inject(&:or)
  29. end
  30. 1 protected
  31. 1 attr_reader :predicate_builder
  32. 1 module NullPredicate # :nodoc:
  33. 1 def self.or(other)
  34. other
  35. end
  36. end
  37. end
  38. end
  39. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/association_query_value.rb

50.0% lines covered

22 relevant lines. 11 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class AssociationQueryValue # :nodoc:
  5. 1 def initialize(associated_table, value)
  6. @associated_table = associated_table
  7. @value = value
  8. end
  9. 1 def queries
  10. [associated_table.association_join_foreign_key.to_s => ids]
  11. end
  12. # TODO Change this to private once we've dropped Ruby 2.2 support.
  13. # Workaround for Ruby 2.2 "private attribute?" warning.
  14. 1 protected
  15. 1 attr_reader :associated_table, :value
  16. 1 private
  17. 1 def ids
  18. case value
  19. when Relation
  20. value.select_values.empty? ? value.select(primary_key) : value
  21. when Array
  22. value.map { |v| convert_to_id(v) }
  23. else
  24. convert_to_id(value)
  25. end
  26. end
  27. 1 def primary_key
  28. associated_table.association_join_primary_key
  29. end
  30. 1 def convert_to_id(value)
  31. case value
  32. when Base
  33. value._read_attribute(primary_key)
  34. else
  35. value
  36. end
  37. end
  38. end
  39. end
  40. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/base_handler.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class BaseHandler # :nodoc:
  5. 1 def initialize(predicate_builder)
  6. 2 @predicate_builder = predicate_builder
  7. end
  8. 1 def call(attribute, value)
  9. predicate_builder.build(attribute, value.id)
  10. end
  11. 1 protected
  12. 1 attr_reader :predicate_builder
  13. end
  14. end
  15. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/basic_object_handler.rb

100.0% lines covered

10 relevant lines. 10 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class BasicObjectHandler # :nodoc:
  5. 1 def initialize(predicate_builder)
  6. 2 @predicate_builder = predicate_builder
  7. end
  8. 1 def call(attribute, value)
  9. 2 bind = predicate_builder.build_bind_attribute(attribute.name, value)
  10. 2 attribute.eq(bind)
  11. end
  12. 1 protected
  13. 1 attr_reader :predicate_builder
  14. end
  15. end
  16. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb

46.15% lines covered

26 relevant lines. 12 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class PolymorphicArrayValue # :nodoc:
  5. 1 def initialize(associated_table, values)
  6. @associated_table = associated_table
  7. @values = values
  8. end
  9. 1 def queries
  10. type_to_ids_mapping.map do |type, ids|
  11. {
  12. associated_table.association_foreign_type.to_s => type,
  13. associated_table.association_foreign_key.to_s => ids
  14. }
  15. end
  16. end
  17. # TODO Change this to private once we've dropped Ruby 2.2 support.
  18. # Workaround for Ruby 2.2 "private attribute?" warning.
  19. 1 protected
  20. 1 attr_reader :associated_table, :values
  21. 1 private
  22. 1 def type_to_ids_mapping
  23. default_hash = Hash.new { |hsh, key| hsh[key] = [] }
  24. values.each_with_object(default_hash) do |value, hash|
  25. hash[klass(value).polymorphic_name] << convert_to_id(value)
  26. end
  27. end
  28. 1 def primary_key(value)
  29. associated_table.association_join_primary_key(klass(value))
  30. end
  31. 1 def klass(value)
  32. case value
  33. when Base
  34. value.class
  35. when Relation
  36. value.klass
  37. end
  38. end
  39. 1 def convert_to_id(value)
  40. case value
  41. when Base
  42. value._read_attribute(primary_key(value))
  43. when Relation
  44. value.select(primary_key(value))
  45. end
  46. end
  47. end
  48. end
  49. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/range_handler.rb

47.62% lines covered

21 relevant lines. 10 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class RangeHandler # :nodoc:
  5. 1 class RangeWithBinds < Struct.new(:begin, :end)
  6. 1 def exclude_end?
  7. false
  8. end
  9. end
  10. 1 def initialize(predicate_builder)
  11. 2 @predicate_builder = predicate_builder
  12. end
  13. 1 def call(attribute, value)
  14. begin_bind = predicate_builder.build_bind_attribute(attribute.name, value.begin)
  15. end_bind = predicate_builder.build_bind_attribute(attribute.name, value.end)
  16. if begin_bind.value.infinity?
  17. if end_bind.value.infinity?
  18. attribute.not_in([])
  19. elsif value.exclude_end?
  20. attribute.lt(end_bind)
  21. else
  22. attribute.lteq(end_bind)
  23. end
  24. elsif end_bind.value.infinity?
  25. attribute.gteq(begin_bind)
  26. elsif value.exclude_end?
  27. attribute.gteq(begin_bind).and(attribute.lt(end_bind))
  28. else
  29. attribute.between(RangeWithBinds.new(begin_bind, end_bind))
  30. end
  31. end
  32. 1 protected
  33. 1 attr_reader :predicate_builder
  34. end
  35. end
  36. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/predicate_builder/relation_handler.rb

44.44% lines covered

9 relevant lines. 4 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class PredicateBuilder
  4. 1 class RelationHandler # :nodoc:
  5. 1 def call(attribute, value)
  6. if value.eager_loading?
  7. value = value.send(:apply_join_dependency)
  8. end
  9. if value.select_values.empty?
  10. value = value.select(value.arel_attribute(value.klass.primary_key))
  11. end
  12. attribute.in(value.arel)
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_attribute.rb

70.83% lines covered

24 relevant lines. 17 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_model/attribute"
  3. 1 module ActiveRecord
  4. 1 class Relation
  5. 1 class QueryAttribute < ActiveModel::Attribute # :nodoc:
  6. 1 def type_cast(value)
  7. 12 value
  8. end
  9. 1 def value_for_database
  10. 20 @value_for_database ||= super
  11. end
  12. 1 def with_cast_value(value)
  13. 3 QueryAttribute.new(name, value, type)
  14. end
  15. 1 def nil?
  16. 3 unless value_before_type_cast.is_a?(StatementCache::Substitute)
  17. 1 value_before_type_cast.nil? ||
  18. type.respond_to?(:subtype, true) && value_for_database.nil?
  19. end
  20. end
  21. 1 def boundable?
  22. return @_boundable if defined?(@_boundable)
  23. value_for_database unless value_before_type_cast.is_a?(StatementCache::Substitute)
  24. @_boundable = true
  25. rescue ::RangeError
  26. @_boundable = false
  27. end
  28. 1 def infinity?
  29. _infinity?(value_before_type_cast) || boundable? && _infinity?(value_for_database)
  30. end
  31. 1 private
  32. 1 def _infinity?(value)
  33. value.respond_to?(:infinite?) && value.infinite?
  34. end
  35. end
  36. end
  37. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/query_methods.rb

54.22% lines covered

391 relevant lines. 212 lines covered and 179 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_record/relation/from_clause"
  3. 1 require "active_record/relation/query_attribute"
  4. 1 require "active_record/relation/where_clause"
  5. 1 require "active_record/relation/where_clause_factory"
  6. 1 require "active_model/forbidden_attributes_protection"
  7. 1 module ActiveRecord
  8. 1 module QueryMethods
  9. 1 extend ActiveSupport::Concern
  10. 1 include ActiveModel::ForbiddenAttributesProtection
  11. # WhereChain objects act as placeholder for queries in which #where does not have any parameter.
  12. # In this case, #where must be chained with #not to return a new relation.
  13. 1 class WhereChain
  14. 1 include ActiveModel::ForbiddenAttributesProtection
  15. 1 def initialize(scope)
  16. @scope = scope
  17. end
  18. # Returns a new relation expressing WHERE + NOT condition according to
  19. # the conditions in the arguments.
  20. #
  21. # #not accepts conditions as a string, array, or hash. See QueryMethods#where for
  22. # more details on each format.
  23. #
  24. # User.where.not("name = 'Jon'")
  25. # # SELECT * FROM users WHERE NOT (name = 'Jon')
  26. #
  27. # User.where.not(["name = ?", "Jon"])
  28. # # SELECT * FROM users WHERE NOT (name = 'Jon')
  29. #
  30. # User.where.not(name: "Jon")
  31. # # SELECT * FROM users WHERE name != 'Jon'
  32. #
  33. # User.where.not(name: nil)
  34. # # SELECT * FROM users WHERE name IS NOT NULL
  35. #
  36. # User.where.not(name: %w(Ko1 Nobu))
  37. # # SELECT * FROM users WHERE name NOT IN ('Ko1', 'Nobu')
  38. #
  39. # User.where.not(name: "Jon", role: "admin")
  40. # # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
  41. 1 def not(opts, *rest)
  42. opts = sanitize_forbidden_attributes(opts)
  43. where_clause = @scope.send(:where_clause_factory).build(opts, rest)
  44. @scope.references!(PredicateBuilder.references(opts)) if Hash === opts
  45. @scope.where_clause += where_clause.invert
  46. @scope
  47. end
  48. end
  49. 1 FROZEN_EMPTY_ARRAY = [].freeze
  50. 1 FROZEN_EMPTY_HASH = {}.freeze
  51. 1 Relation::VALUE_METHODS.each do |name|
  52. 23 method_name = \
  53. case name
  54. 11 when *Relation::MULTI_VALUE_METHODS then "#{name}_values"
  55. 9 when *Relation::SINGLE_VALUE_METHODS then "#{name}_value"
  56. 3 when *Relation::CLAUSE_METHODS then "#{name}_clause"
  57. end
  58. 23 class_eval <<-CODE, __FILE__, __LINE__ + 1
  59. 23 def #{method_name} # def includes_values
  60. 23 get_value(#{name.inspect}) # get_value(:includes)
  61. end # end
  62. 23 def #{method_name}=(value) # def includes_values=(value)
  63. 23 set_value(#{name.inspect}, value) # set_value(:includes, value)
  64. end # end
  65. CODE
  66. end
  67. 1 alias extensions extending_values
  68. # Specify relationships to be included in the result set. For
  69. # example:
  70. #
  71. # users = User.includes(:address)
  72. # users.each do |user|
  73. # user.address.city
  74. # end
  75. #
  76. # allows you to access the +address+ attribute of the +User+ model without
  77. # firing an additional query. This will often result in a
  78. # performance improvement over a simple join.
  79. #
  80. # You can also specify multiple relationships, like this:
  81. #
  82. # users = User.includes(:address, :friends)
  83. #
  84. # Loading nested relationships is possible using a Hash:
  85. #
  86. # users = User.includes(:address, friends: [:address, :followers])
  87. #
  88. # === conditions
  89. #
  90. # If you want to add conditions to your included models you'll have
  91. # to explicitly reference them. For example:
  92. #
  93. # User.includes(:posts).where('posts.name = ?', 'example')
  94. #
  95. # Will throw an error, but this will work:
  96. #
  97. # User.includes(:posts).where('posts.name = ?', 'example').references(:posts)
  98. #
  99. # Note that #includes works with association names while #references needs
  100. # the actual table name.
  101. 1 def includes(*args)
  102. check_if_method_has_arguments!(:includes, args)
  103. spawn.includes!(*args)
  104. end
  105. 1 def includes!(*args) # :nodoc:
  106. args.reject!(&:blank?)
  107. args.flatten!
  108. self.includes_values |= args
  109. self
  110. end
  111. # Forces eager loading by performing a LEFT OUTER JOIN on +args+:
  112. #
  113. # User.eager_load(:posts)
  114. # # SELECT "users"."id" AS t0_r0, "users"."name" AS t0_r1, ...
  115. # # FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" =
  116. # # "users"."id"
  117. 1 def eager_load(*args)
  118. check_if_method_has_arguments!(:eager_load, args)
  119. spawn.eager_load!(*args)
  120. end
  121. 1 def eager_load!(*args) # :nodoc:
  122. self.eager_load_values += args
  123. self
  124. end
  125. # Allows preloading of +args+, in the same way that #includes does:
  126. #
  127. # User.preload(:posts)
  128. # # SELECT "posts".* FROM "posts" WHERE "posts"."user_id" IN (1, 2, 3)
  129. 1 def preload(*args)
  130. check_if_method_has_arguments!(:preload, args)
  131. spawn.preload!(*args)
  132. end
  133. 1 def preload!(*args) # :nodoc:
  134. self.preload_values += args
  135. self
  136. end
  137. # Use to indicate that the given +table_names+ are referenced by an SQL string,
  138. # and should therefore be JOINed in any query rather than loaded separately.
  139. # This method only works in conjunction with #includes.
  140. # See #includes for more details.
  141. #
  142. # User.includes(:posts).where("posts.name = 'foo'")
  143. # # Doesn't JOIN the posts table, resulting in an error.
  144. #
  145. # User.includes(:posts).where("posts.name = 'foo'").references(:posts)
  146. # # Query now knows the string references posts, so adds a JOIN
  147. 1 def references(*table_names)
  148. check_if_method_has_arguments!(:references, table_names)
  149. spawn.references!(*table_names)
  150. end
  151. 1 def references!(*table_names) # :nodoc:
  152. 2 table_names.flatten!
  153. 2 table_names.map!(&:to_s)
  154. 2 self.references_values |= table_names
  155. 2 self
  156. end
  157. # Works in two unique ways.
  158. #
  159. # First: takes a block so it can be used just like <tt>Array#select</tt>.
  160. #
  161. # Model.all.select { |m| m.field == value }
  162. #
  163. # This will build an array of objects from the database for the scope,
  164. # converting them into an array and iterating through them using
  165. # <tt>Array#select</tt>.
  166. #
  167. # Second: Modifies the SELECT statement for the query so that only certain
  168. # fields are retrieved:
  169. #
  170. # Model.select(:field)
  171. # # => [#<Model id: nil, field: "value">]
  172. #
  173. # Although in the above example it looks as though this method returns an
  174. # array, it actually returns a relation object and can have other query
  175. # methods appended to it, such as the other methods in ActiveRecord::QueryMethods.
  176. #
  177. # The argument to the method can also be an array of fields.
  178. #
  179. # Model.select(:field, :other_field, :and_one_more)
  180. # # => [#<Model id: nil, field: "value", other_field: "value", and_one_more: "value">]
  181. #
  182. # You can also use one or more strings, which will be used unchanged as SELECT fields.
  183. #
  184. # Model.select('field AS field_one', 'other_field AS field_two')
  185. # # => [#<Model id: nil, field: "value", other_field: "value">]
  186. #
  187. # If an alias was specified, it will be accessible from the resulting objects:
  188. #
  189. # Model.select('field AS field_one').first.field_one
  190. # # => "value"
  191. #
  192. # Accessing attributes of an object that do not have fields retrieved by a select
  193. # except +id+ will throw ActiveModel::MissingAttributeError:
  194. #
  195. # Model.select(:field).first.other_field
  196. # # => ActiveModel::MissingAttributeError: missing attribute: other_field
  197. 1 def select(*fields)
  198. if block_given?
  199. if fields.any?
  200. raise ArgumentError, "`select' with block doesn't take arguments."
  201. end
  202. return super()
  203. end
  204. raise ArgumentError, "Call `select' with at least one field" if fields.empty?
  205. spawn._select!(*fields)
  206. end
  207. 1 def _select!(*fields) # :nodoc:
  208. 1 fields.flatten!
  209. 1 fields.map! do |field|
  210. 1 klass.attribute_alias?(field) ? klass.attribute_alias(field).to_sym : field
  211. end
  212. 1 self.select_values += fields
  213. 1 self
  214. end
  215. # Allows to specify a group attribute:
  216. #
  217. # User.group(:name)
  218. # # SELECT "users".* FROM "users" GROUP BY name
  219. #
  220. # Returns an array with distinct records based on the +group+ attribute:
  221. #
  222. # User.select([:id, :name])
  223. # # => [#<User id: 1, name: "Oscar">, #<User id: 2, name: "Oscar">, #<User id: 3, name: "Foo">]
  224. #
  225. # User.group(:name)
  226. # # => [#<User id: 3, name: "Foo", ...>, #<User id: 2, name: "Oscar", ...>]
  227. #
  228. # User.group('name AS grouped_name, age')
  229. # # => [#<User id: 3, name: "Foo", age: 21, ...>, #<User id: 2, name: "Oscar", age: 21, ...>, #<User id: 5, name: "Foo", age: 23, ...>]
  230. #
  231. # Passing in an array of attributes to group by is also supported.
  232. #
  233. # User.select([:id, :first_name]).group(:id, :first_name).first(3)
  234. # # => [#<User id: 1, first_name: "Bill">, #<User id: 2, first_name: "Earl">, #<User id: 3, first_name: "Beto">]
  235. 1 def group(*args)
  236. check_if_method_has_arguments!(:group, args)
  237. spawn.group!(*args)
  238. end
  239. 1 def group!(*args) # :nodoc:
  240. args.flatten!
  241. self.group_values += args
  242. self
  243. end
  244. # Allows to specify an order attribute:
  245. #
  246. # User.order(:name)
  247. # # SELECT "users".* FROM "users" ORDER BY "users"."name" ASC
  248. #
  249. # User.order(email: :desc)
  250. # # SELECT "users".* FROM "users" ORDER BY "users"."email" DESC
  251. #
  252. # User.order(:name, email: :desc)
  253. # # SELECT "users".* FROM "users" ORDER BY "users"."name" ASC, "users"."email" DESC
  254. #
  255. # User.order('name')
  256. # # SELECT "users".* FROM "users" ORDER BY name
  257. #
  258. # User.order('name DESC')
  259. # # SELECT "users".* FROM "users" ORDER BY name DESC
  260. #
  261. # User.order('name DESC, email')
  262. # # SELECT "users".* FROM "users" ORDER BY name DESC, email
  263. 1 def order(*args)
  264. 4 check_if_method_has_arguments!(:order, args)
  265. 4 spawn.order!(*args)
  266. end
  267. # Same as #order but operates on relation in-place instead of copying.
  268. 1 def order!(*args) # :nodoc:
  269. 4 preprocess_order_args(args)
  270. 4 self.order_values += args
  271. 4 self
  272. end
  273. # Replaces any existing order defined on the relation with the specified order.
  274. #
  275. # User.order('email DESC').reorder('id ASC') # generated SQL has 'ORDER BY id ASC'
  276. #
  277. # Subsequent calls to order on the same relation will be appended. For example:
  278. #
  279. # User.order('email DESC').reorder('id ASC').order('name ASC')
  280. #
  281. # generates a query with 'ORDER BY id ASC, name ASC'.
  282. 1 def reorder(*args)
  283. check_if_method_has_arguments!(:reorder, args)
  284. spawn.reorder!(*args)
  285. end
  286. # Same as #reorder but operates on relation in-place instead of copying.
  287. 1 def reorder!(*args) # :nodoc:
  288. preprocess_order_args(args)
  289. self.reordering_value = true
  290. self.order_values = args
  291. self
  292. end
  293. 1 VALID_UNSCOPING_VALUES = Set.new([:where, :select, :group, :order, :lock,
  294. :limit, :offset, :joins, :left_outer_joins,
  295. :includes, :from, :readonly, :having])
  296. # Removes an unwanted relation that is already defined on a chain of relations.
  297. # This is useful when passing around chains of relations and would like to
  298. # modify the relations without reconstructing the entire chain.
  299. #
  300. # User.order('email DESC').unscope(:order) == User.all
  301. #
  302. # The method arguments are symbols which correspond to the names of the methods
  303. # which should be unscoped. The valid arguments are given in VALID_UNSCOPING_VALUES.
  304. # The method can also be called with multiple arguments. For example:
  305. #
  306. # User.order('email DESC').select('id').where(name: "John")
  307. # .unscope(:order, :select, :where) == User.all
  308. #
  309. # One can additionally pass a hash as an argument to unscope specific +:where+ values.
  310. # This is done by passing a hash with a single key-value pair. The key should be
  311. # +:where+ and the value should be the where value to unscope. For example:
  312. #
  313. # User.where(name: "John", active: true).unscope(where: :name)
  314. # == User.where(active: true)
  315. #
  316. # This method is similar to #except, but unlike
  317. # #except, it persists across merges:
  318. #
  319. # User.order('email').merge(User.except(:order))
  320. # == User.order('email')
  321. #
  322. # User.order('email').merge(User.unscope(:order))
  323. # == User.all
  324. #
  325. # This means it can be used in association definitions:
  326. #
  327. # has_many :comments, -> { unscope(where: :trashed) }
  328. #
  329. 1 def unscope(*args)
  330. 4 check_if_method_has_arguments!(:unscope, args)
  331. 4 spawn.unscope!(*args)
  332. end
  333. 1 def unscope!(*args) # :nodoc:
  334. 4 args.flatten!
  335. 4 self.unscope_values += args
  336. 4 args.each do |scope|
  337. 4 case scope
  338. when Symbol
  339. 4 scope = :left_outer_joins if scope == :left_joins
  340. 4 if !VALID_UNSCOPING_VALUES.include?(scope)
  341. raise ArgumentError, "Called unscope() with invalid unscoping argument ':#{scope}'. Valid arguments are :#{VALID_UNSCOPING_VALUES.to_a.join(", :")}."
  342. end
  343. 4 set_value(scope, DEFAULT_VALUES[scope])
  344. when Hash
  345. scope.each do |key, target_value|
  346. if key != :where
  347. raise ArgumentError, "Hash arguments in .unscope(*args) must have :where as the key."
  348. end
  349. target_values = Array(target_value).map(&:to_s)
  350. self.where_clause = where_clause.except(*target_values)
  351. end
  352. else
  353. raise ArgumentError, "Unrecognized scoping: #{args.inspect}. Use .unscope(where: :attribute_name) or .unscope(:order), for example."
  354. end
  355. end
  356. 4 self
  357. end
  358. # Performs a joins on +args+. The given symbol(s) should match the name of
  359. # the association(s).
  360. #
  361. # User.joins(:posts)
  362. # # SELECT "users".*
  363. # # FROM "users"
  364. # # INNER JOIN "posts" ON "posts"."user_id" = "users"."id"
  365. #
  366. # Multiple joins:
  367. #
  368. # User.joins(:posts, :account)
  369. # # SELECT "users".*
  370. # # FROM "users"
  371. # # INNER JOIN "posts" ON "posts"."user_id" = "users"."id"
  372. # # INNER JOIN "accounts" ON "accounts"."id" = "users"."account_id"
  373. #
  374. # Nested joins:
  375. #
  376. # User.joins(posts: [:comments])
  377. # # SELECT "users".*
  378. # # FROM "users"
  379. # # INNER JOIN "posts" ON "posts"."user_id" = "users"."id"
  380. # # INNER JOIN "comments" "comments_posts"
  381. # # ON "comments_posts"."post_id" = "posts"."id"
  382. #
  383. # You can use strings in order to customize your joins:
  384. #
  385. # User.joins("LEFT JOIN bookmarks ON bookmarks.bookmarkable_type = 'Post' AND bookmarks.user_id = users.id")
  386. # # SELECT "users".* FROM "users" LEFT JOIN bookmarks ON bookmarks.bookmarkable_type = 'Post' AND bookmarks.user_id = users.id
  387. 1 def joins(*args)
  388. check_if_method_has_arguments!(:joins, args)
  389. spawn.joins!(*args)
  390. end
  391. 1 def joins!(*args) # :nodoc:
  392. args.compact!
  393. args.flatten!
  394. self.joins_values += args
  395. self
  396. end
  397. # Performs a left outer joins on +args+:
  398. #
  399. # User.left_outer_joins(:posts)
  400. # => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id"
  401. #
  402. 1 def left_outer_joins(*args)
  403. check_if_method_has_arguments!(__callee__, args)
  404. spawn.left_outer_joins!(*args)
  405. end
  406. 1 alias :left_joins :left_outer_joins
  407. 1 def left_outer_joins!(*args) # :nodoc:
  408. args.compact!
  409. args.flatten!
  410. self.left_outer_joins_values += args
  411. self
  412. end
  413. # Returns a new relation, which is the result of filtering the current relation
  414. # according to the conditions in the arguments.
  415. #
  416. # #where accepts conditions in one of several formats. In the examples below, the resulting
  417. # SQL is given as an illustration; the actual query generated may be different depending
  418. # on the database adapter.
  419. #
  420. # === string
  421. #
  422. # A single string, without additional arguments, is passed to the query
  423. # constructor as an SQL fragment, and used in the where clause of the query.
  424. #
  425. # Client.where("orders_count = '2'")
  426. # # SELECT * from clients where orders_count = '2';
  427. #
  428. # Note that building your own string from user input may expose your application
  429. # to injection attacks if not done properly. As an alternative, it is recommended
  430. # to use one of the following methods.
  431. #
  432. # === array
  433. #
  434. # If an array is passed, then the first element of the array is treated as a template, and
  435. # the remaining elements are inserted into the template to generate the condition.
  436. # Active Record takes care of building the query to avoid injection attacks, and will
  437. # convert from the ruby type to the database type where needed. Elements are inserted
  438. # into the string in the order in which they appear.
  439. #
  440. # User.where(["name = ? and email = ?", "Joe", "joe@example.com"])
  441. # # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com';
  442. #
  443. # Alternatively, you can use named placeholders in the template, and pass a hash as the
  444. # second element of the array. The names in the template are replaced with the corresponding
  445. # values from the hash.
  446. #
  447. # User.where(["name = :name and email = :email", { name: "Joe", email: "joe@example.com" }])
  448. # # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com';
  449. #
  450. # This can make for more readable code in complex queries.
  451. #
  452. # Lastly, you can use sprintf-style % escapes in the template. This works slightly differently
  453. # than the previous methods; you are responsible for ensuring that the values in the template
  454. # are properly quoted. The values are passed to the connector for quoting, but the caller
  455. # is responsible for ensuring they are enclosed in quotes in the resulting SQL. After quoting,
  456. # the values are inserted using the same escapes as the Ruby core method +Kernel::sprintf+.
  457. #
  458. # User.where(["name = '%s' and email = '%s'", "Joe", "joe@example.com"])
  459. # # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com';
  460. #
  461. # If #where is called with multiple arguments, these are treated as if they were passed as
  462. # the elements of a single array.
  463. #
  464. # User.where("name = :name and email = :email", { name: "Joe", email: "joe@example.com" })
  465. # # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com';
  466. #
  467. # When using strings to specify conditions, you can use any operator available from
  468. # the database. While this provides the most flexibility, you can also unintentionally introduce
  469. # dependencies on the underlying database. If your code is intended for general consumption,
  470. # test with multiple database backends.
  471. #
  472. # === hash
  473. #
  474. # #where will also accept a hash condition, in which the keys are fields and the values
  475. # are values to be searched for.
  476. #
  477. # Fields can be symbols or strings. Values can be single values, arrays, or ranges.
  478. #
  479. # User.where({ name: "Joe", email: "joe@example.com" })
  480. # # SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com'
  481. #
  482. # User.where({ name: ["Alice", "Bob"]})
  483. # # SELECT * FROM users WHERE name IN ('Alice', 'Bob')
  484. #
  485. # User.where({ created_at: (Time.now.midnight - 1.day)..Time.now.midnight })
  486. # # SELECT * FROM users WHERE (created_at BETWEEN '2012-06-09 07:00:00.000000' AND '2012-06-10 07:00:00.000000')
  487. #
  488. # In the case of a belongs_to relationship, an association key can be used
  489. # to specify the model if an ActiveRecord object is used as the value.
  490. #
  491. # author = Author.find(1)
  492. #
  493. # # The following queries will be equivalent:
  494. # Post.where(author: author)
  495. # Post.where(author_id: author)
  496. #
  497. # This also works with polymorphic belongs_to relationships:
  498. #
  499. # treasure = Treasure.create(name: 'gold coins')
  500. # treasure.price_estimates << PriceEstimate.create(price: 125)
  501. #
  502. # # The following queries will be equivalent:
  503. # PriceEstimate.where(estimate_of: treasure)
  504. # PriceEstimate.where(estimate_of_type: 'Treasure', estimate_of_id: treasure)
  505. #
  506. # === Joins
  507. #
  508. # If the relation is the result of a join, you may create a condition which uses any of the
  509. # tables in the join. For string and array conditions, use the table name in the condition.
  510. #
  511. # User.joins(:posts).where("posts.created_at < ?", Time.now)
  512. #
  513. # For hash conditions, you can either use the table name in the key, or use a sub-hash.
  514. #
  515. # User.joins(:posts).where({ "posts.published" => true })
  516. # User.joins(:posts).where({ posts: { published: true } })
  517. #
  518. # === no argument
  519. #
  520. # If no argument is passed, #where returns a new instance of WhereChain, that
  521. # can be chained with #not to return a new relation that negates the where clause.
  522. #
  523. # User.where.not(name: "Jon")
  524. # # SELECT * FROM users WHERE name != 'Jon'
  525. #
  526. # See WhereChain for more details on #not.
  527. #
  528. # === blank condition
  529. #
  530. # If the condition is any blank-ish object, then #where is a no-op and returns
  531. # the current relation.
  532. 1 def where(opts = :chain, *rest)
  533. 2 if :chain == opts
  534. WhereChain.new(spawn)
  535. 1 elsif opts.blank?
  536. self
  537. else
  538. 2 spawn.where!(opts, *rest)
  539. end
  540. end
  541. 1 def where!(opts, *rest) # :nodoc:
  542. 3 opts = sanitize_forbidden_attributes(opts)
  543. 3 references!(PredicateBuilder.references(opts)) if Hash === opts
  544. 3 self.where_clause += where_clause_factory.build(opts, rest)
  545. 3 self
  546. end
  547. # Allows you to change a previously set where condition for a given attribute, instead of appending to that condition.
  548. #
  549. # Post.where(trashed: true).where(trashed: false)
  550. # # WHERE `trashed` = 1 AND `trashed` = 0
  551. #
  552. # Post.where(trashed: true).rewhere(trashed: false)
  553. # # WHERE `trashed` = 0
  554. #
  555. # Post.where(active: true).where(trashed: true).rewhere(trashed: false)
  556. # # WHERE `active` = 1 AND `trashed` = 0
  557. #
  558. # This is short-hand for <tt>unscope(where: conditions.keys).where(conditions)</tt>.
  559. # Note that unlike reorder, we're only unscoping the named conditions -- not the entire where statement.
  560. 1 def rewhere(conditions)
  561. unscope(where: conditions.keys).where(conditions)
  562. end
  563. # Returns a new relation, which is the logical union of this relation and the one passed as an
  564. # argument.
  565. #
  566. # The two relations must be structurally compatible: they must be scoping the same model, and
  567. # they must differ only by #where (if no #group has been defined) or #having (if a #group is
  568. # present). Neither relation may have a #limit, #offset, or #distinct set.
  569. #
  570. # Post.where("id = 1").or(Post.where("author_id = 3"))
  571. # # SELECT `posts`.* FROM `posts` WHERE ((id = 1) OR (author_id = 3))
  572. #
  573. 1 def or(other)
  574. unless other.is_a? Relation
  575. raise ArgumentError, "You have passed #{other.class.name} object to #or. Pass an ActiveRecord::Relation object instead."
  576. end
  577. spawn.or!(other)
  578. end
  579. 1 def or!(other) # :nodoc:
  580. incompatible_values = structurally_incompatible_values_for_or(other)
  581. unless incompatible_values.empty?
  582. raise ArgumentError, "Relation passed to #or must be structurally compatible. Incompatible values: #{incompatible_values}"
  583. end
  584. self.where_clause = self.where_clause.or(other.where_clause)
  585. self.having_clause = having_clause.or(other.having_clause)
  586. self.references_values += other.references_values
  587. self
  588. end
  589. # Allows to specify a HAVING clause. Note that you can't use HAVING
  590. # without also specifying a GROUP clause.
  591. #
  592. # Order.having('SUM(price) > 30').group('user_id')
  593. 1 def having(opts, *rest)
  594. opts.blank? ? self : spawn.having!(opts, *rest)
  595. end
  596. 1 def having!(opts, *rest) # :nodoc:
  597. opts = sanitize_forbidden_attributes(opts)
  598. references!(PredicateBuilder.references(opts)) if Hash === opts
  599. self.having_clause += having_clause_factory.build(opts, rest)
  600. self
  601. end
  602. # Specifies a limit for the number of records to retrieve.
  603. #
  604. # User.limit(10) # generated SQL has 'LIMIT 10'
  605. #
  606. # User.limit(10).limit(20) # generated SQL has 'LIMIT 20'
  607. 1 def limit(value)
  608. 8 spawn.limit!(value)
  609. end
  610. 1 def limit!(value) # :nodoc:
  611. 9 self.limit_value = value
  612. 9 self
  613. end
  614. # Specifies the number of rows to skip before returning rows.
  615. #
  616. # User.offset(10) # generated SQL has "OFFSET 10"
  617. #
  618. # Should be used with order.
  619. #
  620. # User.offset(10).order("name ASC")
  621. 1 def offset(value)
  622. spawn.offset!(value)
  623. end
  624. 1 def offset!(value) # :nodoc:
  625. self.offset_value = value
  626. self
  627. end
  628. # Specifies locking settings (default to +true+). For more information
  629. # on locking, please see ActiveRecord::Locking.
  630. 1 def lock(locks = true)
  631. spawn.lock!(locks)
  632. end
  633. 1 def lock!(locks = true) # :nodoc:
  634. case locks
  635. when String, TrueClass, NilClass
  636. self.lock_value = locks || true
  637. else
  638. self.lock_value = false
  639. end
  640. self
  641. end
  642. # Returns a chainable relation with zero records.
  643. #
  644. # The returned relation implements the Null Object pattern. It is an
  645. # object with defined null behavior and always returns an empty array of
  646. # records without querying the database.
  647. #
  648. # Any subsequent condition chained to the returned relation will continue
  649. # generating an empty relation and will not fire any query to the database.
  650. #
  651. # Used in cases where a method or scope could return zero records but the
  652. # result needs to be chainable.
  653. #
  654. # For example:
  655. #
  656. # @posts = current_user.visible_posts.where(name: params[:name])
  657. # # the visible_posts method is expected to return a chainable Relation
  658. #
  659. # def visible_posts
  660. # case role
  661. # when 'Country Manager'
  662. # Post.where(country: country)
  663. # when 'Reviewer'
  664. # Post.published
  665. # when 'Bad User'
  666. # Post.none # It can't be chained if [] is returned.
  667. # end
  668. # end
  669. #
  670. 1 def none
  671. spawn.none!
  672. end
  673. 1 def none! # :nodoc:
  674. where!("1=0").extending!(NullRelation)
  675. end
  676. # Sets readonly attributes for the returned relation. If value is
  677. # true (default), attempting to update a record will result in an error.
  678. #
  679. # users = User.readonly
  680. # users.first.save
  681. # => ActiveRecord::ReadOnlyRecord: User is marked as readonly
  682. 1 def readonly(value = true)
  683. spawn.readonly!(value)
  684. end
  685. 1 def readonly!(value = true) # :nodoc:
  686. self.readonly_value = value
  687. self
  688. end
  689. # Sets attributes to be used when creating new records from a
  690. # relation object.
  691. #
  692. # users = User.where(name: 'Oscar')
  693. # users.new.name # => 'Oscar'
  694. #
  695. # users = users.create_with(name: 'DHH')
  696. # users.new.name # => 'DHH'
  697. #
  698. # You can pass +nil+ to #create_with to reset attributes:
  699. #
  700. # users = users.create_with(nil)
  701. # users.new.name # => 'Oscar'
  702. 1 def create_with(value)
  703. spawn.create_with!(value)
  704. end
  705. 1 def create_with!(value) # :nodoc:
  706. if value
  707. value = sanitize_forbidden_attributes(value)
  708. self.create_with_value = create_with_value.merge(value)
  709. else
  710. self.create_with_value = FROZEN_EMPTY_HASH
  711. end
  712. self
  713. end
  714. # Specifies table from which the records will be fetched. For example:
  715. #
  716. # Topic.select('title').from('posts')
  717. # # SELECT title FROM posts
  718. #
  719. # Can accept other relation objects. For example:
  720. #
  721. # Topic.select('title').from(Topic.approved)
  722. # # SELECT title FROM (SELECT * FROM topics WHERE approved = 't') subquery
  723. #
  724. # Topic.select('a.title').from(Topic.approved, :a)
  725. # # SELECT a.title FROM (SELECT * FROM topics WHERE approved = 't') a
  726. #
  727. 1 def from(value, subquery_name = nil)
  728. spawn.from!(value, subquery_name)
  729. end
  730. 1 def from!(value, subquery_name = nil) # :nodoc:
  731. self.from_clause = Relation::FromClause.new(value, subquery_name)
  732. self
  733. end
  734. # Specifies whether the records should be unique or not. For example:
  735. #
  736. # User.select(:name)
  737. # # Might return two records with the same name
  738. #
  739. # User.select(:name).distinct
  740. # # Returns 1 record per distinct name
  741. #
  742. # User.select(:name).distinct.distinct(false)
  743. # # You can also remove the uniqueness
  744. 1 def distinct(value = true)
  745. spawn.distinct!(value)
  746. end
  747. # Like #distinct, but modifies relation in place.
  748. 1 def distinct!(value = true) # :nodoc:
  749. 4 self.distinct_value = value
  750. 4 self
  751. end
  752. # Used to extend a scope with additional methods, either through
  753. # a module or through a block provided.
  754. #
  755. # The object returned is a relation, which can be further extended.
  756. #
  757. # === Using a module
  758. #
  759. # module Pagination
  760. # def page(number)
  761. # # pagination code goes here
  762. # end
  763. # end
  764. #
  765. # scope = Model.all.extending(Pagination)
  766. # scope.page(params[:page])
  767. #
  768. # You can also pass a list of modules:
  769. #
  770. # scope = Model.all.extending(Pagination, SomethingElse)
  771. #
  772. # === Using a block
  773. #
  774. # scope = Model.all.extending do
  775. # def page(number)
  776. # # pagination code goes here
  777. # end
  778. # end
  779. # scope.page(params[:page])
  780. #
  781. # You can also use a block and a module list:
  782. #
  783. # scope = Model.all.extending(Pagination) do
  784. # def per_page(number)
  785. # # pagination code goes here
  786. # end
  787. # end
  788. 1 def extending(*modules, &block)
  789. if modules.any? || block
  790. spawn.extending!(*modules, &block)
  791. else
  792. self
  793. end
  794. end
  795. 1 def extending!(*modules, &block) # :nodoc:
  796. modules << Module.new(&block) if block
  797. modules.flatten!
  798. self.extending_values += modules
  799. extend(*extending_values) if extending_values.any?
  800. self
  801. end
  802. # Reverse the existing order clause on the relation.
  803. #
  804. # User.order('name ASC').reverse_order # generated SQL has 'ORDER BY name DESC'
  805. 1 def reverse_order
  806. spawn.reverse_order!
  807. end
  808. 1 def reverse_order! # :nodoc:
  809. 3 orders = order_values.uniq
  810. 3 orders.reject!(&:blank?)
  811. 3 self.order_values = reverse_sql_order(orders)
  812. 3 self
  813. end
  814. 1 def skip_query_cache!(value = true) # :nodoc:
  815. self.skip_query_cache_value = value
  816. self
  817. end
  818. # Returns the Arel object associated with the relation.
  819. 1 def arel(aliases = nil) # :nodoc:
  820. 13 @arel ||= build_arel(aliases)
  821. end
  822. # Returns a relation value with a given name
  823. 1 def get_value(name) # :nodoc:
  824. 286 @values.fetch(name, DEFAULT_VALUES[name])
  825. end
  826. 1 protected
  827. # Sets the relation value with the given name
  828. 1 def set_value(name, value) # :nodoc:
  829. 39 assert_mutability!
  830. 39 @values[name] = value
  831. end
  832. 1 private
  833. 1 def assert_mutability!
  834. 39 raise ImmutableRelation if @loaded
  835. 39 raise ImmutableRelation if defined?(@arel) && @arel
  836. end
  837. 1 def build_arel(aliases)
  838. 12 arel = Arel::SelectManager.new(table)
  839. 12 aliases = build_joins(arel, joins_values.flatten, aliases) unless joins_values.empty?
  840. 12 build_left_outer_joins(arel, left_outer_joins_values.flatten, aliases) unless left_outer_joins_values.empty?
  841. 12 arel.where(where_clause.ast) unless where_clause.empty?
  842. 12 arel.having(having_clause.ast) unless having_clause.empty?
  843. 12 if limit_value
  844. 12 limit_attribute = ActiveModel::Attribute.with_cast_value(
  845. "LIMIT".freeze,
  846. 5 connection.sanitize_limit(limit_value),
  847. 5 Type.default_value,
  848. )
  849. 6 arel.take(Arel::Nodes::BindParam.new(limit_attribute))
  850. end
  851. 12 if offset_value
  852. offset_attribute = ActiveModel::Attribute.with_cast_value(
  853. "OFFSET".freeze,
  854. offset_value.to_i,
  855. Type.default_value,
  856. )
  857. arel.skip(Arel::Nodes::BindParam.new(offset_attribute))
  858. end
  859. 12 arel.group(*arel_columns(group_values.uniq.reject(&:blank?))) unless group_values.empty?
  860. 12 build_order(arel)
  861. 12 build_select(arel)
  862. 12 arel.distinct(distinct_value)
  863. 12 arel.from(build_from) unless from_clause.empty?
  864. 12 arel.lock(lock_value) if lock_value
  865. 12 arel
  866. end
  867. 1 def build_from
  868. opts = from_clause.value
  869. name = from_clause.name
  870. case opts
  871. when Relation
  872. if opts.eager_loading?
  873. opts = opts.send(:apply_join_dependency)
  874. end
  875. name ||= "subquery"
  876. opts.arel.as(name.to_s)
  877. else
  878. opts
  879. end
  880. end
  881. 1 def build_left_outer_joins(manager, outer_joins, aliases)
  882. buckets = outer_joins.group_by do |join|
  883. case join
  884. when Hash, Symbol, Array
  885. :association_join
  886. when ActiveRecord::Associations::JoinDependency
  887. :stashed_join
  888. else
  889. raise ArgumentError, "only Hash, Symbol and Array are allowed"
  890. end
  891. end
  892. build_join_query(manager, buckets, Arel::Nodes::OuterJoin, aliases)
  893. end
  894. 1 def build_joins(manager, joins, aliases)
  895. buckets = joins.group_by do |join|
  896. case join
  897. when String
  898. :string_join
  899. when Hash, Symbol, Array
  900. :association_join
  901. when ActiveRecord::Associations::JoinDependency
  902. :stashed_join
  903. when Arel::Nodes::Join
  904. :join_node
  905. else
  906. raise "unknown class: %s" % join.class.name
  907. end
  908. end
  909. build_join_query(manager, buckets, Arel::Nodes::InnerJoin, aliases)
  910. end
  911. 1 def build_join_query(manager, buckets, join_type, aliases)
  912. buckets.default = []
  913. association_joins = buckets[:association_join]
  914. stashed_joins = buckets[:stashed_join]
  915. join_nodes = buckets[:join_node].uniq
  916. string_joins = buckets[:string_join].map(&:strip).uniq
  917. join_list = join_nodes + convert_join_strings_to_ast(string_joins)
  918. alias_tracker = alias_tracker(join_list, aliases)
  919. join_dependency = ActiveRecord::Associations::JoinDependency.new(
  920. klass, table, association_joins
  921. )
  922. joins = join_dependency.join_constraints(stashed_joins, join_type, alias_tracker)
  923. joins.each { |join| manager.from(join) }
  924. manager.join_sources.concat(join_list)
  925. alias_tracker.aliases
  926. end
  927. 1 def convert_join_strings_to_ast(joins)
  928. joins
  929. .flatten
  930. .reject(&:blank?)
  931. .map { |join| table.create_string_join(Arel.sql(join)) }
  932. end
  933. 1 def build_select(arel)
  934. 12 if select_values.any?
  935. 6 arel.project(*arel_columns(select_values.uniq))
  936. 5 elsif klass.ignored_columns.any?
  937. arel.project(*klass.column_names.map { |field| arel_attribute(field) })
  938. else
  939. 6 arel.project(table[Arel.star])
  940. end
  941. end
  942. 1 def arel_columns(columns)
  943. 6 columns.flat_map do |field|
  944. 6 case field
  945. when Symbol
  946. 1 field = field.to_s
  947. 1 arel_column(field) { connection.quote_table_name(field) }
  948. when String
  949. 2 arel_column(field) { field }
  950. when Proc
  951. field.call
  952. else
  953. 4 field
  954. end
  955. end
  956. end
  957. 1 def arel_column(field)
  958. 3 field = klass.attribute_alias(field) if klass.attribute_alias?(field)
  959. 3 from = from_clause.name || from_clause.value
  960. 3 if klass.columns_hash.key?(field) && (!from || table_name_matches?(from))
  961. 2 arel_attribute(field)
  962. else
  963. 1 yield
  964. end
  965. end
  966. 1 def table_name_matches?(from)
  967. /(?:\A|(?<!FROM)\s)(?:\b#{table.name}\b|#{connection.quote_table_name(table.name)})(?!\.)/i.match?(from.to_s)
  968. end
  969. 1 def reverse_sql_order(order_query)
  970. 3 if order_query.empty?
  971. return [arel_attribute(primary_key).desc] if primary_key
  972. raise IrreversibleOrderError,
  973. "Relation has no current order and table has no primary key to be used as default order"
  974. end
  975. 3 order_query.flat_map do |o|
  976. 3 case o
  977. when Arel::Attribute
  978. o.desc
  979. when Arel::Nodes::Ordering
  980. 3 o.reverse
  981. when String
  982. if does_not_support_reverse?(o)
  983. raise IrreversibleOrderError, "Order #{o.inspect} can not be reversed automatically"
  984. end
  985. o.split(",").map! do |s|
  986. s.strip!
  987. s.gsub!(/\sasc\Z/i, " DESC") || s.gsub!(/\sdesc\Z/i, " ASC") || (s << " DESC")
  988. end
  989. else
  990. o
  991. end
  992. end
  993. end
  994. 1 def does_not_support_reverse?(order)
  995. # Account for String subclasses like Arel::Nodes::SqlLiteral that
  996. # override methods like #count.
  997. order = String.new(order) unless order.instance_of?(String)
  998. # Uses SQL function with multiple arguments.
  999. (order.include?(",") && order.split(",").find { |section| section.count("(") != section.count(")") }) ||
  1000. # Uses "nulls first" like construction.
  1001. /nulls (first|last)\Z/i.match?(order)
  1002. end
  1003. 1 def build_order(arel)
  1004. 12 orders = order_values.uniq
  1005. 12 orders.reject!(&:blank?)
  1006. 12 arel.order(*orders) unless orders.empty?
  1007. end
  1008. 1 VALID_DIRECTIONS = [:asc, :desc, :ASC, :DESC,
  1009. "asc", "desc", "ASC", "DESC"].to_set # :nodoc:
  1010. 1 def validate_order_args(args)
  1011. 4 args.each do |arg|
  1012. 4 next unless arg.is_a?(Hash)
  1013. arg.each do |_key, value|
  1014. unless VALID_DIRECTIONS.include?(value)
  1015. raise ArgumentError,
  1016. "Direction \"#{value}\" is invalid. Valid directions are: #{VALID_DIRECTIONS.to_a.inspect}"
  1017. end
  1018. end
  1019. end
  1020. end
  1021. 1 def preprocess_order_args(order_args)
  1022. 4 order_args.map! do |arg|
  1023. 4 klass.sanitize_sql_for_order(arg)
  1024. end
  1025. 4 order_args.flatten!
  1026. 8 @klass.enforce_raw_sql_whitelist(
  1027. 8 order_args.flat_map { |a| a.is_a?(Hash) ? a.keys : a },
  1028. whitelist: AttributeMethods::ClassMethods::COLUMN_NAME_ORDER_WHITELIST
  1029. )
  1030. 4 validate_order_args(order_args)
  1031. 4 references = order_args.grep(String)
  1032. 4 references.map! { |arg| arg =~ /^\W?(\w+)\W?\./ && $1 }.compact!
  1033. 4 references!(references) if references.any?
  1034. # if a symbol is given we prepend the quoted table name
  1035. 4 order_args.map! do |arg|
  1036. 4 case arg
  1037. when Symbol
  1038. 1 arg = arg.to_s
  1039. 1 arel_column(arg) {
  1040. Arel.sql(connection.quote_table_name(arg))
  1041. }.asc
  1042. when Hash
  1043. arg.map { |field, dir|
  1044. case field
  1045. when Arel::Nodes::SqlLiteral
  1046. field.send(dir.downcase)
  1047. else
  1048. field = field.to_s
  1049. arel_column(field) {
  1050. Arel.sql(connection.quote_table_name(field))
  1051. }.send(dir.downcase)
  1052. end
  1053. }
  1054. else
  1055. 3 arg
  1056. end
  1057. end.flatten!
  1058. end
  1059. # Checks to make sure that the arguments are not blank. Note that if some
  1060. # blank-like object were initially passed into the query method, then this
  1061. # method will not raise an error.
  1062. #
  1063. # Example:
  1064. #
  1065. # Post.references() # raises an error
  1066. # Post.references([]) # does not raise an error
  1067. #
  1068. # This particular method should be called with a method_name and the args
  1069. # passed into that method as an input. For example:
  1070. #
  1071. # def references(*args)
  1072. # check_if_method_has_arguments!("references", args)
  1073. # ...
  1074. # end
  1075. 1 def check_if_method_has_arguments!(method_name, args)
  1076. 8 if args.blank?
  1077. raise ArgumentError, "The method .#{method_name}() must contain arguments."
  1078. end
  1079. end
  1080. 1 STRUCTURAL_OR_METHODS = Relation::VALUE_METHODS - [:extending, :where, :having, :unscope, :references]
  1081. 1 def structurally_incompatible_values_for_or(other)
  1082. STRUCTURAL_OR_METHODS.reject do |method|
  1083. get_value(method) == other.get_value(method)
  1084. end
  1085. end
  1086. 1 def where_clause_factory
  1087. 3 @where_clause_factory ||= Relation::WhereClauseFactory.new(klass, predicate_builder)
  1088. end
  1089. 1 alias having_clause_factory where_clause_factory
  1090. 1 DEFAULT_VALUES = {
  1091. create_with: FROZEN_EMPTY_HASH,
  1092. where: Relation::WhereClause.empty,
  1093. having: Relation::WhereClause.empty,
  1094. from: Relation::FromClause.empty
  1095. }
  1096. 1 Relation::MULTI_VALUE_METHODS.each do |value|
  1097. 11 DEFAULT_VALUES[value] ||= FROZEN_EMPTY_ARRAY
  1098. end
  1099. end
  1100. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/spawn_methods.rb

62.96% lines covered

27 relevant lines. 17 lines covered and 10 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/except"
  3. 1 require "active_support/core_ext/hash/slice"
  4. 1 require "active_record/relation/merger"
  5. 1 module ActiveRecord
  6. 1 module SpawnMethods
  7. # This is overridden by Associations::CollectionProxy
  8. 1 def spawn #:nodoc:
  9. 19 @delegate_to_klass ? klass.all : clone
  10. end
  11. # Merges in the conditions from <tt>other</tt>, if <tt>other</tt> is an ActiveRecord::Relation.
  12. # Returns an array representing the intersection of the resulting records with <tt>other</tt>, if <tt>other</tt> is an array.
  13. #
  14. # Post.where(published: true).joins(:comments).merge( Comment.where(spam: false) )
  15. # # Performs a single join query with both where conditions.
  16. #
  17. # recent_posts = Post.order('created_at DESC').first(5)
  18. # Post.where(published: true).merge(recent_posts)
  19. # # Returns the intersection of all published posts with the 5 most recently created posts.
  20. # # (This is just an example. You'd probably want to do this with a single query!)
  21. #
  22. # Procs will be evaluated by merge:
  23. #
  24. # Post.where(published: true).merge(-> { joins(:comments) })
  25. # # => Post.where(published: true).joins(:comments)
  26. #
  27. # This is mainly intended for sharing common conditions between multiple associations.
  28. 1 def merge(other)
  29. if other.is_a?(Array)
  30. records & other
  31. elsif other
  32. spawn.merge!(other)
  33. else
  34. raise ArgumentError, "invalid argument: #{other.inspect}."
  35. end
  36. end
  37. 1 def merge!(other) # :nodoc:
  38. if other.is_a?(Hash)
  39. Relation::HashMerger.new(self, other).merge
  40. elsif other.is_a?(Relation)
  41. Relation::Merger.new(self, other).merge
  42. elsif other.respond_to?(:to_proc)
  43. instance_exec(&other)
  44. else
  45. raise ArgumentError, "#{other.inspect} is not an ActiveRecord::Relation"
  46. end
  47. end
  48. # Removes from the query the condition(s) specified in +skips+.
  49. #
  50. # Post.order('id asc').except(:order) # discards the order condition
  51. # Post.where('id > 10').order('id asc').except(:where) # discards the where condition but keeps the order
  52. 1 def except(*skips)
  53. 1 relation_with values.except(*skips)
  54. end
  55. # Removes any condition from the query other than the one(s) specified in +onlies+.
  56. #
  57. # Post.order('id asc').only(:where) # discards the order condition
  58. # Post.order('id asc').only(:where, :order) # uses the specified order
  59. 1 def only(*onlies)
  60. relation_with values.slice(*onlies)
  61. end
  62. 1 private
  63. 1 def relation_with(values)
  64. 1 result = Relation.create(klass, values: values)
  65. 1 result.extend(*extending_values) if extending_values.any?
  66. 1 result
  67. end
  68. end
  69. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause.rb

41.94% lines covered

93 relevant lines. 39 lines covered and 54 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class Relation
  4. 1 class WhereClause # :nodoc:
  5. 1 delegate :any?, :empty?, to: :predicates
  6. 1 def initialize(predicates)
  7. 7 @predicates = predicates
  8. end
  9. 1 def +(other)
  10. 6 WhereClause.new(
  11. 2 predicates + other.predicates,
  12. )
  13. end
  14. 1 def -(other)
  15. WhereClause.new(
  16. predicates - other.predicates,
  17. )
  18. end
  19. 1 def merge(other)
  20. WhereClause.new(
  21. predicates_unreferenced_by(other) + other.predicates,
  22. )
  23. end
  24. 1 def except(*columns)
  25. WhereClause.new(except_predicates(columns))
  26. end
  27. 1 def or(other)
  28. left = self - other
  29. common = self - left
  30. right = other - common
  31. if left.empty? || right.empty?
  32. common
  33. else
  34. or_clause = WhereClause.new(
  35. [left.ast.or(right.ast)],
  36. )
  37. common + or_clause
  38. end
  39. end
  40. 1 def to_h(table_name = nil)
  41. equalities = equalities(predicates)
  42. if table_name
  43. equalities = equalities.select do |node|
  44. node.left.relation.name == table_name
  45. end
  46. end
  47. equalities.map { |node|
  48. name = node.left.name.to_s
  49. value = extract_node_value(node.right)
  50. [name, value]
  51. }.to_h
  52. end
  53. 1 def ast
  54. 3 Arel::Nodes::And.new(predicates_with_wrapped_sql_literals)
  55. end
  56. 1 def ==(other)
  57. other.is_a?(WhereClause) &&
  58. predicates == other.predicates
  59. end
  60. 1 def invert
  61. WhereClause.new(inverted_predicates)
  62. end
  63. 1 def self.empty
  64. 2 @empty ||= new([])
  65. end
  66. 1 protected
  67. 1 attr_reader :predicates
  68. 1 def referenced_columns
  69. @referenced_columns ||= begin
  70. equality_nodes = predicates.select { |n| equality_node?(n) }
  71. Set.new(equality_nodes, &:left)
  72. end
  73. end
  74. 1 private
  75. 1 def equalities(predicates)
  76. equalities = []
  77. predicates.each do |node|
  78. case node
  79. when Arel::Nodes::Equality
  80. equalities << node
  81. when Arel::Nodes::And
  82. equalities.concat equalities(node.children)
  83. end
  84. end
  85. equalities
  86. end
  87. 1 def predicates_unreferenced_by(other)
  88. predicates.reject do |n|
  89. equality_node?(n) && other.referenced_columns.include?(n.left)
  90. end
  91. end
  92. 1 def equality_node?(node)
  93. node.respond_to?(:operator) && node.operator == :==
  94. end
  95. 1 def inverted_predicates
  96. predicates.map { |node| invert_predicate(node) }
  97. end
  98. 1 def invert_predicate(node)
  99. case node
  100. when NilClass
  101. raise ArgumentError, "Invalid argument for .where.not(), got nil."
  102. when Arel::Nodes::In
  103. Arel::Nodes::NotIn.new(node.left, node.right)
  104. when Arel::Nodes::Equality
  105. Arel::Nodes::NotEqual.new(node.left, node.right)
  106. when String
  107. Arel::Nodes::Not.new(Arel::Nodes::SqlLiteral.new(node))
  108. else
  109. Arel::Nodes::Not.new(node)
  110. end
  111. end
  112. 1 def except_predicates(columns)
  113. predicates.reject do |node|
  114. case node
  115. when Arel::Nodes::Between, Arel::Nodes::In, Arel::Nodes::NotIn, Arel::Nodes::Equality, Arel::Nodes::NotEqual, Arel::Nodes::LessThan, Arel::Nodes::LessThanOrEqual, Arel::Nodes::GreaterThan, Arel::Nodes::GreaterThanOrEqual
  116. subrelation = (node.left.kind_of?(Arel::Attributes::Attribute) ? node.left : node.right)
  117. columns.include?(subrelation.name.to_s)
  118. end
  119. end
  120. end
  121. 1 def predicates_with_wrapped_sql_literals
  122. 3 non_empty_predicates.map do |node|
  123. 3 case node
  124. when Arel::Nodes::SqlLiteral, ::String
  125. wrap_sql_literal(node)
  126. 3 else node
  127. end
  128. end
  129. end
  130. 1 ARRAY_WITH_EMPTY_STRING = [""]
  131. 1 def non_empty_predicates
  132. 3 predicates - ARRAY_WITH_EMPTY_STRING
  133. end
  134. 1 def wrap_sql_literal(node)
  135. if ::String === node
  136. node = Arel.sql(node)
  137. end
  138. Arel::Nodes::Grouping.new(node)
  139. end
  140. 1 def extract_node_value(node)
  141. case node
  142. when Array
  143. node.map { |v| extract_node_value(v) }
  144. when Arel::Nodes::Casted, Arel::Nodes::Quoted
  145. node.val
  146. when Arel::Nodes::BindParam
  147. value = node.value
  148. if value.respond_to?(:value_before_type_cast)
  149. value.value_before_type_cast
  150. else
  151. value
  152. end
  153. end
  154. end
  155. end
  156. end
  157. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/relation/where_clause_factory.rb

88.24% lines covered

17 relevant lines. 15 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class Relation
  4. 1 class WhereClauseFactory # :nodoc:
  5. 1 def initialize(klass, predicate_builder)
  6. 3 @klass = klass
  7. 3 @predicate_builder = predicate_builder
  8. end
  9. 1 def build(opts, other)
  10. 3 case opts
  11. when String, Array
  12. parts = [klass.sanitize_sql(other.empty? ? opts : ([opts] + other))]
  13. when Hash
  14. 2 attributes = predicate_builder.resolve_column_aliases(opts)
  15. 2 attributes.stringify_keys!
  16. 2 parts = predicate_builder.build_from_hash(attributes)
  17. when Arel::Nodes::Node
  18. 1 parts = [opts]
  19. else
  20. raise ArgumentError, "Unsupported argument type: #{opts} (#{opts.class})"
  21. end
  22. 3 WhereClause.new(parts)
  23. end
  24. 1 protected
  25. 1 attr_reader :klass, :predicate_builder
  26. end
  27. end
  28. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/result.rb

85.71% lines covered

56 relevant lines. 48 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. ###
  4. # This class encapsulates a result returned from calling
  5. # {#exec_query}[rdoc-ref:ConnectionAdapters::DatabaseStatements#exec_query]
  6. # on any database connection adapter. For example:
  7. #
  8. # result = ActiveRecord::Base.connection.exec_query('SELECT id, title, body FROM posts')
  9. # result # => #<ActiveRecord::Result:0xdeadbeef>
  10. #
  11. # # Get the column names of the result:
  12. # result.columns
  13. # # => ["id", "title", "body"]
  14. #
  15. # # Get the record values of the result:
  16. # result.rows
  17. # # => [[1, "title_1", "body_1"],
  18. # [2, "title_2", "body_2"],
  19. # ...
  20. # ]
  21. #
  22. # # Get an array of hashes representing the result (column => value):
  23. # result.to_hash
  24. # # => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
  25. # {"id" => 2, "title" => "title_2", "body" => "body_2"},
  26. # ...
  27. # ]
  28. #
  29. # # ActiveRecord::Result also includes Enumerable.
  30. # result.each do |row|
  31. # puts row['title'] + " " + row['body']
  32. # end
  33. 1 class Result
  34. 1 include Enumerable
  35. 1 attr_reader :columns, :rows, :column_types
  36. 1 def initialize(columns, rows, column_types = {})
  37. 17 @columns = columns
  38. 17 @rows = rows
  39. 17 @hash_rows = nil
  40. 17 @column_types = column_types
  41. end
  42. # Returns the number of elements in the rows array.
  43. 1 def length
  44. 7 @rows.length
  45. end
  46. # Calls the given block once for each element in row collection, passing
  47. # row as parameter.
  48. #
  49. # Returns an +Enumerator+ if no block is given.
  50. 1 def each
  51. 7 if block_given?
  52. 17 hash_rows.each { |row| yield row }
  53. else
  54. hash_rows.to_enum { @rows.size }
  55. end
  56. end
  57. # Returns an array of hashes representing each row record.
  58. 1 def to_hash
  59. hash_rows
  60. end
  61. 1 alias :map! :map
  62. 1 alias :collect! :map
  63. # Returns true if there are no records, otherwise false.
  64. 1 def empty?
  65. rows.empty?
  66. end
  67. # Returns an array of hashes representing each row record.
  68. 1 def to_ary
  69. hash_rows
  70. end
  71. 1 def [](idx)
  72. hash_rows[idx]
  73. end
  74. # Returns the first record from the rows collection.
  75. # If the rows collection is empty, returns +nil+.
  76. 1 def first
  77. 6 return nil if @rows.empty?
  78. 5 Hash[@columns.zip(@rows.first)]
  79. end
  80. # Returns the last record from the rows collection.
  81. # If the rows collection is empty, returns +nil+.
  82. 1 def last
  83. return nil if @rows.empty?
  84. Hash[@columns.zip(@rows.last)]
  85. end
  86. 1 def cast_values(type_overrides = {}) # :nodoc:
  87. 2 types = columns.map { |name| column_type(name, type_overrides) }
  88. 1 result = rows.map do |values|
  89. 2 types.zip(values).map { |type, value| type.deserialize(value) }
  90. end
  91. 1 columns.one? ? result.map!(&:first) : result
  92. end
  93. 1 def initialize_copy(other)
  94. 5 @columns = columns.dup
  95. 5 @rows = rows.dup
  96. 5 @column_types = column_types.dup
  97. 5 @hash_rows = nil
  98. end
  99. 1 private
  100. 1 def column_type(name, type_overrides = {})
  101. 1 type_overrides.fetch(name) do
  102. column_types.fetch(name, Type.default_value)
  103. end
  104. end
  105. 1 def hash_rows
  106. 7 @hash_rows ||=
  107. begin
  108. # We freeze the strings to prevent them getting duped when
  109. # used as keys in ActiveRecord::Base's @attributes hash
  110. 56 columns = @columns.map { |c| c.dup.freeze }
  111. 7 @rows.map { |row|
  112. # In the past we used Hash[columns.zip(row)]
  113. # though elegant, the verbose way is much more efficient
  114. # both time and memory wise cause it avoids a big array allocation
  115. # this method is called a lot and needs to be micro optimised
  116. 10 hash = {}
  117. 10 index = 0
  118. 10 length = columns.length
  119. 10 while index < length
  120. 70 hash[columns[index]] = row[index]
  121. 70 index += 1
  122. end
  123. 10 hash
  124. }
  125. end
  126. end
  127. end
  128. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/runtime_registry.rb

100.0% lines covered

8 relevant lines. 8 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/per_thread_registry"
  3. 1 module ActiveRecord
  4. # This is a thread locals registry for Active Record. For example:
  5. #
  6. # ActiveRecord::RuntimeRegistry.connection_handler
  7. #
  8. # returns the connection handler local to the current thread.
  9. #
  10. # See the documentation of ActiveSupport::PerThreadRegistry
  11. # for further details.
  12. 1 class RuntimeRegistry # :nodoc:
  13. 1 extend ActiveSupport::PerThreadRegistry
  14. 1 attr_accessor :connection_handler, :sql_runtime
  15. 1 [:connection_handler, :sql_runtime].each do |val|
  16. 2 class_eval %{ def self.#{val}; instance.#{val}; end }, __FILE__, __LINE__
  17. 2 class_eval %{ def self.#{val}=(x); instance.#{val}=x; end }, __FILE__, __LINE__
  18. end
  19. end
  20. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/schema_migration.rb

65.38% lines covered

26 relevant lines. 17 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_record/scoping/default"
  3. 1 require "active_record/scoping/named"
  4. 1 module ActiveRecord
  5. # This class is used to create a table that keeps track of which migrations
  6. # have been applied to a given database. When a migration is run, its schema
  7. # number is inserted in to the `SchemaMigration.table_name` so it doesn't need
  8. # to be executed the next time.
  9. 1 class SchemaMigration < ActiveRecord::Base # :nodoc:
  10. 1 class << self
  11. 1 def primary_key
  12. "version"
  13. end
  14. 1 def table_name
  15. 3 "#{table_name_prefix}#{ActiveRecord::Base.schema_migrations_table_name}#{table_name_suffix}"
  16. end
  17. 1 def table_exists?
  18. 1 connection.table_exists?(table_name)
  19. end
  20. 1 def create_table
  21. unless table_exists?
  22. version_options = connection.internal_string_options_for_primary_key
  23. connection.create_table(table_name, id: false) do |t|
  24. t.string :version, version_options
  25. end
  26. end
  27. end
  28. 1 def drop_table
  29. connection.drop_table table_name, if_exists: true
  30. end
  31. 1 def normalize_migration_number(number)
  32. "%.3d" % number.to_i
  33. end
  34. 1 def normalized_versions
  35. all_versions.map { |v| normalize_migration_number v }
  36. end
  37. 1 def all_versions
  38. 1 order(:version).pluck(:version)
  39. end
  40. end
  41. 1 def version
  42. super.to_i
  43. end
  44. end
  45. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/statement_cache.rb

83.02% lines covered

53 relevant lines. 44 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. # Statement cache is used to cache a single statement in order to avoid creating the AST again.
  4. # Initializing the cache is done by passing the statement in the create block:
  5. #
  6. # cache = StatementCache.create(Book.connection) do |params|
  7. # Book.where(name: "my book").where("author_id > 3")
  8. # end
  9. #
  10. # The cached statement is executed by using the
  11. # {connection.execute}[rdoc-ref:ConnectionAdapters::DatabaseStatements#execute] method:
  12. #
  13. # cache.execute([], Book.connection)
  14. #
  15. # The relation returned by the block is cached, and for each
  16. # {execute}[rdoc-ref:ConnectionAdapters::DatabaseStatements#execute]
  17. # call the cached relation gets duped. Database is queried when +to_a+ is called on the relation.
  18. #
  19. # If you want to cache the statement without the values you can use the +bind+ method of the
  20. # block parameter.
  21. #
  22. # cache = StatementCache.create(Book.connection) do |params|
  23. # Book.where(name: params.bind)
  24. # end
  25. #
  26. # And pass the bind values as the first argument of +execute+ call.
  27. #
  28. # cache.execute(["my book"], Book.connection)
  29. 1 class StatementCache # :nodoc:
  30. 1 class Substitute; end # :nodoc:
  31. 1 class Query # :nodoc:
  32. 1 def initialize(sql)
  33. 2 @sql = sql
  34. end
  35. 1 def sql_for(binds, connection)
  36. 3 @sql
  37. end
  38. end
  39. 1 class PartialQuery < Query # :nodoc:
  40. 1 def initialize(values)
  41. @values = values
  42. @indexes = values.each_with_index.find_all { |thing, i|
  43. Arel::Nodes::BindParam === thing
  44. }.map(&:last)
  45. end
  46. 1 def sql_for(binds, connection)
  47. val = @values.dup
  48. casted_binds = binds.map(&:value_for_database)
  49. @indexes.each { |i| val[i] = connection.quote(casted_binds.shift) }
  50. val.join
  51. end
  52. end
  53. 1 def self.query(sql)
  54. 2 Query.new(sql)
  55. end
  56. 1 def self.partial_query(values)
  57. PartialQuery.new(values)
  58. end
  59. 1 class Params # :nodoc:
  60. 3 def bind; Substitute.new; end
  61. end
  62. 1 class BindMap # :nodoc:
  63. 1 def initialize(bound_attributes)
  64. 2 @indexes = []
  65. 2 @bound_attributes = bound_attributes
  66. 2 bound_attributes.each_with_index do |attr, i|
  67. 4 if Substitute === attr.value
  68. 2 @indexes << i
  69. end
  70. end
  71. end
  72. 1 def bind(values)
  73. 3 bas = @bound_attributes.dup
  74. 6 @indexes.each_with_index { |offset, i| bas[offset] = bas[offset].with_cast_value(values[i]) }
  75. 3 bas
  76. end
  77. end
  78. 3 def self.create(connection, block = Proc.new)
  79. 2 relation = block.call Params.new
  80. 2 query_builder, binds = connection.cacheable_query(self, relation.arel)
  81. 2 bind_map = BindMap.new(binds)
  82. 2 new(query_builder, bind_map, relation.klass)
  83. end
  84. 1 def initialize(query_builder, bind_map, klass)
  85. 2 @query_builder = query_builder
  86. 2 @bind_map = bind_map
  87. 2 @klass = klass
  88. end
  89. 1 def execute(params, connection, &block)
  90. 3 bind_values = bind_map.bind params
  91. 3 sql = query_builder.sql_for bind_values, connection
  92. 3 klass.find_by_sql(sql, bind_values, preparable: true, &block)
  93. end
  94. 1 def self.unsupported_value?(value)
  95. 3 case value
  96. when NilClass, Array, Range, Hash, Relation, Base then true
  97. end
  98. end
  99. 1 protected
  100. 1 attr_reader :query_builder, :bind_map, :klass
  101. end
  102. end

target/rubygems/gems/activerecord-5.2.3/lib/active_record/table_metadata.rb

67.44% lines covered

43 relevant lines. 29 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveRecord
  3. 1 class TableMetadata # :nodoc:
  4. 1 delegate :foreign_type, :foreign_key, :join_primary_key, :join_foreign_key, to: :association, prefix: true
  5. 1 def initialize(klass, arel_table, association = nil)
  6. 2 @klass = klass
  7. 2 @arel_table = arel_table
  8. 2 @association = association
  9. end
  10. 1 def resolve_column_aliases(hash)
  11. 2 new_hash = hash.dup
  12. 2 hash.each do |key, _|
  13. 2 if (key.is_a?(Symbol)) && klass.attribute_alias?(key)
  14. new_hash[klass.attribute_alias(key)] = new_hash.delete(key)
  15. end
  16. end
  17. 2 new_hash
  18. end
  19. 1 def arel_attribute(column_name)
  20. 2 if klass
  21. 2 klass.arel_attribute(column_name, arel_table)
  22. else
  23. arel_table[column_name]
  24. end
  25. end
  26. 1 def type(column_name)
  27. 11 if klass
  28. 11 klass.type_for_attribute(column_name)
  29. else
  30. Type.default_value
  31. end
  32. end
  33. 1 def has_column?(column_name)
  34. klass && klass.columns_hash.key?(column_name.to_s)
  35. end
  36. 1 def associated_with?(association_name)
  37. 2 klass && klass._reflect_on_association(association_name)
  38. end
  39. 1 def associated_table(table_name)
  40. association = klass._reflect_on_association(table_name) || klass._reflect_on_association(table_name.to_s.singularize)
  41. if !association && table_name == arel_table.name
  42. return self
  43. elsif association && !association.polymorphic?
  44. association_klass = association.klass
  45. arel_table = association_klass.arel_table.alias(table_name)
  46. else
  47. type_caster = TypeCaster::Connection.new(klass, table_name)
  48. association_klass = nil
  49. arel_table = Arel::Table.new(table_name, type_caster: type_caster)
  50. end
  51. TableMetadata.new(association_klass, arel_table, association)
  52. end
  53. 1 def polymorphic_association?
  54. association && association.polymorphic?
  55. end
  56. 1 def aggregated_with?(aggregation_name)
  57. 2 klass && reflect_on_aggregation(aggregation_name)
  58. end
  59. 1 def reflect_on_aggregation(aggregation_name)
  60. 2 klass.reflect_on_aggregation(aggregation_name)
  61. end
  62. # TODO Change this to private once we've dropped Ruby 2.2 support.
  63. # Workaround for Ruby 2.2 "private attribute?" warning.
  64. 1 protected
  65. 1 attr_reader :klass, :arel_table, :association
  66. end
  67. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/base_controller.rb

75.0% lines covered

4 relevant lines. 3 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. # The base controller for all ActiveStorage controllers.
  3. 1 class ActiveStorage::BaseController < ActionController::Base
  4. 1 protect_from_forgery with: :exception
  5. 1 before_action do
  6. ActiveStorage::Current.host = request.base_url
  7. end
  8. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/blobs_controller.rb

60.0% lines covered

5 relevant lines. 3 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. # Take a signed permanent reference for a blob and turn it into an expiring service URL for download.
  3. # Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
  4. # security-through-obscurity factor of the signed blob references, you'll need to implement your own
  5. # authenticated redirection controller.
  6. 1 class ActiveStorage::BlobsController < ActiveStorage::BaseController
  7. 1 include ActiveStorage::SetBlob
  8. 1 def show
  9. expires_in ActiveStorage::Blob.service.url_expires_in
  10. redirect_to @blob.service_url(disposition: params[:disposition])
  11. end
  12. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/direct_uploads_controller.rb

55.56% lines covered

9 relevant lines. 5 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. # Creates a new blob on the server side in anticipation of a direct-to-service upload from the client side.
  3. # When the client-side upload is completed, the signed_blob_id can be submitted as part of the form to reference
  4. # the blob that was created up front.
  5. 1 class ActiveStorage::DirectUploadsController < ActiveStorage::BaseController
  6. 1 def create
  7. blob = ActiveStorage::Blob.create_before_direct_upload!(blob_args)
  8. render json: direct_upload_json(blob)
  9. end
  10. 1 private
  11. 1 def blob_args
  12. params.require(:blob).permit(:filename, :byte_size, :checksum, :content_type, :metadata).to_h.symbolize_keys
  13. end
  14. 1 def direct_upload_json(blob)
  15. blob.as_json(root: false, methods: :signed_id).merge(direct_upload: {
  16. url: blob.service_url_for_direct_upload,
  17. headers: blob.service_headers_for_direct_upload
  18. })
  19. end
  20. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/disk_controller.rb

33.33% lines covered

30 relevant lines. 10 lines covered and 20 lines missed.
    
  1. # frozen_string_literal: true
  2. # Serves files stored with the disk service in the same way that the cloud services do.
  3. # This means using expiring, signed URLs that are meant for immediate access, not permanent linking.
  4. # Always go through the BlobsController, or your own authenticated controller, rather than directly
  5. # to the service url.
  6. 1 class ActiveStorage::DiskController < ActiveStorage::BaseController
  7. 1 skip_forgery_protection
  8. 1 def show
  9. if key = decode_verified_key
  10. serve_file disk_service.path_for(key[:key]), content_type: key[:content_type], disposition: key[:disposition]
  11. else
  12. head :not_found
  13. end
  14. end
  15. 1 def update
  16. if token = decode_verified_token
  17. if acceptable_content?(token)
  18. disk_service.upload token[:key], request.body, checksum: token[:checksum]
  19. head :no_content
  20. else
  21. head :unprocessable_entity
  22. end
  23. end
  24. rescue ActiveStorage::IntegrityError
  25. head :unprocessable_entity
  26. end
  27. 1 private
  28. 1 def disk_service
  29. ActiveStorage::Blob.service
  30. end
  31. 1 def decode_verified_key
  32. ActiveStorage.verifier.verified(params[:encoded_key], purpose: :blob_key)
  33. end
  34. 1 def serve_file(path, content_type:, disposition:)
  35. Rack::File.new(nil).serving(request, path).tap do |(status, headers, body)|
  36. self.status = status
  37. self.response_body = body
  38. headers.each do |name, value|
  39. response.headers[name] = value
  40. end
  41. response.headers["Content-Type"] = content_type || DEFAULT_SEND_FILE_TYPE
  42. response.headers["Content-Disposition"] = disposition || DEFAULT_SEND_FILE_DISPOSITION
  43. end
  44. end
  45. 1 def decode_verified_token
  46. ActiveStorage.verifier.verified(params[:encoded_token], purpose: :blob_token)
  47. end
  48. 1 def acceptable_content?(token)
  49. token[:content_type] == request.content_mime_type && token[:content_length] == request.content_length
  50. end
  51. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/active_storage/representations_controller.rb

60.0% lines covered

5 relevant lines. 3 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. # Take a signed permanent reference for a blob representation and turn it into an expiring service URL for download.
  3. # Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
  4. # security-through-obscurity factor of the signed blob and variation reference, you'll need to implement your own
  5. # authenticated redirection controller.
  6. 1 class ActiveStorage::RepresentationsController < ActiveStorage::BaseController
  7. 1 include ActiveStorage::SetBlob
  8. 1 def show
  9. expires_in ActiveStorage::Blob.service.url_expires_in
  10. redirect_to @blob.representation(params[:variation_key]).processed.service_url(disposition: params[:disposition])
  11. end
  12. end

target/rubygems/gems/activestorage-5.2.3/app/controllers/concerns/active_storage/set_blob.rb

75.0% lines covered

8 relevant lines. 6 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage::SetBlob #:nodoc:
  3. 1 extend ActiveSupport::Concern
  4. 1 included do
  5. 2 before_action :set_blob
  6. end
  7. 1 private
  8. 1 def set_blob
  9. @blob = ActiveStorage::Blob.find_signed(params[:signed_blob_id] || params[:signed_id])
  10. rescue ActiveSupport::MessageVerifier::InvalidSignature
  11. head :not_found
  12. end
  13. end

target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/analyze_job.rb

66.67% lines covered

3 relevant lines. 2 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. # Provides asynchronous analysis of ActiveStorage::Blob records via ActiveStorage::Blob#analyze_later.
  3. 1 class ActiveStorage::AnalyzeJob < ActiveStorage::BaseJob
  4. 1 def perform(blob)
  5. blob.analyze
  6. end
  7. end

target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/base_job.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class ActiveStorage::BaseJob < ActiveJob::Base
  3. 1 queue_as { ActiveStorage.queue }
  4. end

target/rubygems/gems/activestorage-5.2.3/app/jobs/active_storage/purge_job.rb

75.0% lines covered

4 relevant lines. 3 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. # Provides asynchronous purging of ActiveStorage::Blob records via ActiveStorage::Blob#purge_later.
  3. 1 class ActiveStorage::PurgeJob < ActiveStorage::BaseJob
  4. 1 discard_on ActiveRecord::RecordNotFound
  5. 1 def perform(blob)
  6. blob.purge
  7. end
  8. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/attachment.rb

66.67% lines covered

18 relevant lines. 12 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/delegation"
  3. # Attachments associate records with blobs. Usually that's a one record-many blobs relationship,
  4. # but it is possible to associate many different records with the same blob. If you're doing that,
  5. # you'll want to declare with <tt>has_one/many_attached :thingy, dependent: false</tt>, so that destroying
  6. # any one record won't destroy the blob as well. (Then you'll need to do your own garbage collecting, though).
  7. 1 class ActiveStorage::Attachment < ActiveRecord::Base
  8. 1 self.table_name = "active_storage_attachments"
  9. 1 belongs_to :record, polymorphic: true, touch: true
  10. 1 belongs_to :blob, class_name: "ActiveStorage::Blob"
  11. 1 delegate_missing_to :blob
  12. 1 after_create_commit :analyze_blob_later, :identify_blob
  13. # Synchronously purges the blob (deletes it from the configured service) and destroys the attachment.
  14. 1 def purge
  15. destroy
  16. blob.purge
  17. end
  18. # Destroys the attachment and asynchronously purges the blob (deletes it from the configured service).
  19. 1 def purge_later
  20. destroy
  21. blob.purge_later
  22. end
  23. 1 private
  24. 1 def identify_blob
  25. blob.identify
  26. end
  27. 1 def analyze_blob_later
  28. blob.analyze_later unless blob.analyzed?
  29. end
  30. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob.rb

48.86% lines covered

88 relevant lines. 43 lines covered and 45 lines missed.
    
  1. # frozen_string_literal: true
  2. # A blob is a record that contains the metadata about a file and a key for where that file resides on the service.
  3. # Blobs can be created in two ways:
  4. #
  5. # 1. Subsequent to the file being uploaded server-side to the service via <tt>create_after_upload!</tt>.
  6. # 2. Ahead of the file being directly uploaded client-side to the service via <tt>create_before_direct_upload!</tt>.
  7. #
  8. # The first option doesn't require any client-side JavaScript integration, and can be used by any other back-end
  9. # service that deals with files. The second option is faster, since you're not using your own server as a staging
  10. # point for uploads, and can work with deployments like Heroku that do not provide large amounts of disk space.
  11. #
  12. # Blobs are intended to be immutable in as-so-far as their reference to a specific file goes. You're allowed to
  13. # update a blob's metadata on a subsequent pass, but you should not update the key or change the uploaded file.
  14. # If you need to create a derivative or otherwise change the blob, simply create a new blob and purge the old one.
  15. 1 class ActiveStorage::Blob < ActiveRecord::Base
  16. 1 require_dependency "active_storage/blob/analyzable"
  17. 1 require_dependency "active_storage/blob/identifiable"
  18. 1 require_dependency "active_storage/blob/representable"
  19. 1 include Analyzable
  20. 1 include Identifiable
  21. 1 include Representable
  22. 1 self.table_name = "active_storage_blobs"
  23. 1 has_secure_token :key
  24. 1 store :metadata, accessors: [ :analyzed, :identified ], coder: ActiveRecord::Coders::JSON
  25. 1 class_attribute :service
  26. 1 has_many :attachments
  27. 1 scope :unattached, -> { left_joins(:attachments).where(ActiveStorage::Attachment.table_name => { blob_id: nil }) }
  28. 1 before_destroy(prepend: true) do
  29. raise ActiveRecord::InvalidForeignKey if attachments.exists?
  30. end
  31. 1 class << self
  32. # You can used the signed ID of a blob to refer to it on the client side without fear of tampering.
  33. # This is particularly helpful for direct uploads where the client-side needs to refer to the blob
  34. # that was created ahead of the upload itself on form submission.
  35. #
  36. # The signed ID is also used to create stable URLs for the blob through the BlobsController.
  37. 1 def find_signed(id)
  38. find ActiveStorage.verifier.verify(id, purpose: :blob_id)
  39. end
  40. # Returns a new, unsaved blob instance after the +io+ has been uploaded to the service.
  41. 1 def build_after_upload(io:, filename:, content_type: nil, metadata: nil)
  42. new.tap do |blob|
  43. blob.filename = filename
  44. blob.content_type = content_type
  45. blob.metadata = metadata
  46. blob.upload io
  47. end
  48. end
  49. # Returns a saved blob instance after the +io+ has been uploaded to the service. Note, the blob is first built,
  50. # then the +io+ is uploaded, then the blob is saved. This is done this way to avoid uploading (which may take
  51. # time), while having an open database transaction.
  52. 1 def create_after_upload!(io:, filename:, content_type: nil, metadata: nil)
  53. build_after_upload(io: io, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!)
  54. end
  55. # Returns a saved blob _without_ uploading a file to the service. This blob will point to a key where there is
  56. # no file yet. It's intended to be used together with a client-side upload, which will first create the blob
  57. # in order to produce the signed URL for uploading. This signed URL points to the key generated by the blob.
  58. # Once the form using the direct upload is submitted, the blob can be associated with the right record using
  59. # the signed ID.
  60. 1 def create_before_direct_upload!(filename:, byte_size:, checksum:, content_type: nil, metadata: nil)
  61. create! filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type, metadata: metadata
  62. end
  63. end
  64. # Returns a signed ID for this blob that's suitable for reference on the client-side without fear of tampering.
  65. # It uses the framework-wide verifier on <tt>ActiveStorage.verifier</tt>, but with a dedicated purpose.
  66. 1 def signed_id
  67. ActiveStorage.verifier.generate(id, purpose: :blob_id)
  68. end
  69. # Returns the key pointing to the file on the service that's associated with this blob. The key is in the
  70. # standard secure-token format from Rails. So it'll look like: XTAPjJCJiuDrLk3TmwyJGpUo. This key is not intended
  71. # to be revealed directly to the user. Always refer to blobs using the signed_id or a verified form of the key.
  72. 1 def key
  73. # We can't wait until the record is first saved to have a key for it
  74. self[:key] ||= self.class.generate_unique_secure_token
  75. end
  76. # Returns an ActiveStorage::Filename instance of the filename that can be
  77. # queried for basename, extension, and a sanitized version of the filename
  78. # that's safe to use in URLs.
  79. 1 def filename
  80. ActiveStorage::Filename.new(self[:filename])
  81. end
  82. # Returns true if the content_type of this blob is in the image range, like image/png.
  83. 1 def image?
  84. content_type.start_with?("image")
  85. end
  86. # Returns true if the content_type of this blob is in the audio range, like audio/mpeg.
  87. 1 def audio?
  88. content_type.start_with?("audio")
  89. end
  90. # Returns true if the content_type of this blob is in the video range, like video/mp4.
  91. 1 def video?
  92. content_type.start_with?("video")
  93. end
  94. # Returns true if the content_type of this blob is in the text range, like text/plain.
  95. 1 def text?
  96. content_type.start_with?("text")
  97. end
  98. # Returns the URL of the blob on the service. This URL is intended to be short-lived for security and not used directly
  99. # with users. Instead, the +service_url+ should only be exposed as a redirect from a stable, possibly authenticated URL.
  100. # Hiding the +service_url+ behind a redirect also gives you the power to change services without updating all URLs. And
  101. # it allows permanent URLs that redirect to the +service_url+ to be cached in the view.
  102. 1 def service_url(expires_in: service.url_expires_in, disposition: :inline, filename: nil, **options)
  103. filename = ActiveStorage::Filename.wrap(filename || self.filename)
  104. service.url key, expires_in: expires_in, filename: filename, content_type: content_type_for_service_url,
  105. disposition: forced_disposition_for_service_url || disposition, **options
  106. end
  107. # Returns a URL that can be used to directly upload a file for this blob on the service. This URL is intended to be
  108. # short-lived for security and only generated on-demand by the client-side JavaScript responsible for doing the uploading.
  109. 1 def service_url_for_direct_upload(expires_in: service.url_expires_in)
  110. service.url_for_direct_upload key, expires_in: expires_in, content_type: content_type, content_length: byte_size, checksum: checksum
  111. end
  112. # Returns a Hash of headers for +service_url_for_direct_upload+ requests.
  113. 1 def service_headers_for_direct_upload
  114. service.headers_for_direct_upload key, filename: filename, content_type: content_type, content_length: byte_size, checksum: checksum
  115. end
  116. # Uploads the +io+ to the service on the +key+ for this blob. Blobs are intended to be immutable, so you shouldn't be
  117. # using this method after a file has already been uploaded to fit with a blob. If you want to create a derivative blob,
  118. # you should instead simply create a new blob based on the old one.
  119. #
  120. # Prior to uploading, we compute the checksum, which is sent to the service for transit integrity validation. If the
  121. # checksum does not match what the service receives, an exception will be raised. We also measure the size of the +io+
  122. # and store that in +byte_size+ on the blob record.
  123. #
  124. # Normally, you do not have to call this method directly at all. Use the factory class methods of +build_after_upload+
  125. # and +create_after_upload!+.
  126. 1 def upload(io)
  127. self.checksum = compute_checksum_in_chunks(io)
  128. self.content_type = extract_content_type(io)
  129. self.byte_size = io.size
  130. self.identified = true
  131. service.upload key, io, checksum: checksum, **service_metadata
  132. end
  133. # Downloads the file associated with this blob. If no block is given, the entire file is read into memory and returned.
  134. # That'll use a lot of RAM for very large files. If a block is given, then the download is streamed and yielded in chunks.
  135. 1 def download(&block)
  136. service.download key, &block
  137. end
  138. # Deletes the file on the service that's associated with this blob. This should only be done if the blob is going to be
  139. # deleted as well or you will essentially have a dead reference. It's recommended to use the +#purge+ and +#purge_later+
  140. # methods in most circumstances.
  141. 1 def delete
  142. service.delete(key)
  143. service.delete_prefixed("variants/#{key}/") if image?
  144. end
  145. # Deletes the file on the service and then destroys the blob record. This is the recommended way to dispose of unwanted
  146. # blobs. Note, though, that deleting the file off the service will initiate a HTTP connection to the service, which may
  147. # be slow or prevented, so you should not use this method inside a transaction or in callbacks. Use +#purge_later+ instead.
  148. 1 def purge
  149. destroy
  150. delete
  151. rescue ActiveRecord::InvalidForeignKey
  152. end
  153. # Enqueues an ActiveStorage::PurgeJob job that'll call +purge+. This is the recommended way to purge blobs when the call
  154. # needs to be made from a transaction, a callback, or any other real-time scenario.
  155. 1 def purge_later
  156. ActiveStorage::PurgeJob.perform_later(self)
  157. end
  158. 1 private
  159. 1 def compute_checksum_in_chunks(io)
  160. Digest::MD5.new.tap do |checksum|
  161. while chunk = io.read(5.megabytes)
  162. checksum << chunk
  163. end
  164. io.rewind
  165. end.base64digest
  166. end
  167. 1 def extract_content_type(io)
  168. Marcel::MimeType.for io, name: filename.to_s, declared_type: content_type
  169. end
  170. 1 def forcibly_serve_as_binary?
  171. ActiveStorage.content_types_to_serve_as_binary.include?(content_type)
  172. end
  173. 1 def allowed_inline?
  174. ActiveStorage.content_types_allowed_inline.include?(content_type)
  175. end
  176. 1 def content_type_for_service_url
  177. forcibly_serve_as_binary? ? ActiveStorage.binary_content_type : content_type
  178. end
  179. 1 def forced_disposition_for_service_url
  180. if forcibly_serve_as_binary? || !allowed_inline?
  181. :attachment
  182. end
  183. end
  184. 1 def service_metadata
  185. if forcibly_serve_as_binary?
  186. { content_type: ActiveStorage.binary_content_type, disposition: :attachment, filename: filename }
  187. elsif !allowed_inline?
  188. { content_type: content_type, disposition: :attachment, filename: filename }
  189. else
  190. { content_type: content_type }
  191. end
  192. end
  193. 1 ActiveSupport.run_load_hooks(:active_storage_blob, self)
  194. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/analyzable.rb

60.0% lines covered

15 relevant lines. 9 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_storage/analyzer/null_analyzer"
  3. 1 module ActiveStorage::Blob::Analyzable
  4. # Extracts and stores metadata from the file associated with this blob using a relevant analyzer. Active Storage comes
  5. # with built-in analyzers for images and videos. See ActiveStorage::Analyzer::ImageAnalyzer and
  6. # ActiveStorage::Analyzer::VideoAnalyzer for information about the specific attributes they extract and the third-party
  7. # libraries they require.
  8. #
  9. # To choose the analyzer for a blob, Active Storage calls +accept?+ on each registered analyzer in order. It uses the
  10. # first analyzer for which +accept?+ returns true when given the blob. If no registered analyzer accepts the blob, no
  11. # metadata is extracted from it.
  12. #
  13. # In a Rails application, add or remove analyzers by manipulating +Rails.application.config.active_storage.analyzers+
  14. # in an initializer:
  15. #
  16. # # Add a custom analyzer for Microsoft Office documents:
  17. # Rails.application.config.active_storage.analyzers.append DOCXAnalyzer
  18. #
  19. # # Remove the built-in video analyzer:
  20. # Rails.application.config.active_storage.analyzers.delete ActiveStorage::Analyzer::VideoAnalyzer
  21. #
  22. # Outside of a Rails application, manipulate +ActiveStorage.analyzers+ instead.
  23. #
  24. # You won't ordinarily need to call this method from a Rails application. New blobs are automatically and asynchronously
  25. # analyzed via #analyze_later when they're attached for the first time.
  26. 1 def analyze
  27. update! metadata: metadata.merge(extract_metadata_via_analyzer)
  28. end
  29. # Enqueues an ActiveStorage::AnalyzeJob which calls #analyze.
  30. #
  31. # This method is automatically called for a blob when it's attached for the first time. You can call it to analyze a blob
  32. # again (e.g. if you add a new analyzer or modify an existing one).
  33. 1 def analyze_later
  34. ActiveStorage::AnalyzeJob.perform_later(self)
  35. end
  36. # Returns true if the blob has been analyzed.
  37. 1 def analyzed?
  38. analyzed
  39. end
  40. 1 private
  41. 1 def extract_metadata_via_analyzer
  42. analyzer.metadata.merge(analyzed: true)
  43. end
  44. 1 def analyzer
  45. analyzer_class.new(self)
  46. end
  47. 1 def analyzer_class
  48. ActiveStorage.analyzers.detect { |klass| klass.accept?(self) } || ActiveStorage::Analyzer::NullAnalyzer
  49. end
  50. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/identifiable.rb

43.75% lines covered

16 relevant lines. 7 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage::Blob::Identifiable
  3. 1 def identify
  4. unless identified?
  5. update! content_type: identify_content_type, identified: true
  6. update_service_metadata
  7. end
  8. end
  9. 1 def identified?
  10. identified
  11. end
  12. 1 private
  13. 1 def identify_content_type
  14. Marcel::MimeType.for download_identifiable_chunk, name: filename.to_s, declared_type: content_type
  15. end
  16. 1 def download_identifiable_chunk
  17. if byte_size.positive?
  18. service.download_chunk key, 0...4.kilobytes
  19. else
  20. ""
  21. end
  22. end
  23. 1 def update_service_metadata
  24. service.update_metadata key, service_metadata if service_metadata.any?
  25. end
  26. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/blob/representable.rb

43.48% lines covered

23 relevant lines. 10 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage::Blob::Representable
  3. 1 extend ActiveSupport::Concern
  4. 1 included do
  5. 1 has_one_attached :preview_image
  6. end
  7. # Returns an ActiveStorage::Variant instance with the set of +transformations+ provided. This is only relevant for image
  8. # files, and it allows any image to be transformed for size, colors, and the like. Example:
  9. #
  10. # avatar.variant(resize: "100x100").processed.service_url
  11. #
  12. # This will create and process a variant of the avatar blob that's constrained to a height and width of 100px.
  13. # Then it'll upload said variant to the service according to a derivative key of the blob and the transformations.
  14. #
  15. # Frequently, though, you don't actually want to transform the variant right away. But rather simply refer to a
  16. # specific variant that can be created by a controller on-demand. Like so:
  17. #
  18. # <%= image_tag Current.user.avatar.variant(resize: "100x100") %>
  19. #
  20. # This will create a URL for that specific blob with that specific variant, which the ActiveStorage::RepresentationsController
  21. # can then produce on-demand.
  22. #
  23. # Raises ActiveStorage::InvariableError if ImageMagick cannot transform the blob. To determine whether a blob is
  24. # variable, call ActiveStorage::Blob#variable?.
  25. 1 def variant(transformations)
  26. if variable?
  27. ActiveStorage::Variant.new(self, transformations)
  28. else
  29. raise ActiveStorage::InvariableError
  30. end
  31. end
  32. # Returns true if ImageMagick can transform the blob (its content type is in +ActiveStorage.variable_content_types+).
  33. 1 def variable?
  34. ActiveStorage.variable_content_types.include?(content_type)
  35. end
  36. # Returns an ActiveStorage::Preview instance with the set of +transformations+ provided. A preview is an image generated
  37. # from a non-image blob. Active Storage comes with built-in previewers for videos and PDF documents. The video previewer
  38. # extracts the first frame from a video and the PDF previewer extracts the first page from a PDF document.
  39. #
  40. # blob.preview(resize: "100x100").processed.service_url
  41. #
  42. # Avoid processing previews synchronously in views. Instead, link to a controller action that processes them on demand.
  43. # Active Storage provides one, but you may want to create your own (for example, if you need authentication). Here���s
  44. # how to use the built-in version:
  45. #
  46. # <%= image_tag video.preview(resize: "100x100") %>
  47. #
  48. # This method raises ActiveStorage::UnpreviewableError if no previewer accepts the receiving blob. To determine
  49. # whether a blob is accepted by any previewer, call ActiveStorage::Blob#previewable?.
  50. 1 def preview(transformations)
  51. if previewable?
  52. ActiveStorage::Preview.new(self, transformations)
  53. else
  54. raise ActiveStorage::UnpreviewableError
  55. end
  56. end
  57. # Returns true if any registered previewer accepts the blob. By default, this will return true for videos and PDF documents.
  58. 1 def previewable?
  59. ActiveStorage.previewers.any? { |klass| klass.accept?(self) }
  60. end
  61. # Returns an ActiveStorage::Preview for a previewable blob or an ActiveStorage::Variant for a variable image blob.
  62. #
  63. # blob.representation(resize: "100x100").processed.service_url
  64. #
  65. # Raises ActiveStorage::UnrepresentableError if the receiving blob is neither variable nor previewable. Call
  66. # ActiveStorage::Blob#representable? to determine whether a blob is representable.
  67. #
  68. # See ActiveStorage::Blob#preview and ActiveStorage::Blob#variant for more information.
  69. 1 def representation(transformations)
  70. case
  71. when previewable?
  72. preview transformations
  73. when variable?
  74. variant transformations
  75. else
  76. raise ActiveStorage::UnrepresentableError
  77. end
  78. end
  79. # Returns true if the blob is variable or previewable.
  80. 1 def representable?
  81. variable? || previewable?
  82. end
  83. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/current.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class ActiveStorage::Current < ActiveSupport::CurrentAttributes #:nodoc:
  3. 1 attribute :host
  4. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/filename.rb

59.26% lines covered

27 relevant lines. 16 lines covered and 11 lines missed.
    
  1. # frozen_string_literal: true
  2. # Encapsulates a string representing a filename to provide convenient access to parts of it and sanitization.
  3. # A Filename instance is returned by ActiveStorage::Blob#filename, and is comparable so it can be used for sorting.
  4. 1 class ActiveStorage::Filename
  5. 1 require_dependency "active_storage/filename/parameters"
  6. 1 include Comparable
  7. 1 class << self
  8. # Returns a Filename instance based on the given filename. If the filename is a Filename, it is
  9. # returned unmodified. If it is a String, it is passed to ActiveStorage::Filename.new.
  10. 1 def wrap(filename)
  11. filename.kind_of?(self) ? filename : new(filename)
  12. end
  13. end
  14. 1 def initialize(filename)
  15. @filename = filename
  16. end
  17. # Returns the part of the filename preceding any extension.
  18. #
  19. # ActiveStorage::Filename.new("racecar.jpg").base # => "racecar"
  20. # ActiveStorage::Filename.new("racecar").base # => "racecar"
  21. # ActiveStorage::Filename.new(".gitignore").base # => ".gitignore"
  22. 1 def base
  23. File.basename @filename, extension_with_delimiter
  24. end
  25. # Returns the extension of the filename (i.e. the substring following the last dot, excluding a dot at the
  26. # beginning) with the dot that precedes it. If the filename has no extension, an empty string is returned.
  27. #
  28. # ActiveStorage::Filename.new("racecar.jpg").extension_with_delimiter # => ".jpg"
  29. # ActiveStorage::Filename.new("racecar").extension_with_delimiter # => ""
  30. # ActiveStorage::Filename.new(".gitignore").extension_with_delimiter # => ""
  31. 1 def extension_with_delimiter
  32. File.extname @filename
  33. end
  34. # Returns the extension of the filename (i.e. the substring following the last dot, excluding a dot at
  35. # the beginning). If the filename has no extension, an empty string is returned.
  36. #
  37. # ActiveStorage::Filename.new("racecar.jpg").extension_without_delimiter # => "jpg"
  38. # ActiveStorage::Filename.new("racecar").extension_without_delimiter # => ""
  39. # ActiveStorage::Filename.new(".gitignore").extension_without_delimiter # => ""
  40. 1 def extension_without_delimiter
  41. extension_with_delimiter.from(1).to_s
  42. end
  43. 1 alias_method :extension, :extension_without_delimiter
  44. # Returns the sanitized filename.
  45. #
  46. # ActiveStorage::Filename.new("foo:bar.jpg").sanitized # => "foo-bar.jpg"
  47. # ActiveStorage::Filename.new("foo/bar.jpg").sanitized # => "foo-bar.jpg"
  48. #
  49. # Characters considered unsafe for storage (e.g. \, $, and the RTL override character) are replaced with a dash.
  50. 1 def sanitized
  51. @filename.encode(Encoding::UTF_8, invalid: :replace, undef: :replace, replace: "���").strip.tr("\u{202E}%$|:;/\t\r\n\\", "-")
  52. end
  53. 1 def parameters #:nodoc:
  54. Parameters.new self
  55. end
  56. # Returns the sanitized version of the filename.
  57. 1 def to_s
  58. sanitized.to_s
  59. end
  60. 1 def as_json(*)
  61. to_s
  62. end
  63. 1 def to_json
  64. to_s
  65. end
  66. 1 def <=>(other)
  67. to_s.downcase <=> other.to_s.downcase
  68. end
  69. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/filename/parameters.rb

61.11% lines covered

18 relevant lines. 11 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class ActiveStorage::Filename::Parameters #:nodoc:
  3. 1 attr_reader :filename
  4. 1 def initialize(filename)
  5. @filename = filename
  6. end
  7. 1 def combined
  8. "#{ascii}; #{utf8}"
  9. end
  10. 1 TRADITIONAL_ESCAPED_CHAR = /[^ A-Za-z0-9!#$+.^_`|~-]/
  11. 1 def ascii
  12. 'filename="' + percent_escape(I18n.transliterate(filename.sanitized), TRADITIONAL_ESCAPED_CHAR) + '"'
  13. end
  14. 1 RFC_5987_ESCAPED_CHAR = /[^A-Za-z0-9!#$&+.^_`|~-]/
  15. 1 def utf8
  16. "filename*=UTF-8''" + percent_escape(filename.sanitized, RFC_5987_ESCAPED_CHAR)
  17. end
  18. 1 def to_s
  19. combined
  20. end
  21. 1 private
  22. 1 def percent_escape(string, pattern)
  23. string.gsub(pattern) do |char|
  24. char.bytes.map { |byte| "%%%02X" % byte }.join
  25. end
  26. end
  27. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/preview.rb

52.0% lines covered

25 relevant lines. 13 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. # Some non-image blobs can be previewed: that is, they can be presented as images. A video blob can be previewed by
  3. # extracting its first frame, and a PDF blob can be previewed by extracting its first page.
  4. #
  5. # A previewer extracts a preview image from a blob. Active Storage provides previewers for videos and PDFs:
  6. # ActiveStorage::Previewer::VideoPreviewer and ActiveStorage::Previewer::PDFPreviewer. Build custom previewers by
  7. # subclassing ActiveStorage::Previewer and implementing the requisite methods. Consult the ActiveStorage::Previewer
  8. # documentation for more details on what's required of previewers.
  9. #
  10. # To choose the previewer for a blob, Active Storage calls +accept?+ on each registered previewer in order. It uses the
  11. # first previewer for which +accept?+ returns true when given the blob. In a Rails application, add or remove previewers
  12. # by manipulating +Rails.application.config.active_storage.previewers+ in an initializer:
  13. #
  14. # Rails.application.config.active_storage.previewers
  15. # # => [ ActiveStorage::Previewer::PDFPreviewer, ActiveStorage::Previewer::VideoPreviewer ]
  16. #
  17. # # Add a custom previewer for Microsoft Office documents:
  18. # Rails.application.config.active_storage.previewers << DOCXPreviewer
  19. # # => [ ActiveStorage::Previewer::PDFPreviewer, ActiveStorage::Previewer::VideoPreviewer, DOCXPreviewer ]
  20. #
  21. # Outside of a Rails application, modify +ActiveStorage.previewers+ instead.
  22. #
  23. # The built-in previewers rely on third-party system libraries. Specifically, the built-in video previewer requires
  24. # {ffmpeg}[https://www.ffmpeg.org]. Two PDF previewers are provided: one requires {Poppler}[https://poppler.freedesktop.org],
  25. # and the other requires {mupdf}[https://mupdf.com] (version 1.8 or newer). To preview PDFs, install either Poppler or mupdf.
  26. #
  27. # These libraries are not provided by Rails. You must install them yourself to use the built-in previewers. Before you
  28. # install and use third-party software, make sure you understand the licensing implications of doing so.
  29. 1 class ActiveStorage::Preview
  30. 1 class UnprocessedError < StandardError; end
  31. 1 attr_reader :blob, :variation
  32. 1 def initialize(blob, variation_or_variation_key)
  33. @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key)
  34. end
  35. # Processes the preview if it has not been processed yet. Returns the receiving Preview instance for convenience:
  36. #
  37. # blob.preview(resize: "100x100").processed.service_url
  38. #
  39. # Processing a preview generates an image from its blob and attaches the preview image to the blob. Because the preview
  40. # image is stored with the blob, it is only generated once.
  41. 1 def processed
  42. process unless processed?
  43. self
  44. end
  45. # Returns the blob's attached preview image.
  46. 1 def image
  47. blob.preview_image
  48. end
  49. # Returns the URL of the preview's variant on the service. Raises ActiveStorage::Preview::UnprocessedError if the
  50. # preview has not been processed yet.
  51. #
  52. # This method synchronously processes a variant of the preview image, so do not call it in views. Instead, generate
  53. # a stable URL that redirects to the short-lived URL returned by this method.
  54. 1 def service_url(**options)
  55. if processed?
  56. variant.service_url(options)
  57. else
  58. raise UnprocessedError
  59. end
  60. end
  61. 1 private
  62. 1 def processed?
  63. image.attached?
  64. end
  65. 1 def process
  66. previewer.preview { |attachable| image.attach(attachable) }
  67. end
  68. 1 def variant
  69. ActiveStorage::Variant.new(image, variation).processed
  70. end
  71. 1 def previewer
  72. previewer_class.new(blob)
  73. end
  74. 1 def previewer_class
  75. ActiveStorage.previewers.detect { |klass| klass.accept?(blob) }
  76. end
  77. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/variant.rb

46.67% lines covered

45 relevant lines. 21 lines covered and 24 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_storage/downloading"
  3. # Image blobs can have variants that are the result of a set of transformations applied to the original.
  4. # These variants are used to create thumbnails, fixed-size avatars, or any other derivative image from the
  5. # original.
  6. #
  7. # Variants rely on {MiniMagick}[https://github.com/minimagick/minimagick] for the actual transformations
  8. # of the file, so you must add <tt>gem "mini_magick"</tt> to your Gemfile if you wish to use variants.
  9. #
  10. # Note that to create a variant it's necessary to download the entire blob file from the service and load it
  11. # into memory. The larger the image, the more memory is used. Because of this process, you also want to be
  12. # considerate about when the variant is actually processed. You shouldn't be processing variants inline in a
  13. # template, for example. Delay the processing to an on-demand controller, like the one provided in
  14. # ActiveStorage::RepresentationsController.
  15. #
  16. # To refer to such a delayed on-demand variant, simply link to the variant through the resolved route provided
  17. # by Active Storage like so:
  18. #
  19. # <%= image_tag Current.user.avatar.variant(resize: "100x100") %>
  20. #
  21. # This will create a URL for that specific blob with that specific variant, which the ActiveStorage::RepresentationsController
  22. # can then produce on-demand.
  23. #
  24. # When you do want to actually produce the variant needed, call +processed+. This will check that the variant
  25. # has already been processed and uploaded to the service, and, if so, just return that. Otherwise it will perform
  26. # the transformations, upload the variant to the service, and return itself again. Example:
  27. #
  28. # avatar.variant(resize: "100x100").processed.service_url
  29. #
  30. # This will create and process a variant of the avatar blob that's constrained to a height and width of 100.
  31. # Then it'll upload said variant to the service according to a derivative key of the blob and the transformations.
  32. #
  33. # A list of all possible transformations is available at https://www.imagemagick.org/script/mogrify.php. You can
  34. # combine as many as you like freely:
  35. #
  36. # avatar.variant(resize: "100x100", monochrome: true, rotate: "-90")
  37. 1 class ActiveStorage::Variant
  38. 1 include ActiveStorage::Downloading
  39. 1 WEB_IMAGE_CONTENT_TYPES = %w( image/png image/jpeg image/jpg image/gif )
  40. 1 attr_reader :blob, :variation
  41. 1 delegate :service, to: :blob
  42. 1 def initialize(blob, variation_or_variation_key)
  43. @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key)
  44. end
  45. # Returns the variant instance itself after it's been processed or an existing processing has been found on the service.
  46. 1 def processed
  47. process unless processed?
  48. self
  49. end
  50. # Returns a combination key of the blob and the variation that together identifies a specific variant.
  51. 1 def key
  52. "variants/#{blob.key}/#{Digest::SHA256.hexdigest(variation.key)}"
  53. end
  54. # Returns the URL of the variant on the service. This URL is intended to be short-lived for security and not used directly
  55. # with users. Instead, the +service_url+ should only be exposed as a redirect from a stable, possibly authenticated URL.
  56. # Hiding the +service_url+ behind a redirect also gives you the power to change services without updating all URLs. And
  57. # it allows permanent URLs that redirect to the +service_url+ to be cached in the view.
  58. #
  59. # Use <tt>url_for(variant)</tt> (or the implied form, like +link_to variant+ or +redirect_to variant+) to get the stable URL
  60. # for a variant that points to the ActiveStorage::RepresentationsController, which in turn will use this +service_call+ method
  61. # for its redirection.
  62. 1 def service_url(expires_in: service.url_expires_in, disposition: :inline)
  63. service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type
  64. end
  65. # Returns the receiving variant. Allows ActiveStorage::Variant and ActiveStorage::Preview instances to be used interchangeably.
  66. 1 def image
  67. self
  68. end
  69. 1 private
  70. 1 def processed?
  71. service.exist?(key)
  72. end
  73. 1 def process
  74. open_image do |image|
  75. transform image
  76. format image
  77. upload image
  78. end
  79. end
  80. 1 def filename
  81. if WEB_IMAGE_CONTENT_TYPES.include?(blob.content_type)
  82. blob.filename
  83. else
  84. ActiveStorage::Filename.new("#{blob.filename.base}.png")
  85. end
  86. end
  87. 1 def content_type
  88. blob.content_type.presence_in(WEB_IMAGE_CONTENT_TYPES) || "image/png"
  89. end
  90. 1 def open_image(&block)
  91. image = download_image
  92. begin
  93. yield image
  94. ensure
  95. image.destroy!
  96. end
  97. end
  98. 1 def download_image
  99. require "mini_magick"
  100. MiniMagick::Image.create(blob.filename.extension_with_delimiter) { |file| download_blob_to(file) }
  101. end
  102. 1 def transform(image)
  103. variation.transform(image)
  104. end
  105. 1 def format(image)
  106. image.format("PNG") unless WEB_IMAGE_CONTENT_TYPES.include?(blob.content_type)
  107. end
  108. 1 def upload(image)
  109. File.open(image.path, "r") { |file| service.upload(key, file) }
  110. end
  111. end

target/rubygems/gems/activestorage-5.2.3/app/models/active_storage/variation.rb

38.71% lines covered

31 relevant lines. 12 lines covered and 19 lines missed.
    
  1. # frozen_string_literal: true
  2. # A set of transformations that can be applied to a blob to create a variant. This class is exposed via
  3. # the ActiveStorage::Blob#variant method and should rarely be used directly.
  4. #
  5. # In case you do need to use this directly, it's instantiated using a hash of transformations where
  6. # the key is the command and the value is the arguments. Example:
  7. #
  8. # ActiveStorage::Variation.new(resize: "100x100", monochrome: true, trim: true, rotate: "-90")
  9. #
  10. # You can also combine multiple transformations in one step, e.g. for center-weighted cropping:
  11. #
  12. # ActiveStorage::Variation.new(combine_options: {
  13. # resize: "100x100^",
  14. # gravity: "center",
  15. # crop: "100x100+0+0",
  16. # })
  17. #
  18. # A list of all possible transformations is available at https://www.imagemagick.org/script/mogrify.php.
  19. 1 class ActiveStorage::Variation
  20. 1 attr_reader :transformations
  21. 1 class << self
  22. # Returns a Variation instance based on the given variator. If the variator is a Variation, it is
  23. # returned unmodified. If it is a String, it is passed to ActiveStorage::Variation.decode. Otherwise,
  24. # it is assumed to be a transformations Hash and is passed directly to the constructor.
  25. 1 def wrap(variator)
  26. case variator
  27. when self
  28. variator
  29. when String
  30. decode variator
  31. else
  32. new variator
  33. end
  34. end
  35. # Returns a Variation instance with the transformations that were encoded by +encode+.
  36. 1 def decode(key)
  37. new ActiveStorage.verifier.verify(key, purpose: :variation)
  38. end
  39. # Returns a signed key for the +transformations+, which can be used to refer to a specific
  40. # variation in a URL or combined key (like <tt>ActiveStorage::Variant#key</tt>).
  41. 1 def encode(transformations)
  42. ActiveStorage.verifier.generate(transformations, purpose: :variation)
  43. end
  44. end
  45. 1 def initialize(transformations)
  46. @transformations = transformations
  47. end
  48. # Accepts an open MiniMagick image instance, like what's returned by <tt>MiniMagick::Image.read(io)</tt>,
  49. # and performs the +transformations+ against it. The transformed image instance is then returned.
  50. 1 def transform(image)
  51. ActiveSupport::Notifications.instrument("transform.active_storage") do
  52. transformations.each do |name, argument_or_subtransformations|
  53. image.mogrify do |command|
  54. if name.to_s == "combine_options"
  55. argument_or_subtransformations.each do |subtransformation_name, subtransformation_argument|
  56. pass_transform_argument(command, subtransformation_name, subtransformation_argument)
  57. end
  58. else
  59. pass_transform_argument(command, name, argument_or_subtransformations)
  60. end
  61. end
  62. end
  63. end
  64. end
  65. # Returns a signed key for all the +transformations+ that this variation was instantiated with.
  66. 1 def key
  67. self.class.encode(transformations)
  68. end
  69. 1 private
  70. 1 def pass_transform_argument(command, method, argument)
  71. if eligible_argument?(argument)
  72. command.public_send(method, argument)
  73. else
  74. command.public_send(method)
  75. end
  76. end
  77. 1 def eligible_argument?(argument)
  78. argument.present? && argument != true
  79. end
  80. end

target/rubygems/gems/activestorage-5.2.3/config/routes.rb

70.59% lines covered

17 relevant lines. 12 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 Rails.application.routes.draw do
  3. 1 get "/rails/active_storage/blobs/:signed_id/*filename" => "active_storage/blobs#show", as: :rails_service_blob
  4. 1 direct :rails_blob do |blob, options|
  5. route_for(:rails_service_blob, blob.signed_id, blob.filename, options)
  6. end
  7. 1 resolve("ActiveStorage::Blob") { |blob, options| route_for(:rails_blob, blob, options) }
  8. 1 resolve("ActiveStorage::Attachment") { |attachment, options| route_for(:rails_blob, attachment.blob, options) }
  9. 1 get "/rails/active_storage/representations/:signed_blob_id/:variation_key/*filename" => "active_storage/representations#show", as: :rails_blob_representation
  10. 1 direct :rails_representation do |representation, options|
  11. signed_blob_id = representation.blob.signed_id
  12. variation_key = representation.variation.key
  13. filename = representation.blob.filename
  14. route_for(:rails_blob_representation, signed_blob_id, variation_key, filename, options)
  15. end
  16. 1 resolve("ActiveStorage::Variant") { |variant, options| route_for(:rails_representation, variant, options) }
  17. 1 resolve("ActiveStorage::Preview") { |preview, options| route_for(:rails_representation, preview, options) }
  18. 1 get "/rails/active_storage/disk/:encoded_key/*filename" => "active_storage/disk#show", as: :rails_disk_service
  19. 1 put "/rails/active_storage/disk/:encoded_token" => "active_storage/disk#update", as: :update_rails_disk_service
  20. 1 post "/rails/active_storage/direct_uploads" => "active_storage/direct_uploads#create", as: :rails_direct_uploads
  21. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/analyzer/null_analyzer.rb

66.67% lines covered

6 relevant lines. 4 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage
  3. 1 class Analyzer::NullAnalyzer < Analyzer # :nodoc:
  4. 1 def self.accept?(blob)
  5. true
  6. end
  7. 1 def metadata
  8. {}
  9. end
  10. end
  11. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached.rb

63.16% lines covered

19 relevant lines. 12 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "action_dispatch"
  3. 1 require "action_dispatch/http/upload"
  4. 1 require "active_support/core_ext/module/delegation"
  5. 1 module ActiveStorage
  6. # Abstract base class for the concrete ActiveStorage::Attached::One and ActiveStorage::Attached::Many
  7. # classes that both provide proxy access to the blob association for a record.
  8. 1 class Attached
  9. 1 attr_reader :name, :record, :dependent
  10. 1 def initialize(name, record, dependent:)
  11. @name, @record, @dependent = name, record, dependent
  12. end
  13. 1 private
  14. 1 def create_blob_from(attachable)
  15. case attachable
  16. when ActiveStorage::Blob
  17. attachable
  18. when ActionDispatch::Http::UploadedFile, Rack::Test::UploadedFile
  19. ActiveStorage::Blob.create_after_upload! \
  20. io: attachable.open,
  21. filename: attachable.original_filename,
  22. content_type: attachable.content_type
  23. when Hash
  24. ActiveStorage::Blob.create_after_upload!(attachable)
  25. when String
  26. ActiveStorage::Blob.find_signed(attachable)
  27. else
  28. nil
  29. end
  30. end
  31. end
  32. end
  33. 1 require "active_storage/attached/one"
  34. 1 require "active_storage/attached/many"
  35. 1 require "active_storage/attached/macros"

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/macros.rb

43.75% lines covered

32 relevant lines. 14 lines covered and 18 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage
  3. # Provides the class-level DSL for declaring that an Active Record model has attached blobs.
  4. 1 module Attached::Macros
  5. # Specifies the relation between a single attachment and the model.
  6. #
  7. # class User < ActiveRecord::Base
  8. # has_one_attached :avatar
  9. # end
  10. #
  11. # There is no column defined on the model side, Active Storage takes
  12. # care of the mapping between your records and the attachment.
  13. #
  14. # To avoid N+1 queries, you can include the attached blobs in your query like so:
  15. #
  16. # User.with_attached_avatar
  17. #
  18. # Under the covers, this relationship is implemented as a +has_one+ association to a
  19. # ActiveStorage::Attachment record and a +has_one-through+ association to a
  20. # ActiveStorage::Blob record. These associations are available as +avatar_attachment+
  21. # and +avatar_blob+. But you shouldn't need to work with these associations directly in
  22. # most circumstances.
  23. #
  24. # The system has been designed to having you go through the ActiveStorage::Attached::One
  25. # proxy that provides the dynamic proxy to the associations and factory methods, like +attach+.
  26. #
  27. # If the +:dependent+ option isn't set, the attachment will be purged
  28. # (i.e. destroyed) whenever the record is destroyed.
  29. 1 def has_one_attached(name, dependent: :purge_later)
  30. 1 class_eval <<-CODE, __FILE__, __LINE__ + 1
  31. 1 def #{name}
  32. 1 @active_storage_attached_#{name} ||= ActiveStorage::Attached::One.new("#{name}", self, dependent: #{dependent == :purge_later ? ":purge_later" : "false"})
  33. end
  34. 1 def #{name}=(attachable)
  35. 1 #{name}.attach(attachable)
  36. end
  37. CODE
  38. 1 has_one :"#{name}_attachment", -> { where(name: name) }, class_name: "ActiveStorage::Attachment", as: :record, inverse_of: :record, dependent: false
  39. 1 has_one :"#{name}_blob", through: :"#{name}_attachment", class_name: "ActiveStorage::Blob", source: :blob
  40. 1 scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) }
  41. 1 if dependent == :purge_later
  42. 1 after_destroy_commit { public_send(name).purge_later }
  43. else
  44. before_destroy { public_send(name).detach }
  45. end
  46. end
  47. # Specifies the relation between multiple attachments and the model.
  48. #
  49. # class Gallery < ActiveRecord::Base
  50. # has_many_attached :photos
  51. # end
  52. #
  53. # There are no columns defined on the model side, Active Storage takes
  54. # care of the mapping between your records and the attachments.
  55. #
  56. # To avoid N+1 queries, you can include the attached blobs in your query like so:
  57. #
  58. # Gallery.where(user: Current.user).with_attached_photos
  59. #
  60. # Under the covers, this relationship is implemented as a +has_many+ association to a
  61. # ActiveStorage::Attachment record and a +has_many-through+ association to a
  62. # ActiveStorage::Blob record. These associations are available as +photos_attachments+
  63. # and +photos_blobs+. But you shouldn't need to work with these associations directly in
  64. # most circumstances.
  65. #
  66. # The system has been designed to having you go through the ActiveStorage::Attached::Many
  67. # proxy that provides the dynamic proxy to the associations and factory methods, like +#attach+.
  68. #
  69. # If the +:dependent+ option isn't set, all the attachments will be purged
  70. # (i.e. destroyed) whenever the record is destroyed.
  71. 1 def has_many_attached(name, dependent: :purge_later)
  72. class_eval <<-CODE, __FILE__, __LINE__ + 1
  73. def #{name}
  74. @active_storage_attached_#{name} ||= ActiveStorage::Attached::Many.new("#{name}", self, dependent: #{dependent == :purge_later ? ":purge_later" : "false"})
  75. end
  76. def #{name}=(attachables)
  77. #{name}.attach(attachables)
  78. end
  79. CODE
  80. has_many :"#{name}_attachments", -> { where(name: name) }, as: :record, class_name: "ActiveStorage::Attachment", inverse_of: :record, dependent: false do
  81. def purge
  82. each(&:purge)
  83. reset
  84. end
  85. def purge_later
  86. each(&:purge_later)
  87. reset
  88. end
  89. end
  90. has_many :"#{name}_blobs", through: :"#{name}_attachments", class_name: "ActiveStorage::Blob", source: :blob
  91. scope :"with_attached_#{name}", -> { includes("#{name}_attachments": :blob) }
  92. if dependent == :purge_later
  93. after_destroy_commit { public_send(name).purge_later }
  94. else
  95. before_destroy { public_send(name).detach }
  96. end
  97. end
  98. end
  99. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/many.rb

50.0% lines covered

14 relevant lines. 7 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage
  3. # Decorated proxy object representing of multiple attachments to a model.
  4. 1 class Attached::Many < Attached
  5. 1 delegate_missing_to :attachments
  6. # Returns all the associated attachment records.
  7. #
  8. # All methods called on this proxy object that aren't listed here will automatically be delegated to +attachments+.
  9. 1 def attachments
  10. record.public_send("#{name}_attachments")
  11. end
  12. # Associates one or several attachments with the current record, saving them to the database.
  13. #
  14. # document.images.attach(params[:images]) # Array of ActionDispatch::Http::UploadedFile objects
  15. # document.images.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
  16. # document.images.attach(io: File.open("/path/to/racecar.jpg"), filename: "racecar.jpg", content_type: "image/jpg")
  17. # document.images.attach([ first_blob, second_blob ])
  18. 1 def attach(*attachables)
  19. attachables.flatten.collect do |attachable|
  20. if record.new_record?
  21. attachments.build(record: record, blob: create_blob_from(attachable))
  22. else
  23. attachments.create!(record: record, blob: create_blob_from(attachable))
  24. end
  25. end
  26. end
  27. # Returns true if any attachments has been made.
  28. #
  29. # class Gallery < ActiveRecord::Base
  30. # has_many_attached :photos
  31. # end
  32. #
  33. # Gallery.new.photos.attached? # => false
  34. 1 def attached?
  35. attachments.any?
  36. end
  37. # Deletes associated attachments without purging them, leaving their respective blobs in place.
  38. 1 def detach
  39. attachments.destroy_all if attached?
  40. end
  41. ##
  42. # :method: purge
  43. #
  44. # Directly purges each associated attachment (i.e. destroys the blobs and
  45. # attachments and deletes the files on the service).
  46. ##
  47. # :method: purge_later
  48. #
  49. # Purges each associated attachment through the queuing system.
  50. end
  51. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/attached/one.rb

40.63% lines covered

32 relevant lines. 13 lines covered and 19 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage
  3. # Representation of a single attachment to a model.
  4. 1 class Attached::One < Attached
  5. 1 delegate_missing_to :attachment
  6. # Returns the associated attachment record.
  7. #
  8. # You don't have to call this method to access the attachment's methods as
  9. # they are all available at the model level.
  10. 1 def attachment
  11. record.public_send("#{name}_attachment")
  12. end
  13. # Associates a given attachment with the current record, saving it to the database.
  14. #
  15. # person.avatar.attach(params[:avatar]) # ActionDispatch::Http::UploadedFile object
  16. # person.avatar.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
  17. # person.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpg")
  18. # person.avatar.attach(avatar_blob) # ActiveStorage::Blob object
  19. 1 def attach(attachable)
  20. blob_was = blob if attached?
  21. blob = create_blob_from(attachable)
  22. unless blob == blob_was
  23. transaction do
  24. detach
  25. write_attachment build_attachment(blob: blob)
  26. end
  27. blob_was.purge_later if blob_was && dependent == :purge_later
  28. end
  29. end
  30. # Returns +true+ if an attachment has been made.
  31. #
  32. # class User < ActiveRecord::Base
  33. # has_one_attached :avatar
  34. # end
  35. #
  36. # User.new.avatar.attached? # => false
  37. 1 def attached?
  38. attachment.present?
  39. end
  40. # Deletes the attachment without purging it, leaving its blob in place.
  41. 1 def detach
  42. if attached?
  43. attachment.destroy
  44. write_attachment nil
  45. end
  46. end
  47. # Directly purges the attachment (i.e. destroys the blob and
  48. # attachment and deletes the file on the service).
  49. 1 def purge
  50. if attached?
  51. attachment.purge
  52. write_attachment nil
  53. end
  54. end
  55. # Purges the attachment through the queuing system.
  56. 1 def purge_later
  57. if attached?
  58. attachment.purge_later
  59. end
  60. end
  61. 1 private
  62. 1 delegate :transaction, to: :record
  63. 1 def build_attachment(blob:)
  64. ActiveStorage::Attachment.new(record: record, name: name, blob: blob)
  65. end
  66. 1 def write_attachment(attachment)
  67. record.public_send("#{name}_attachment=", attachment)
  68. end
  69. end
  70. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/log_subscriber.rb

56.67% lines covered

30 relevant lines. 17 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/log_subscriber"
  3. 1 module ActiveStorage
  4. 1 class LogSubscriber < ActiveSupport::LogSubscriber
  5. 1 def service_upload(event)
  6. message = "Uploaded file to key: #{key_in(event)}"
  7. message += " (checksum: #{event.payload[:checksum]})" if event.payload[:checksum]
  8. info event, color(message, GREEN)
  9. end
  10. 1 def service_download(event)
  11. info event, color("Downloaded file from key: #{key_in(event)}", BLUE)
  12. end
  13. 1 alias_method :service_streaming_download, :service_download
  14. 1 def service_delete(event)
  15. info event, color("Deleted file from key: #{key_in(event)}", RED)
  16. end
  17. 1 def service_delete_prefixed(event)
  18. info event, color("Deleted files by key prefix: #{event.payload[:prefix]}", RED)
  19. end
  20. 1 def service_exist(event)
  21. debug event, color("Checked if file exists at key: #{key_in(event)} (#{event.payload[:exist] ? "yes" : "no"})", BLUE)
  22. end
  23. 1 def service_url(event)
  24. debug event, color("Generated URL for file at key: #{key_in(event)} (#{event.payload[:url]})", BLUE)
  25. end
  26. 1 def logger
  27. ActiveStorage.logger
  28. end
  29. 1 private
  30. 1 def info(event, colored_message)
  31. super log_prefix_for_service(event) + colored_message
  32. end
  33. 1 def debug(event, colored_message)
  34. super log_prefix_for_service(event) + colored_message
  35. end
  36. 1 def log_prefix_for_service(event)
  37. color " #{event.payload[:service]} Storage (#{event.duration.round(1)}ms) ", CYAN
  38. end
  39. 1 def key_in(event)
  40. event.payload[:key]
  41. end
  42. end
  43. end
  44. 1 ActiveStorage::LogSubscriber.attach_to :active_storage

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service.rb

66.67% lines covered

39 relevant lines. 26 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_storage/log_subscriber"
  3. 1 module ActiveStorage
  4. 1 class IntegrityError < StandardError; end
  5. # Abstract class serving as an interface for concrete services.
  6. #
  7. # The available services are:
  8. #
  9. # * +Disk+, to manage attachments saved directly on the hard drive.
  10. # * +GCS+, to manage attachments through Google Cloud Storage.
  11. # * +S3+, to manage attachments through Amazon S3.
  12. # * +AzureStorage+, to manage attachments through Microsoft Azure Storage.
  13. # * +Mirror+, to be able to use several services to manage attachments.
  14. #
  15. # Inside a Rails application, you can set-up your services through the
  16. # generated <tt>config/storage.yml</tt> file and reference one
  17. # of the aforementioned constant under the +service+ key. For example:
  18. #
  19. # local:
  20. # service: Disk
  21. # root: <%= Rails.root.join("storage") %>
  22. #
  23. # You can checkout the service's constructor to know which keys are required.
  24. #
  25. # Then, in your application's configuration, you can specify the service to
  26. # use like this:
  27. #
  28. # config.active_storage.service = :local
  29. #
  30. # If you are using Active Storage outside of a Ruby on Rails application, you
  31. # can configure the service to use like this:
  32. #
  33. # ActiveStorage::Blob.service = ActiveStorage::Service.configure(
  34. # :Disk,
  35. # root: Pathname("/foo/bar/storage")
  36. # )
  37. 1 class Service
  38. 1 extend ActiveSupport::Autoload
  39. 1 autoload :Configurator
  40. 1 class_attribute :url_expires_in, default: 5.minutes
  41. 1 class << self
  42. # Configure an Active Storage service by name from a set of configurations,
  43. # typically loaded from a YAML file. The Active Storage engine uses this
  44. # to set the global Active Storage service when the app boots.
  45. 1 def configure(service_name, configurations)
  46. 1 Configurator.build(service_name, configurations)
  47. end
  48. # Override in subclasses that stitch together multiple services and hence
  49. # need to build additional services using the configurator.
  50. #
  51. # Passes the configurator and all of the service's config as keyword args.
  52. #
  53. # See MirrorService for an example.
  54. 1 def build(configurator:, service: nil, **service_config) #:nodoc:
  55. 1 new(**service_config)
  56. end
  57. end
  58. # Upload the +io+ to the +key+ specified. If a +checksum+ is provided, the service will
  59. # ensure a match when the upload has completed or raise an ActiveStorage::IntegrityError.
  60. 1 def upload(key, io, checksum: nil, **options)
  61. raise NotImplementedError
  62. end
  63. # Update metadata for the file identified by +key+ in the service.
  64. # Override in subclasses only if the service needs to store specific
  65. # metadata that has to be updated upon identification.
  66. 1 def update_metadata(key, **metadata)
  67. end
  68. # Return the content of the file at the +key+.
  69. 1 def download(key)
  70. raise NotImplementedError
  71. end
  72. # Return the partial content in the byte +range+ of the file at the +key+.
  73. 1 def download_chunk(key, range)
  74. raise NotImplementedError
  75. end
  76. # Delete the file at the +key+.
  77. 1 def delete(key)
  78. raise NotImplementedError
  79. end
  80. # Delete files at keys starting with the +prefix+.
  81. 1 def delete_prefixed(prefix)
  82. raise NotImplementedError
  83. end
  84. # Return +true+ if a file exists at the +key+.
  85. 1 def exist?(key)
  86. raise NotImplementedError
  87. end
  88. # Returns a signed, temporary URL for the file at the +key+. The URL will be valid for the amount
  89. # of seconds specified in +expires_in+. You most also provide the +disposition+ (+:inline+ or +:attachment+),
  90. # +filename+, and +content_type+ that you wish the file to be served with on request.
  91. 1 def url(key, expires_in:, disposition:, filename:, content_type:)
  92. raise NotImplementedError
  93. end
  94. # Returns a signed, temporary URL that a direct upload file can be PUT to on the +key+.
  95. # The URL will be valid for the amount of seconds specified in +expires_in+.
  96. # You must also provide the +content_type+, +content_length+, and +checksum+ of the file
  97. # that will be uploaded. All these attributes will be validated by the service upon upload.
  98. 1 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
  99. raise NotImplementedError
  100. end
  101. # Returns a Hash of headers for +url_for_direct_upload+ requests.
  102. 1 def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:)
  103. {}
  104. end
  105. 1 private
  106. 1 def instrument(operation, payload = {}, &block)
  107. ActiveSupport::Notifications.instrument(
  108. "service_#{operation}.active_storage",
  109. payload.merge(service: service_name), &block)
  110. end
  111. 1 def service_name
  112. # ActiveStorage::Service::DiskService => Disk
  113. self.class.name.split("::").third.remove("Service")
  114. end
  115. 1 def content_disposition_with(type: "inline", filename:)
  116. (type.to_s.presence_in(%w( attachment inline )) || "inline") + "; #{filename.parameters}"
  117. end
  118. end
  119. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/configurator.rb

94.12% lines covered

17 relevant lines. 16 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveStorage
  3. 1 class Service::Configurator #:nodoc:
  4. 1 attr_reader :configurations
  5. 1 def self.build(service_name, configurations)
  6. 1 new(configurations).build(service_name)
  7. end
  8. 1 def initialize(configurations)
  9. 1 @configurations = configurations.deep_symbolize_keys
  10. end
  11. 1 def build(service_name)
  12. 1 config = config_for(service_name.to_sym)
  13. 1 resolve(config.fetch(:service)).build(**config, configurator: self)
  14. end
  15. 1 private
  16. 1 def config_for(name)
  17. 1 configurations.fetch name do
  18. raise "Missing configuration for the #{name.inspect} Active Storage service. Configurations available for #{configurations.keys.inspect}"
  19. end
  20. end
  21. 1 def resolve(class_name)
  22. 1 require "active_storage/service/#{class_name.to_s.underscore}_service"
  23. 1 ActiveStorage::Service.const_get(:"#{class_name}Service")
  24. end
  25. end
  26. end

target/rubygems/gems/activestorage-5.2.3/lib/active_storage/service/disk_service.rb

36.23% lines covered

69 relevant lines. 25 lines covered and 44 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "fileutils"
  3. 1 require "pathname"
  4. 1 require "digest/md5"
  5. 1 require "active_support/core_ext/numeric/bytes"
  6. 1 module ActiveStorage
  7. # Wraps a local disk path as an Active Storage service. See ActiveStorage::Service for the generic API
  8. # documentation that applies to all services.
  9. 1 class Service::DiskService < Service
  10. 1 attr_reader :root
  11. 1 def initialize(root:)
  12. 1 @root = root
  13. end
  14. 1 def upload(key, io, checksum: nil, **)
  15. instrument :upload, key: key, checksum: checksum do
  16. IO.copy_stream(io, make_path_for(key))
  17. ensure_integrity_of(key, checksum) if checksum
  18. end
  19. end
  20. 1 def download(key)
  21. if block_given?
  22. instrument :streaming_download, key: key do
  23. File.open(path_for(key), "rb") do |file|
  24. while data = file.read(5.megabytes)
  25. yield data
  26. end
  27. end
  28. end
  29. else
  30. instrument :download, key: key do
  31. File.binread path_for(key)
  32. end
  33. end
  34. end
  35. 1 def download_chunk(key, range)
  36. instrument :download_chunk, key: key, range: range do
  37. File.open(path_for(key), "rb") do |file|
  38. file.seek range.begin
  39. file.read range.size
  40. end
  41. end
  42. end
  43. 1 def delete(key)
  44. instrument :delete, key: key do
  45. begin
  46. File.delete path_for(key)
  47. rescue Errno::ENOENT
  48. # Ignore files already deleted
  49. end
  50. end
  51. end
  52. 1 def delete_prefixed(prefix)
  53. instrument :delete_prefixed, prefix: prefix do
  54. Dir.glob(path_for("#{prefix}*")).each do |path|
  55. FileUtils.rm_rf(path)
  56. end
  57. end
  58. end
  59. 1 def exist?(key)
  60. instrument :exist, key: key do |payload|
  61. answer = File.exist? path_for(key)
  62. payload[:exist] = answer
  63. answer
  64. end
  65. end
  66. 1 def url(key, expires_in:, filename:, disposition:, content_type:)
  67. instrument :url, key: key do |payload|
  68. content_disposition = content_disposition_with(type: disposition, filename: filename)
  69. verified_key_with_expiration = ActiveStorage.verifier.generate(
  70. {
  71. key: key,
  72. disposition: content_disposition,
  73. content_type: content_type
  74. },
  75. { expires_in: expires_in,
  76. purpose: :blob_key }
  77. )
  78. generated_url = url_helpers.rails_disk_service_url(verified_key_with_expiration,
  79. host: current_host,
  80. disposition: content_disposition,
  81. content_type: content_type,
  82. filename: filename
  83. )
  84. payload[:url] = generated_url
  85. generated_url
  86. end
  87. end
  88. 1 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
  89. instrument :url, key: key do |payload|
  90. verified_token_with_expiration = ActiveStorage.verifier.generate(
  91. {
  92. key: key,
  93. content_type: content_type,
  94. content_length: content_length,
  95. checksum: checksum
  96. },
  97. { expires_in: expires_in,
  98. purpose: :blob_token }
  99. )
  100. generated_url = url_helpers.update_rails_disk_service_url(verified_token_with_expiration, host: current_host)
  101. payload[:url] = generated_url
  102. generated_url
  103. end
  104. end
  105. 1 def headers_for_direct_upload(key, content_type:, **)
  106. { "Content-Type" => content_type }
  107. end
  108. 1 def path_for(key) #:nodoc:
  109. File.join root, folder_for(key), key
  110. end
  111. 1 private
  112. 1 def folder_for(key)
  113. [ key[0..1], key[2..3] ].join("/")
  114. end
  115. 1 def make_path_for(key)
  116. path_for(key).tap { |path| FileUtils.mkdir_p File.dirname(path) }
  117. end
  118. 1 def ensure_integrity_of(key, checksum)
  119. unless Digest::MD5.file(path_for(key)).base64digest == checksum
  120. delete key
  121. raise ActiveStorage::IntegrityError
  122. end
  123. end
  124. 1 def url_helpers
  125. @url_helpers ||= Rails.application.routes.url_helpers
  126. end
  127. 1 def current_host
  128. ActiveStorage::Current.host
  129. end
  130. end
  131. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/all.rb

100.0% lines covered

3 relevant lines. 3 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support"
  3. 1 require "active_support/time"
  4. 1 require "active_support/core_ext"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/backtrace_cleaner.rb

53.33% lines covered

30 relevant lines. 16 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. # Backtraces often include many lines that are not relevant for the context
  4. # under review. This makes it hard to find the signal amongst the backtrace
  5. # noise, and adds debugging time. With a BacktraceCleaner, filters and
  6. # silencers are used to remove the noisy lines, so that only the most relevant
  7. # lines remain.
  8. #
  9. # Filters are used to modify lines of data, while silencers are used to remove
  10. # lines entirely. The typical filter use case is to remove lengthy path
  11. # information from the start of each line, and view file paths relevant to the
  12. # app directory instead of the file system root. The typical silencer use case
  13. # is to exclude the output of a noisy library from the backtrace, so that you
  14. # can focus on the rest.
  15. #
  16. # bc = ActiveSupport::BacktraceCleaner.new
  17. # bc.add_filter { |line| line.gsub(Rails.root.to_s, '') } # strip the Rails.root prefix
  18. # bc.add_silencer { |line| line =~ /puma|rubygems/ } # skip any lines from puma or rubygems
  19. # bc.clean(exception.backtrace) # perform the cleanup
  20. #
  21. # To reconfigure an existing BacktraceCleaner (like the default one in Rails)
  22. # and show as much data as possible, you can always call
  23. # <tt>BacktraceCleaner#remove_silencers!</tt>, which will restore the
  24. # backtrace to a pristine state. If you need to reconfigure an existing
  25. # BacktraceCleaner so that it does not filter or modify the paths of any lines
  26. # of the backtrace, you can call <tt>BacktraceCleaner#remove_filters!</tt>
  27. # These two methods will give you a completely untouched backtrace.
  28. #
  29. # Inspired by the Quiet Backtrace gem by thoughtbot.
  30. 1 class BacktraceCleaner
  31. 1 def initialize
  32. 1 @filters, @silencers = [], []
  33. end
  34. # Returns the backtrace after all filters and silencers have been run
  35. # against it. Filters run first, then silencers.
  36. 1 def clean(backtrace, kind = :silent)
  37. filtered = filter_backtrace(backtrace)
  38. case kind
  39. when :silent
  40. silence(filtered)
  41. when :noise
  42. noise(filtered)
  43. else
  44. filtered
  45. end
  46. end
  47. 1 alias :filter :clean
  48. # Adds a filter from the block provided. Each line in the backtrace will be
  49. # mapped against this filter.
  50. #
  51. # # Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb"
  52. # backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') }
  53. 1 def add_filter(&block)
  54. 4 @filters << block
  55. end
  56. # Adds a silencer from the block provided. If the silencer returns +true+
  57. # for a given line, it will be excluded from the clean backtrace.
  58. #
  59. # # Will reject all lines that include the word "puma", like "/gems/puma/server.rb" or "/app/my_puma_server/rb"
  60. # backtrace_cleaner.add_silencer { |line| line =~ /puma/ }
  61. 1 def add_silencer(&block)
  62. 1 @silencers << block
  63. end
  64. # Removes all silencers, but leaves in the filters. Useful if your
  65. # context of debugging suddenly expands as you suspect a bug in one of
  66. # the libraries you use.
  67. 1 def remove_silencers!
  68. @silencers = []
  69. end
  70. # Removes all filters, but leaves in the silencers. Useful if you suddenly
  71. # need to see entire filepaths in the backtrace that you had already
  72. # filtered out.
  73. 1 def remove_filters!
  74. @filters = []
  75. end
  76. 1 private
  77. 1 def filter_backtrace(backtrace)
  78. @filters.each do |f|
  79. backtrace = backtrace.map { |line| f.call(line) }
  80. end
  81. backtrace
  82. end
  83. 1 def silence(backtrace)
  84. @silencers.each do |s|
  85. backtrace = backtrace.reject { |line| s.call(line) }
  86. end
  87. backtrace
  88. end
  89. 1 def noise(backtrace)
  90. backtrace - silence(backtrace)
  91. end
  92. end
  93. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/file_store.rb

32.69% lines covered

104 relevant lines. 34 lines covered and 70 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/marshal"
  3. 1 require "active_support/core_ext/file/atomic"
  4. 1 require "active_support/core_ext/string/conversions"
  5. 1 require "uri/common"
  6. 1 module ActiveSupport
  7. 1 module Cache
  8. # A cache store implementation which stores everything on the filesystem.
  9. #
  10. # FileStore implements the Strategy::LocalCache strategy which implements
  11. # an in-memory cache inside of a block.
  12. 1 class FileStore < Store
  13. 1 prepend Strategy::LocalCache
  14. 1 attr_reader :cache_path
  15. 1 DIR_FORMATTER = "%03X"
  16. 1 FILENAME_MAX_SIZE = 228 # max filename size on file system is 255, minus room for timestamp and random characters appended by Tempfile (used by atomic write)
  17. 1 FILEPATH_MAX_SIZE = 900 # max is 1024, plus some room
  18. 1 EXCLUDED_DIRS = [".", ".."].freeze
  19. 1 GITKEEP_FILES = [".gitkeep", ".keep"].freeze
  20. 1 def initialize(cache_path, options = nil)
  21. 1 super(options)
  22. 1 @cache_path = cache_path.to_s
  23. end
  24. # Deletes all items from the cache. In this case it deletes all the entries in the specified
  25. # file store directory except for .keep or .gitkeep. Be careful which directory is specified in your
  26. # config file when using +FileStore+ because everything in that directory will be deleted.
  27. 1 def clear(options = nil)
  28. root_dirs = exclude_from(cache_path, EXCLUDED_DIRS + GITKEEP_FILES)
  29. FileUtils.rm_r(root_dirs.collect { |f| File.join(cache_path, f) })
  30. rescue Errno::ENOENT
  31. end
  32. # Preemptively iterates through all stored keys and removes the ones which have expired.
  33. 1 def cleanup(options = nil)
  34. options = merged_options(options)
  35. search_dir(cache_path) do |fname|
  36. entry = read_entry(fname, options)
  37. delete_entry(fname, options) if entry && entry.expired?
  38. end
  39. end
  40. # Increments an already existing integer value that is stored in the cache.
  41. # If the key is not found nothing is done.
  42. 1 def increment(name, amount = 1, options = nil)
  43. modify_value(name, amount, options)
  44. end
  45. # Decrements an already existing integer value that is stored in the cache.
  46. # If the key is not found nothing is done.
  47. 1 def decrement(name, amount = 1, options = nil)
  48. modify_value(name, -amount, options)
  49. end
  50. 1 def delete_matched(matcher, options = nil)
  51. options = merged_options(options)
  52. instrument(:delete_matched, matcher.inspect) do
  53. matcher = key_matcher(matcher, options)
  54. search_dir(cache_path) do |path|
  55. key = file_path_key(path)
  56. delete_entry(path, options) if key.match(matcher)
  57. end
  58. end
  59. end
  60. 1 private
  61. 1 def read_entry(key, options)
  62. if File.exist?(key)
  63. File.open(key) { |f| Marshal.load(f) }
  64. end
  65. rescue => e
  66. logger.error("FileStoreError (#{e}): #{e.message}") if logger
  67. nil
  68. end
  69. 1 def write_entry(key, entry, options)
  70. return false if options[:unless_exist] && File.exist?(key)
  71. ensure_cache_path(File.dirname(key))
  72. File.atomic_write(key, cache_path) { |f| Marshal.dump(entry, f) }
  73. true
  74. end
  75. 1 def delete_entry(key, options)
  76. if File.exist?(key)
  77. begin
  78. File.delete(key)
  79. delete_empty_directories(File.dirname(key))
  80. true
  81. rescue => e
  82. # Just in case the error was caused by another process deleting the file first.
  83. raise e if File.exist?(key)
  84. false
  85. end
  86. end
  87. end
  88. # Lock a file for a block so only one process can modify it at a time.
  89. 1 def lock_file(file_name, &block)
  90. if File.exist?(file_name)
  91. File.open(file_name, "r+") do |f|
  92. begin
  93. f.flock File::LOCK_EX
  94. yield
  95. ensure
  96. f.flock File::LOCK_UN
  97. end
  98. end
  99. else
  100. yield
  101. end
  102. end
  103. # Translate a key into a file path.
  104. 1 def normalize_key(key, options)
  105. key = super
  106. fname = URI.encode_www_form_component(key)
  107. if fname.size > FILEPATH_MAX_SIZE
  108. fname = ActiveSupport::Digest.hexdigest(key)
  109. end
  110. hash = Zlib.adler32(fname)
  111. hash, dir_1 = hash.divmod(0x1000)
  112. dir_2 = hash.modulo(0x1000)
  113. fname_paths = []
  114. # Make sure file name doesn't exceed file system limits.
  115. begin
  116. fname_paths << fname[0, FILENAME_MAX_SIZE]
  117. fname = fname[FILENAME_MAX_SIZE..-1]
  118. end until fname.blank?
  119. File.join(cache_path, DIR_FORMATTER % dir_1, DIR_FORMATTER % dir_2, *fname_paths)
  120. end
  121. # Translate a file path into a key.
  122. 1 def file_path_key(path)
  123. fname = path[cache_path.to_s.size..-1].split(File::SEPARATOR, 4).last
  124. URI.decode_www_form_component(fname, Encoding::UTF_8)
  125. end
  126. # Delete empty directories in the cache.
  127. 1 def delete_empty_directories(dir)
  128. return if File.realpath(dir) == File.realpath(cache_path)
  129. if exclude_from(dir, EXCLUDED_DIRS).empty?
  130. Dir.delete(dir) rescue nil
  131. delete_empty_directories(File.dirname(dir))
  132. end
  133. end
  134. # Make sure a file path's directories exist.
  135. 1 def ensure_cache_path(path)
  136. FileUtils.makedirs(path) unless File.exist?(path)
  137. end
  138. 1 def search_dir(dir, &callback)
  139. return if !File.exist?(dir)
  140. Dir.foreach(dir) do |d|
  141. next if EXCLUDED_DIRS.include?(d)
  142. name = File.join(dir, d)
  143. if File.directory?(name)
  144. search_dir(name, &callback)
  145. else
  146. callback.call name
  147. end
  148. end
  149. end
  150. # Modifies the amount of an already existing integer value that is stored in the cache.
  151. # If the key is not found nothing is done.
  152. 1 def modify_value(name, amount, options)
  153. file_name = normalize_key(name, options)
  154. lock_file(file_name) do
  155. options = merged_options(options)
  156. if num = read(name, options)
  157. num = num.to_i + amount
  158. write(name, num, options)
  159. num
  160. end
  161. end
  162. end
  163. # Exclude entries from source directory
  164. 1 def exclude_from(source, excludes)
  165. Dir.entries(source).reject { |f| excludes.include?(f) }
  166. end
  167. end
  168. end
  169. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/memory_store.rb

32.97% lines covered

91 relevant lines. 30 lines covered and 61 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "monitor"
  3. 1 module ActiveSupport
  4. 1 module Cache
  5. # A cache store implementation which stores everything into memory in the
  6. # same process. If you're running multiple Ruby on Rails server processes
  7. # (which is the case if you're using Phusion Passenger or puma clustered mode),
  8. # then this means that Rails server process instances won't be able
  9. # to share cache data with each other and this may not be the most
  10. # appropriate cache in that scenario.
  11. #
  12. # This cache has a bounded size specified by the :size options to the
  13. # initializer (default is 32Mb). When the cache exceeds the allotted size,
  14. # a cleanup will occur which tries to prune the cache down to three quarters
  15. # of the maximum size by removing the least recently used entries.
  16. #
  17. # MemoryStore is thread-safe.
  18. 1 class MemoryStore < Store
  19. 1 def initialize(options = nil)
  20. 1 options ||= {}
  21. 1 super(options)
  22. 1 @data = {}
  23. 1 @key_access = {}
  24. 1 @max_size = options[:size] || 32.megabytes
  25. 1 @max_prune_time = options[:max_prune_time] || 2
  26. 1 @cache_size = 0
  27. 1 @monitor = Monitor.new
  28. 1 @pruning = false
  29. end
  30. # Delete all data stored in a given cache store.
  31. 1 def clear(options = nil)
  32. synchronize do
  33. @data.clear
  34. @key_access.clear
  35. @cache_size = 0
  36. end
  37. end
  38. # Preemptively iterates through all stored keys and removes the ones which have expired.
  39. 1 def cleanup(options = nil)
  40. options = merged_options(options)
  41. instrument(:cleanup, size: @data.size) do
  42. keys = synchronize { @data.keys }
  43. keys.each do |key|
  44. entry = @data[key]
  45. delete_entry(key, options) if entry && entry.expired?
  46. end
  47. end
  48. end
  49. # To ensure entries fit within the specified memory prune the cache by removing the least
  50. # recently accessed entries.
  51. 1 def prune(target_size, max_time = nil)
  52. return if pruning?
  53. @pruning = true
  54. begin
  55. start_time = Time.now
  56. cleanup
  57. instrument(:prune, target_size, from: @cache_size) do
  58. keys = synchronize { @key_access.keys.sort { |a, b| @key_access[a].to_f <=> @key_access[b].to_f } }
  59. keys.each do |key|
  60. delete_entry(key, options)
  61. return if @cache_size <= target_size || (max_time && Time.now - start_time > max_time)
  62. end
  63. end
  64. ensure
  65. @pruning = false
  66. end
  67. end
  68. # Returns true if the cache is currently being pruned.
  69. 1 def pruning?
  70. @pruning
  71. end
  72. # Increment an integer value in the cache.
  73. 1 def increment(name, amount = 1, options = nil)
  74. modify_value(name, amount, options)
  75. end
  76. # Decrement an integer value in the cache.
  77. 1 def decrement(name, amount = 1, options = nil)
  78. modify_value(name, -amount, options)
  79. end
  80. # Deletes cache entries if the cache key matches a given pattern.
  81. 1 def delete_matched(matcher, options = nil)
  82. options = merged_options(options)
  83. instrument(:delete_matched, matcher.inspect) do
  84. matcher = key_matcher(matcher, options)
  85. keys = synchronize { @data.keys }
  86. keys.each do |key|
  87. delete_entry(key, options) if key.match(matcher)
  88. end
  89. end
  90. end
  91. 1 def inspect # :nodoc:
  92. "<##{self.class.name} entries=#{@data.size}, size=#{@cache_size}, options=#{@options.inspect}>"
  93. end
  94. # Synchronize calls to the cache. This should be called wherever the underlying cache implementation
  95. # is not thread safe.
  96. 1 def synchronize(&block) # :nodoc:
  97. @monitor.synchronize(&block)
  98. end
  99. 1 private
  100. 1 PER_ENTRY_OVERHEAD = 240
  101. 1 def cached_size(key, entry)
  102. key.to_s.bytesize + entry.size + PER_ENTRY_OVERHEAD
  103. end
  104. 1 def read_entry(key, options)
  105. entry = @data[key]
  106. synchronize do
  107. if entry
  108. @key_access[key] = Time.now.to_f
  109. else
  110. @key_access.delete(key)
  111. end
  112. end
  113. entry
  114. end
  115. 1 def write_entry(key, entry, options)
  116. entry.dup_value!
  117. synchronize do
  118. old_entry = @data[key]
  119. return false if @data.key?(key) && options[:unless_exist]
  120. if old_entry
  121. @cache_size -= (old_entry.size - entry.size)
  122. else
  123. @cache_size += cached_size(key, entry)
  124. end
  125. @key_access[key] = Time.now.to_f
  126. @data[key] = entry
  127. prune(@max_size * 0.75, @max_prune_time) if @cache_size > @max_size
  128. true
  129. end
  130. end
  131. 1 def delete_entry(key, options)
  132. synchronize do
  133. @key_access.delete(key)
  134. entry = @data.delete(key)
  135. @cache_size -= cached_size(key, entry) if entry
  136. !!entry
  137. end
  138. end
  139. 1 def modify_value(name, amount, options)
  140. synchronize do
  141. options = merged_options(options)
  142. if num = read(name, options)
  143. num = num.to_i + amount
  144. write(name, num, options)
  145. num
  146. end
  147. end
  148. end
  149. end
  150. end
  151. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache.rb

44.66% lines covered

103 relevant lines. 46 lines covered and 57 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/object/duplicable"
  3. 1 require "active_support/core_ext/string/inflections"
  4. 1 require "active_support/per_thread_registry"
  5. 1 module ActiveSupport
  6. 1 module Cache
  7. 1 module Strategy
  8. # Caches that implement LocalCache will be backed by an in-memory cache for the
  9. # duration of a block. Repeated calls to the cache for the same key will hit the
  10. # in-memory cache for faster access.
  11. 1 module LocalCache
  12. 1 autoload :Middleware, "active_support/cache/strategy/local_cache_middleware"
  13. # Class for storing and registering the local caches.
  14. 1 class LocalCacheRegistry # :nodoc:
  15. 1 extend ActiveSupport::PerThreadRegistry
  16. 1 def initialize
  17. 1 @registry = {}
  18. end
  19. 1 def cache_for(local_cache_key)
  20. @registry[local_cache_key]
  21. end
  22. 1 def set_cache_for(local_cache_key, value)
  23. 6 @registry[local_cache_key] = value
  24. end
  25. 7 def self.set_cache_for(l, v); instance.set_cache_for l, v; end
  26. 1 def self.cache_for(l); instance.cache_for l; end
  27. end
  28. # Simple memory backed cache. This cache is not thread safe and is intended only
  29. # for serving as a temporary memory cache for a single thread.
  30. 1 class LocalStore < Store
  31. 1 def initialize
  32. 3 super
  33. 3 @data = {}
  34. end
  35. # Don't allow synchronizing since it isn't thread safe.
  36. 1 def synchronize # :nodoc:
  37. yield
  38. end
  39. 1 def clear(options = nil)
  40. @data.clear
  41. end
  42. 1 def read_entry(key, options)
  43. @data[key]
  44. end
  45. 1 def read_multi_entries(keys, options)
  46. values = {}
  47. keys.each do |name|
  48. entry = read_entry(name, options)
  49. values[name] = entry.value if entry
  50. end
  51. values
  52. end
  53. 1 def write_entry(key, value, options)
  54. @data[key] = value
  55. true
  56. end
  57. 1 def delete_entry(key, options)
  58. !!@data.delete(key)
  59. end
  60. 1 def fetch_entry(key, options = nil) # :nodoc:
  61. @data.fetch(key) { @data[key] = yield }
  62. end
  63. end
  64. # Use a local cache for the duration of block.
  65. 1 def with_local_cache
  66. use_temporary_local_cache(LocalStore.new) { yield }
  67. end
  68. # Middleware class can be inserted as a Rack handler to be local cache for the
  69. # duration of request.
  70. 1 def middleware
  71. 2 @middleware ||= Middleware.new(
  72. "ActiveSupport::Cache::Strategy::LocalCache",
  73. local_cache_key)
  74. end
  75. 1 def clear(options = nil) # :nodoc:
  76. return super unless cache = local_cache
  77. cache.clear(options)
  78. super
  79. end
  80. 1 def cleanup(options = nil) # :nodoc:
  81. return super unless cache = local_cache
  82. cache.clear
  83. super
  84. end
  85. 1 def increment(name, amount = 1, options = nil) # :nodoc:
  86. return super unless local_cache
  87. value = bypass_local_cache { super }
  88. write_cache_value(name, value, options)
  89. value
  90. end
  91. 1 def decrement(name, amount = 1, options = nil) # :nodoc:
  92. return super unless local_cache
  93. value = bypass_local_cache { super }
  94. write_cache_value(name, value, options)
  95. value
  96. end
  97. 1 private
  98. 1 def read_entry(key, options)
  99. if cache = local_cache
  100. cache.fetch_entry(key) { super }
  101. else
  102. super
  103. end
  104. end
  105. 1 def read_multi_entries(keys, options)
  106. return super unless local_cache
  107. local_entries = local_cache.read_multi_entries(keys, options)
  108. missed_keys = keys - local_entries.keys
  109. if missed_keys.any?
  110. local_entries.merge!(super(missed_keys, options))
  111. else
  112. local_entries
  113. end
  114. end
  115. 1 def write_entry(key, entry, options)
  116. if options[:unless_exist]
  117. local_cache.delete_entry(key, options) if local_cache
  118. else
  119. local_cache.write_entry(key, entry, options) if local_cache
  120. end
  121. super
  122. end
  123. 1 def delete_entry(key, options)
  124. local_cache.delete_entry(key, options) if local_cache
  125. super
  126. end
  127. 1 def write_cache_value(name, value, options)
  128. name = normalize_key(name, options)
  129. cache = local_cache
  130. cache.mute do
  131. if value
  132. cache.write(name, value, options)
  133. else
  134. cache.delete(name, options)
  135. end
  136. end
  137. end
  138. 1 def local_cache_key
  139. 1 @local_cache_key ||= "#{self.class.name.underscore}_local_cache_#{object_id}".gsub(/[\/-]/, "_").to_sym
  140. end
  141. 1 def local_cache
  142. LocalCacheRegistry.cache_for(local_cache_key)
  143. end
  144. 1 def bypass_local_cache
  145. use_temporary_local_cache(nil) { yield }
  146. end
  147. 1 def use_temporary_local_cache(temporary_cache)
  148. save_cache = LocalCacheRegistry.cache_for(local_cache_key)
  149. begin
  150. LocalCacheRegistry.set_cache_for(local_cache_key, temporary_cache)
  151. yield
  152. ensure
  153. LocalCacheRegistry.set_cache_for(local_cache_key, save_cache)
  154. end
  155. end
  156. end
  157. end
  158. end
  159. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/cache/strategy/local_cache_middleware.rb

95.83% lines covered

24 relevant lines. 23 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rack/body_proxy"
  3. 1 require "rack/utils"
  4. 1 module ActiveSupport
  5. 1 module Cache
  6. 1 module Strategy
  7. 1 module LocalCache
  8. #--
  9. # This class wraps up local storage for middlewares. Only the middleware method should
  10. # construct them.
  11. 1 class Middleware # :nodoc:
  12. 1 attr_reader :name, :local_cache_key
  13. 1 def initialize(name, local_cache_key)
  14. 1 @name = name
  15. 1 @local_cache_key = local_cache_key
  16. 1 @app = nil
  17. end
  18. 1 def new(app)
  19. 1 @app = app
  20. 1 self
  21. end
  22. 1 def call(env)
  23. 3 LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
  24. 3 response = @app.call(env)
  25. 3 response[2] = ::Rack::BodyProxy.new(response[2]) do
  26. 3 LocalCacheRegistry.set_cache_for(local_cache_key, nil)
  27. end
  28. 3 cleanup_on_body_close = true
  29. 3 response
  30. rescue Rack::Utils::InvalidParameterError
  31. [400, {}, []]
  32. ensure
  33. LocalCacheRegistry.set_cache_for(local_cache_key, nil) unless
  34. 3 cleanup_on_body_close
  35. end
  36. end
  37. end
  38. end
  39. end
  40. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 Dir.glob(File.expand_path("core_ext/*.rb", __dir__)).each do |path|
  3. 23 require path
  4. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/big_decimal.rb

100.0% lines covered

1 relevant lines. 1 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/big_decimal/conversions"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/digest/uuid.rb

44.0% lines covered

25 relevant lines. 11 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "securerandom"
  3. 1 module Digest
  4. 1 module UUID
  5. 1 DNS_NAMESPACE = "k\xA7\xB8\x10\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" #:nodoc:
  6. 1 URL_NAMESPACE = "k\xA7\xB8\x11\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" #:nodoc:
  7. 1 OID_NAMESPACE = "k\xA7\xB8\x12\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" #:nodoc:
  8. 1 X500_NAMESPACE = "k\xA7\xB8\x14\x9D\xAD\x11\xD1\x80\xB4\x00\xC0O\xD40\xC8" #:nodoc:
  9. # Generates a v5 non-random UUID (Universally Unique IDentifier).
  10. #
  11. # Using Digest::MD5 generates version 3 UUIDs; Digest::SHA1 generates version 5 UUIDs.
  12. # uuid_from_hash always generates the same UUID for a given name and namespace combination.
  13. #
  14. # See RFC 4122 for details of UUID at: https://www.ietf.org/rfc/rfc4122.txt
  15. 1 def self.uuid_from_hash(hash_class, uuid_namespace, name)
  16. if hash_class == Digest::MD5
  17. version = 3
  18. elsif hash_class == Digest::SHA1
  19. version = 5
  20. else
  21. raise ArgumentError, "Expected Digest::SHA1 or Digest::MD5, got #{hash_class.name}."
  22. end
  23. hash = hash_class.new
  24. hash.update(uuid_namespace)
  25. hash.update(name)
  26. ary = hash.digest.unpack("NnnnnN")
  27. ary[2] = (ary[2] & 0x0FFF) | (version << 12)
  28. ary[3] = (ary[3] & 0x3FFF) | 0x8000
  29. "%08x-%04x-%04x-%04x-%04x%08x" % ary
  30. end
  31. # Convenience method for uuid_from_hash using Digest::MD5.
  32. 1 def self.uuid_v3(uuid_namespace, name)
  33. uuid_from_hash(Digest::MD5, uuid_namespace, name)
  34. end
  35. # Convenience method for uuid_from_hash using Digest::SHA1.
  36. 1 def self.uuid_v5(uuid_namespace, name)
  37. uuid_from_hash(Digest::SHA1, uuid_namespace, name)
  38. end
  39. # Convenience method for SecureRandom.uuid.
  40. 1 def self.uuid_v4
  41. SecureRandom.uuid
  42. end
  43. end
  44. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file.rb

100.0% lines covered

1 relevant lines. 1 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/file/atomic"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/file/atomic.rb

17.39% lines covered

23 relevant lines. 4 lines covered and 19 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "fileutils"
  3. 1 class File
  4. # Write to a file atomically. Useful for situations where you don't
  5. # want other processes or threads to see half-written files.
  6. #
  7. # File.atomic_write('important.file') do |file|
  8. # file.write('hello')
  9. # end
  10. #
  11. # This method needs to create a temporary file. By default it will create it
  12. # in the same directory as the destination file. If you don't like this
  13. # behavior you can provide a different directory but it must be on the
  14. # same physical filesystem as the file you're trying to write.
  15. #
  16. # File.atomic_write('/data/something.important', '/data/tmp') do |file|
  17. # file.write('hello')
  18. # end
  19. 1 def self.atomic_write(file_name, temp_dir = dirname(file_name))
  20. require "tempfile" unless defined?(Tempfile)
  21. Tempfile.open(".#{basename(file_name)}", temp_dir) do |temp_file|
  22. temp_file.binmode
  23. return_val = yield temp_file
  24. temp_file.close
  25. old_stat = if exist?(file_name)
  26. # Get original file permissions
  27. stat(file_name)
  28. else
  29. # If not possible, probe which are the default permissions in the
  30. # destination directory.
  31. probe_stat_in(dirname(file_name))
  32. end
  33. if old_stat
  34. # Set correct permissions on new file
  35. begin
  36. chown(old_stat.uid, old_stat.gid, temp_file.path)
  37. # This operation will affect filesystem ACL's
  38. chmod(old_stat.mode, temp_file.path)
  39. rescue Errno::EPERM, Errno::EACCES
  40. # Changing file ownership failed, moving on.
  41. end
  42. end
  43. # Overwrite original file with temp file
  44. rename(temp_file.path, file_name)
  45. return_val
  46. end
  47. end
  48. # Private utility method.
  49. 1 def self.probe_stat_in(dir) #:nodoc:
  50. basename = [
  51. ".permissions_check",
  52. Thread.current.object_id,
  53. Process.pid,
  54. rand(1000000)
  55. ].join(".")
  56. file_name = join(dir, basename)
  57. FileUtils.touch(file_name)
  58. stat(file_name)
  59. ensure
  60. FileUtils.rm_f(file_name) if file_name
  61. end
  62. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/hash.rb

100.0% lines covered

9 relevant lines. 9 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/hash/compact"
  3. 1 require "active_support/core_ext/hash/conversions"
  4. 1 require "active_support/core_ext/hash/deep_merge"
  5. 1 require "active_support/core_ext/hash/except"
  6. 1 require "active_support/core_ext/hash/indifferent_access"
  7. 1 require "active_support/core_ext/hash/keys"
  8. 1 require "active_support/core_ext/hash/reverse_merge"
  9. 1 require "active_support/core_ext/hash/slice"
  10. 1 require "active_support/core_ext/hash/transform_values"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer.rb

100.0% lines covered

3 relevant lines. 3 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/integer/multiple"
  3. 1 require "active_support/core_ext/integer/inflections"
  4. 1 require "active_support/core_ext/integer/time"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/inflections.rb

66.67% lines covered

6 relevant lines. 4 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/inflector"
  3. 1 class Integer
  4. # Ordinalize turns a number into an ordinal string used to denote the
  5. # position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
  6. #
  7. # 1.ordinalize # => "1st"
  8. # 2.ordinalize # => "2nd"
  9. # 1002.ordinalize # => "1002nd"
  10. # 1003.ordinalize # => "1003rd"
  11. # -11.ordinalize # => "-11th"
  12. # -1001.ordinalize # => "-1001st"
  13. 1 def ordinalize
  14. ActiveSupport::Inflector.ordinalize(self)
  15. end
  16. # Ordinal returns the suffix used to denote the position
  17. # in an ordered sequence such as 1st, 2nd, 3rd, 4th.
  18. #
  19. # 1.ordinal # => "st"
  20. # 2.ordinal # => "nd"
  21. # 1002.ordinal # => "nd"
  22. # 1003.ordinal # => "rd"
  23. # -11.ordinal # => "th"
  24. # -1001.ordinal # => "st"
  25. 1 def ordinal
  26. ActiveSupport::Inflector.ordinal(self)
  27. end
  28. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/integer/multiple.rb

66.67% lines covered

3 relevant lines. 2 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class Integer
  3. # Check whether the integer is evenly divisible by the argument.
  4. #
  5. # 0.multiple_of?(0) # => true
  6. # 6.multiple_of?(5) # => false
  7. # 10.multiple_of?(2) # => true
  8. 1 def multiple_of?(number)
  9. number != 0 ? self % number == 0 : zero?
  10. end
  11. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/kernel/agnostics"
  3. 1 require "active_support/core_ext/kernel/concern"
  4. 1 require "active_support/core_ext/kernel/reporting"
  5. 1 require "active_support/core_ext/kernel/singleton_class"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/agnostics.rb

50.0% lines covered

4 relevant lines. 2 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class Object
  3. # Makes backticks behave (somewhat more) similarly on all platforms.
  4. # On win32 `nonexistent_command` raises Errno::ENOENT; on Unix, the
  5. # spawned shell prints a message to stderr and sets $?. We emulate
  6. # Unix on the former but not the latter.
  7. 1 def `(command) #:nodoc:
  8. super
  9. rescue Errno::ENOENT => e
  10. STDERR.puts "#$0: #{e}"
  11. end
  12. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/kernel/concern.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/concerning"
  3. 1 module Kernel
  4. 1 module_function
  5. # A shortcut to define a toplevel concern, not within a module.
  6. #
  7. # See Module::Concerning for more.
  8. 1 def concern(topic, &module_definition)
  9. Object.concern topic, &module_definition
  10. end
  11. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/marshal.rb

36.36% lines covered

11 relevant lines. 4 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module MarshalWithAutoloading # :nodoc:
  4. 1 def load(source, proc = nil)
  5. super(source, proc)
  6. rescue ArgumentError, NameError => exc
  7. if exc.message.match(%r|undefined class/module (.+?)(?:::)?\z|)
  8. # try loading the class/module
  9. loaded = $1.constantize
  10. raise unless $1 == loaded.name
  11. # if it is an IO we need to go back to read the object
  12. source.rewind if source.respond_to?(:rewind)
  13. retry
  14. else
  15. raise exc
  16. end
  17. end
  18. end
  19. end
  20. 1 Marshal.singleton_class.prepend(ActiveSupport::MarshalWithAutoloading)

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/numeric/bytes"
  3. 1 require "active_support/core_ext/numeric/time"
  4. 1 require "active_support/core_ext/numeric/inquiry"
  5. 1 require "active_support/core_ext/numeric/conversions"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/conversions.rb

47.83% lines covered

23 relevant lines. 11 lines covered and 12 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/big_decimal/conversions"
  3. 1 require "active_support/number_helper"
  4. 1 require "active_support/core_ext/module/deprecation"
  5. 1 module ActiveSupport::NumericWithFormat
  6. # Provides options for converting numbers into formatted strings.
  7. # Options are provided for phone numbers, currency, percentage,
  8. # precision, positional notation, file size and pretty printing.
  9. #
  10. # ==== Options
  11. #
  12. # For details on which formats use which options, see ActiveSupport::NumberHelper
  13. #
  14. # ==== Examples
  15. #
  16. # Phone Numbers:
  17. # 5551234.to_s(:phone) # => "555-1234"
  18. # 1235551234.to_s(:phone) # => "123-555-1234"
  19. # 1235551234.to_s(:phone, area_code: true) # => "(123) 555-1234"
  20. # 1235551234.to_s(:phone, delimiter: ' ') # => "123 555 1234"
  21. # 1235551234.to_s(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555"
  22. # 1235551234.to_s(:phone, country_code: 1) # => "+1-123-555-1234"
  23. # 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.')
  24. # # => "+1.123.555.1234 x 1343"
  25. #
  26. # Currency:
  27. # 1234567890.50.to_s(:currency) # => "$1,234,567,890.50"
  28. # 1234567890.506.to_s(:currency) # => "$1,234,567,890.51"
  29. # 1234567890.506.to_s(:currency, precision: 3) # => "$1,234,567,890.506"
  30. # 1234567890.506.to_s(:currency, locale: :fr) # => "1 234 567 890,51 ���"
  31. # -1234567890.50.to_s(:currency, negative_format: '(%u%n)')
  32. # # => "($1,234,567,890.50)"
  33. # 1234567890.50.to_s(:currency, unit: '&pound;', separator: ',', delimiter: '')
  34. # # => "&pound;1234567890,50"
  35. # 1234567890.50.to_s(:currency, unit: '&pound;', separator: ',', delimiter: '', format: '%n %u')
  36. # # => "1234567890,50 &pound;"
  37. #
  38. # Percentage:
  39. # 100.to_s(:percentage) # => "100.000%"
  40. # 100.to_s(:percentage, precision: 0) # => "100%"
  41. # 1000.to_s(:percentage, delimiter: '.', separator: ',') # => "1.000,000%"
  42. # 302.24398923423.to_s(:percentage, precision: 5) # => "302.24399%"
  43. # 1000.to_s(:percentage, locale: :fr) # => "1 000,000%"
  44. # 100.to_s(:percentage, format: '%n %') # => "100.000 %"
  45. #
  46. # Delimited:
  47. # 12345678.to_s(:delimited) # => "12,345,678"
  48. # 12345678.05.to_s(:delimited) # => "12,345,678.05"
  49. # 12345678.to_s(:delimited, delimiter: '.') # => "12.345.678"
  50. # 12345678.to_s(:delimited, delimiter: ',') # => "12,345,678"
  51. # 12345678.05.to_s(:delimited, separator: ' ') # => "12,345,678 05"
  52. # 12345678.05.to_s(:delimited, locale: :fr) # => "12 345 678,05"
  53. # 98765432.98.to_s(:delimited, delimiter: ' ', separator: ',')
  54. # # => "98 765 432,98"
  55. #
  56. # Rounded:
  57. # 111.2345.to_s(:rounded) # => "111.235"
  58. # 111.2345.to_s(:rounded, precision: 2) # => "111.23"
  59. # 13.to_s(:rounded, precision: 5) # => "13.00000"
  60. # 389.32314.to_s(:rounded, precision: 0) # => "389"
  61. # 111.2345.to_s(:rounded, significant: true) # => "111"
  62. # 111.2345.to_s(:rounded, precision: 1, significant: true) # => "100"
  63. # 13.to_s(:rounded, precision: 5, significant: true) # => "13.000"
  64. # 111.234.to_s(:rounded, locale: :fr) # => "111,234"
  65. # 13.to_s(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true)
  66. # # => "13"
  67. # 389.32314.to_s(:rounded, precision: 4, significant: true) # => "389.3"
  68. # 1111.2345.to_s(:rounded, precision: 2, separator: ',', delimiter: '.')
  69. # # => "1.111,23"
  70. #
  71. # Human-friendly size in Bytes:
  72. # 123.to_s(:human_size) # => "123 Bytes"
  73. # 1234.to_s(:human_size) # => "1.21 KB"
  74. # 12345.to_s(:human_size) # => "12.1 KB"
  75. # 1234567.to_s(:human_size) # => "1.18 MB"
  76. # 1234567890.to_s(:human_size) # => "1.15 GB"
  77. # 1234567890123.to_s(:human_size) # => "1.12 TB"
  78. # 1234567890123456.to_s(:human_size) # => "1.1 PB"
  79. # 1234567890123456789.to_s(:human_size) # => "1.07 EB"
  80. # 1234567.to_s(:human_size, precision: 2) # => "1.2 MB"
  81. # 483989.to_s(:human_size, precision: 2) # => "470 KB"
  82. # 1234567.to_s(:human_size, precision: 2, separator: ',') # => "1,2 MB"
  83. # 1234567890123.to_s(:human_size, precision: 5) # => "1.1228 TB"
  84. # 524288000.to_s(:human_size, precision: 5) # => "500 MB"
  85. #
  86. # Human-friendly format:
  87. # 123.to_s(:human) # => "123"
  88. # 1234.to_s(:human) # => "1.23 Thousand"
  89. # 12345.to_s(:human) # => "12.3 Thousand"
  90. # 1234567.to_s(:human) # => "1.23 Million"
  91. # 1234567890.to_s(:human) # => "1.23 Billion"
  92. # 1234567890123.to_s(:human) # => "1.23 Trillion"
  93. # 1234567890123456.to_s(:human) # => "1.23 Quadrillion"
  94. # 1234567890123456789.to_s(:human) # => "1230 Quadrillion"
  95. # 489939.to_s(:human, precision: 2) # => "490 Thousand"
  96. # 489939.to_s(:human, precision: 4) # => "489.9 Thousand"
  97. # 1234567.to_s(:human, precision: 4,
  98. # significant: false) # => "1.2346 Million"
  99. # 1234567.to_s(:human, precision: 1,
  100. # separator: ',',
  101. # significant: false) # => "1,2 Million"
  102. 1 def to_s(format = nil, options = nil)
  103. 105 case format
  104. when nil
  105. 105 super()
  106. when Integer, String
  107. super(format)
  108. when :phone
  109. ActiveSupport::NumberHelper.number_to_phone(self, options || {})
  110. when :currency
  111. ActiveSupport::NumberHelper.number_to_currency(self, options || {})
  112. when :percentage
  113. ActiveSupport::NumberHelper.number_to_percentage(self, options || {})
  114. when :delimited
  115. ActiveSupport::NumberHelper.number_to_delimited(self, options || {})
  116. when :rounded
  117. ActiveSupport::NumberHelper.number_to_rounded(self, options || {})
  118. when :human
  119. ActiveSupport::NumberHelper.number_to_human(self, options || {})
  120. when :human_size
  121. ActiveSupport::NumberHelper.number_to_human_size(self, options || {})
  122. when Symbol
  123. super()
  124. else
  125. super(format)
  126. end
  127. end
  128. end
  129. # Ruby 2.4+ unifies Fixnum & Bignum into Integer.
  130. 1 if 0.class == Integer
  131. 1 Integer.prepend ActiveSupport::NumericWithFormat
  132. else
  133. Fixnum.prepend ActiveSupport::NumericWithFormat
  134. Bignum.prepend ActiveSupport::NumericWithFormat
  135. end
  136. 1 Float.prepend ActiveSupport::NumericWithFormat
  137. 1 BigDecimal.prepend ActiveSupport::NumericWithFormat

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/numeric/inquiry.rb

11.11% lines covered

9 relevant lines. 1 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 unless 1.respond_to?(:positive?) # TODO: Remove this file when we drop support to ruby < 2.3
  3. class Numeric
  4. # Returns true if the number is positive.
  5. #
  6. # 1.positive? # => true
  7. # 0.positive? # => false
  8. # -1.positive? # => false
  9. def positive?
  10. self > 0
  11. end
  12. # Returns true if the number is negative.
  13. #
  14. # -1.negative? # => true
  15. # 0.negative? # => false
  16. # 1.negative? # => false
  17. def negative?
  18. self < 0
  19. end
  20. end
  21. class Complex
  22. undef :positive?
  23. undef :negative?
  24. end
  25. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/securerandom.rb

50.0% lines covered

8 relevant lines. 4 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "securerandom"
  3. 1 module SecureRandom
  4. 1 BASE58_ALPHABET = ("0".."9").to_a + ("A".."Z").to_a + ("a".."z").to_a - ["0", "O", "I", "l"]
  5. # SecureRandom.base58 generates a random base58 string.
  6. #
  7. # The argument _n_ specifies the length, of the random string to be generated.
  8. #
  9. # If _n_ is not specified or is +nil+, 16 is assumed. It may be larger in the future.
  10. #
  11. # The result may contain alphanumeric characters except 0, O, I and l
  12. #
  13. # p SecureRandom.base58 # => "4kUgL2pdQMSCQtjE"
  14. # p SecureRandom.base58(24) # => "77TMHrHJFvFDwodq8w7Ev2m7"
  15. #
  16. 1 def self.base58(n = 16)
  17. SecureRandom.random_bytes(n).unpack("C*").map do |byte|
  18. idx = byte % 64
  19. idx = SecureRandom.random_number(58) if idx >= 58
  20. BASE58_ALPHABET[idx]
  21. end.join
  22. end
  23. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string.rb

100.0% lines covered

13 relevant lines. 13 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/string/conversions"
  3. 1 require "active_support/core_ext/string/filters"
  4. 1 require "active_support/core_ext/string/multibyte"
  5. 1 require "active_support/core_ext/string/starts_ends_with"
  6. 1 require "active_support/core_ext/string/inflections"
  7. 1 require "active_support/core_ext/string/access"
  8. 1 require "active_support/core_ext/string/behavior"
  9. 1 require "active_support/core_ext/string/output_safety"
  10. 1 require "active_support/core_ext/string/exclude"
  11. 1 require "active_support/core_ext/string/strip"
  12. 1 require "active_support/core_ext/string/inquiry"
  13. 1 require "active_support/core_ext/string/indent"
  14. 1 require "active_support/core_ext/string/zones"

target/rubygems/gems/activesupport-5.2.3/lib/active_support/core_ext/string/exclude.rb

66.67% lines covered

3 relevant lines. 2 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class String
  3. # The inverse of <tt>String#include?</tt>. Returns true if the string
  4. # does not include the other string.
  5. #
  6. # "hello".exclude? "lo" # => false
  7. # "hello".exclude? "ol" # => true
  8. # "hello".exclude? ?h # => false
  9. 1 def exclude?(string)
  10. !include?(string)
  11. end
  12. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/current_attributes.rb

62.75% lines covered

51 relevant lines. 32 lines covered and 19 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. # Abstract super class that provides a thread-isolated attributes singleton, which resets automatically
  4. # before and after each request. This allows you to keep all the per-request attributes easily
  5. # available to the whole system.
  6. #
  7. # The following full app-like example demonstrates how to use a Current class to
  8. # facilitate easy access to the global, per-request attributes without passing them deeply
  9. # around everywhere:
  10. #
  11. # # app/models/current.rb
  12. # class Current < ActiveSupport::CurrentAttributes
  13. # attribute :account, :user
  14. # attribute :request_id, :user_agent, :ip_address
  15. #
  16. # resets { Time.zone = nil }
  17. #
  18. # def user=(user)
  19. # super
  20. # self.account = user.account
  21. # Time.zone = user.time_zone
  22. # end
  23. # end
  24. #
  25. # # app/controllers/concerns/authentication.rb
  26. # module Authentication
  27. # extend ActiveSupport::Concern
  28. #
  29. # included do
  30. # before_action :authenticate
  31. # end
  32. #
  33. # private
  34. # def authenticate
  35. # if authenticated_user = User.find_by(id: cookies.encrypted[:user_id])
  36. # Current.user = authenticated_user
  37. # else
  38. # redirect_to new_session_url
  39. # end
  40. # end
  41. # end
  42. #
  43. # # app/controllers/concerns/set_current_request_details.rb
  44. # module SetCurrentRequestDetails
  45. # extend ActiveSupport::Concern
  46. #
  47. # included do
  48. # before_action do
  49. # Current.request_id = request.uuid
  50. # Current.user_agent = request.user_agent
  51. # Current.ip_address = request.ip
  52. # end
  53. # end
  54. # end
  55. #
  56. # class ApplicationController < ActionController::Base
  57. # include Authentication
  58. # include SetCurrentRequestDetails
  59. # end
  60. #
  61. # class MessagesController < ApplicationController
  62. # def create
  63. # Current.account.messages.create(message_params)
  64. # end
  65. # end
  66. #
  67. # class Message < ApplicationRecord
  68. # belongs_to :creator, default: -> { Current.user }
  69. # after_create { |message| Event.create(record: message) }
  70. # end
  71. #
  72. # class Event < ApplicationRecord
  73. # before_create do
  74. # self.request_id = Current.request_id
  75. # self.user_agent = Current.user_agent
  76. # self.ip_address = Current.ip_address
  77. # end
  78. # end
  79. #
  80. # A word of caution: It's easy to overdo a global singleton like Current and tangle your model as a result.
  81. # Current should only be used for a few, top-level globals, like account, user, and request details.
  82. # The attributes stuck in Current should be used by more or less all actions on all requests. If you start
  83. # sticking controller-specific attributes in there, you're going to create a mess.
  84. 1 class CurrentAttributes
  85. 1 include ActiveSupport::Callbacks
  86. 1 define_callbacks :reset
  87. 1 class << self
  88. # Returns singleton instance for this class in this thread. If none exists, one is created.
  89. 1 def instance
  90. current_instances[name] ||= new
  91. end
  92. # Declares one or more attributes that will be given both class and instance accessor methods.
  93. 1 def attribute(*names)
  94. 1 generated_attribute_methods.module_eval do
  95. 1 names.each do |name|
  96. 1 define_method(name) do
  97. attributes[name.to_sym]
  98. end
  99. 1 define_method("#{name}=") do |attribute|
  100. attributes[name.to_sym] = attribute
  101. end
  102. end
  103. end
  104. 1 names.each do |name|
  105. 1 define_singleton_method(name) do
  106. instance.public_send(name)
  107. end
  108. 1 define_singleton_method("#{name}=") do |attribute|
  109. instance.public_send("#{name}=", attribute)
  110. end
  111. end
  112. end
  113. # Calls this block after #reset is called on the instance. Used for resetting external collaborators, like Time.zone.
  114. 1 def resets(&block)
  115. set_callback :reset, :after, &block
  116. end
  117. 1 delegate :set, :reset, to: :instance
  118. 1 def reset_all # :nodoc:
  119. 6 current_instances.each_value(&:reset)
  120. end
  121. 1 def clear_all # :nodoc:
  122. reset_all
  123. current_instances.clear
  124. end
  125. 1 private
  126. 1 def generated_attribute_methods
  127. 2 @generated_attribute_methods ||= Module.new.tap { |mod| include mod }
  128. end
  129. 1 def current_instances
  130. 6 Thread.current[:current_attributes_instances] ||= {}
  131. end
  132. 1 def method_missing(name, *args, &block)
  133. # Caches the method definition as a singleton method of the receiver.
  134. #
  135. # By letting #delegate handle it, we avoid an enclosure that'll capture args.
  136. singleton_class.delegate name, to: :instance
  137. send(name, *args, &block)
  138. end
  139. end
  140. 1 attr_accessor :attributes
  141. 1 def initialize
  142. @attributes = {}
  143. end
  144. # Expose one or more attributes within a block. Old values are returned after the block concludes.
  145. # Example demonstrating the common use of needing to set Current attributes outside the request-cycle:
  146. #
  147. # class Chat::PublicationJob < ApplicationJob
  148. # def perform(attributes, room_number, creator)
  149. # Current.set(person: creator) do
  150. # Chat::Publisher.publish(attributes: attributes, room_number: room_number)
  151. # end
  152. # end
  153. # end
  154. 1 def set(set_attributes)
  155. old_attributes = compute_attributes(set_attributes.keys)
  156. assign_attributes(set_attributes)
  157. yield
  158. ensure
  159. assign_attributes(old_attributes)
  160. end
  161. # Reset all attributes. Should be called before and after actions, when used as a per-request singleton.
  162. 1 def reset
  163. run_callbacks :reset do
  164. self.attributes = {}
  165. end
  166. end
  167. 1 private
  168. 1 def assign_attributes(new_attributes)
  169. new_attributes.each { |key, value| public_send("#{key}=", value) }
  170. end
  171. 1 def compute_attributes(keys)
  172. keys.collect { |key| [ key, public_send(key) ] }.to_h
  173. end
  174. end
  175. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/digest.rb

80.0% lines covered

10 relevant lines. 8 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 class Digest #:nodoc:
  4. 1 class <<self
  5. 1 def hash_digest_class
  6. @hash_digest_class ||= ::Digest::MD5
  7. end
  8. 1 def hash_digest_class=(klass)
  9. 1 raise ArgumentError, "#{klass} is expected to implement hexdigest class method" unless klass.respond_to?(:hexdigest)
  10. 1 @hash_digest_class = klass
  11. end
  12. 1 def hexdigest(arg)
  13. hash_digest_class.hexdigest(arg)[0...32]
  14. end
  15. end
  16. end
  17. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/gzip.rb

52.94% lines covered

17 relevant lines. 9 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "zlib"
  3. 1 require "stringio"
  4. 1 module ActiveSupport
  5. # A convenient wrapper for the zlib standard library that allows
  6. # compression/decompression of strings with gzip.
  7. #
  8. # gzip = ActiveSupport::Gzip.compress('compress me!')
  9. # # => "\x1F\x8B\b\x00o\x8D\xCDO\x00\x03K\xCE\xCF-(J-.V\xC8MU\x04\x00R>n\x83\f\x00\x00\x00"
  10. #
  11. # ActiveSupport::Gzip.decompress(gzip)
  12. # # => "compress me!"
  13. 1 module Gzip
  14. 1 class Stream < StringIO
  15. 1 def initialize(*)
  16. super
  17. set_encoding "BINARY"
  18. end
  19. 1 def close; rewind; end
  20. end
  21. # Decompresses a gzipped string.
  22. 1 def self.decompress(source)
  23. Zlib::GzipReader.wrap(StringIO.new(source), &:read)
  24. end
  25. # Compresses a string using gzip.
  26. 1 def self.compress(source, level = Zlib::DEFAULT_COMPRESSION, strategy = Zlib::DEFAULT_STRATEGY)
  27. output = Stream.new
  28. gz = Zlib::GzipWriter.new(output, level, strategy)
  29. gz.write(source)
  30. gz.close
  31. output.string
  32. end
  33. end
  34. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_converter.rb

52.17% lines covered

46 relevant lines. 24 lines covered and 22 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/big_decimal/conversions"
  3. 1 require "active_support/core_ext/object/blank"
  4. 1 require "active_support/core_ext/hash/keys"
  5. 1 require "active_support/i18n"
  6. 1 require "active_support/core_ext/class/attribute"
  7. 1 module ActiveSupport
  8. 1 module NumberHelper
  9. 1 class NumberConverter # :nodoc:
  10. # Default and i18n option namespace per class
  11. 1 class_attribute :namespace
  12. # Does the object need a number that is a valid float?
  13. 1 class_attribute :validate_float
  14. 1 attr_reader :number, :opts
  15. 1 DEFAULTS = {
  16. # Used in number_to_delimited
  17. # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
  18. format: {
  19. # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
  20. separator: ".",
  21. # Delimits thousands (e.g. 1,000,000 is a million) (always in groups of three)
  22. delimiter: ",",
  23. # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
  24. precision: 3,
  25. # If set to true, precision will mean the number of significant digits instead
  26. # of the number of decimal digits (1234 with precision 2 becomes 1200, 1.23543 becomes 1.2)
  27. significant: false,
  28. # If set, the zeros after the decimal separator will always be stripped (eg.: 1.200 will be 1.2)
  29. strip_insignificant_zeros: false
  30. },
  31. # Used in number_to_currency
  32. currency: {
  33. format: {
  34. format: "%u%n",
  35. negative_format: "-%u%n",
  36. unit: "$",
  37. # These five are to override number.format and are optional
  38. separator: ".",
  39. delimiter: ",",
  40. precision: 2,
  41. significant: false,
  42. strip_insignificant_zeros: false
  43. }
  44. },
  45. # Used in number_to_percentage
  46. percentage: {
  47. format: {
  48. delimiter: "",
  49. format: "%n%"
  50. }
  51. },
  52. # Used in number_to_rounded
  53. precision: {
  54. format: {
  55. delimiter: ""
  56. }
  57. },
  58. # Used in number_to_human_size and number_to_human
  59. human: {
  60. format: {
  61. # These five are to override number.format and are optional
  62. delimiter: "",
  63. precision: 3,
  64. significant: true,
  65. strip_insignificant_zeros: true
  66. },
  67. # Used in number_to_human_size
  68. storage_units: {
  69. # Storage units output formatting.
  70. # %u is the storage unit, %n is the number (default: 2 MB)
  71. format: "%n %u",
  72. units: {
  73. byte: "Bytes",
  74. kb: "KB",
  75. mb: "MB",
  76. gb: "GB",
  77. tb: "TB"
  78. }
  79. },
  80. # Used in number_to_human
  81. decimal_units: {
  82. format: "%n %u",
  83. # Decimal units output formatting
  84. # By default we will only quantify some of the exponents
  85. # but the commented ones might be defined or overridden
  86. # by the user.
  87. units: {
  88. # femto: Quadrillionth
  89. # pico: Trillionth
  90. # nano: Billionth
  91. # micro: Millionth
  92. # mili: Thousandth
  93. # centi: Hundredth
  94. # deci: Tenth
  95. unit: "",
  96. # ten:
  97. # one: Ten
  98. # other: Tens
  99. # hundred: Hundred
  100. thousand: "Thousand",
  101. million: "Million",
  102. billion: "Billion",
  103. trillion: "Trillion",
  104. quadrillion: "Quadrillion"
  105. }
  106. }
  107. }
  108. }
  109. 1 def self.convert(number, options)
  110. new(number, options).execute
  111. end
  112. 1 def initialize(number, options)
  113. @number = number
  114. @opts = options.symbolize_keys
  115. end
  116. 1 def execute
  117. if !number
  118. nil
  119. elsif validate_float? && !valid_float?
  120. number
  121. else
  122. convert
  123. end
  124. end
  125. 1 private
  126. 1 def options
  127. @options ||= format_options.merge(opts)
  128. end
  129. 1 def format_options
  130. default_format_options.merge!(i18n_format_options)
  131. end
  132. 1 def default_format_options
  133. options = DEFAULTS[:format].dup
  134. options.merge!(DEFAULTS[namespace][:format]) if namespace
  135. options
  136. end
  137. 1 def i18n_format_options
  138. locale = opts[:locale]
  139. options = I18n.translate(:'number.format', locale: locale, default: {}).dup
  140. if namespace
  141. options.merge!(I18n.translate(:"number.#{namespace}.format", locale: locale, default: {}))
  142. end
  143. options
  144. end
  145. 1 def translate_number_value_with_default(key, i18n_options = {})
  146. I18n.translate(key, { default: default_value(key), scope: :number }.merge!(i18n_options))
  147. end
  148. 1 def translate_in_locale(key, i18n_options = {})
  149. translate_number_value_with_default(key, { locale: options[:locale] }.merge(i18n_options))
  150. end
  151. 1 def default_value(key)
  152. key.split(".").reduce(DEFAULTS) { |defaults, k| defaults[k.to_sym] }
  153. end
  154. 1 def valid_float?
  155. Float(number)
  156. rescue ArgumentError, TypeError
  157. false
  158. end
  159. end
  160. end
  161. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_currency_converter.rb

40.0% lines covered

25 relevant lines. 10 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/numeric/inquiry"
  3. 1 module ActiveSupport
  4. 1 module NumberHelper
  5. 1 class NumberToCurrencyConverter < NumberConverter # :nodoc:
  6. 1 self.namespace = :currency
  7. 1 def convert
  8. number = self.number.to_s.strip
  9. format = options[:format]
  10. if number.to_f.negative?
  11. format = options[:negative_format]
  12. number = absolute_value(number)
  13. end
  14. rounded_number = NumberToRoundedConverter.convert(number, options)
  15. format.gsub("%n".freeze, rounded_number).gsub("%u".freeze, options[:unit])
  16. end
  17. 1 private
  18. 1 def absolute_value(number)
  19. number.respond_to?(:abs) ? number.abs : number.sub(/\A-/, "")
  20. end
  21. 1 def options
  22. @options ||= begin
  23. defaults = default_format_options.merge(i18n_opts)
  24. # Override negative format if format options are given
  25. defaults[:negative_format] = "-#{opts[:format]}" if opts[:format]
  26. defaults.merge!(opts)
  27. end
  28. end
  29. 1 def i18n_opts
  30. # Set International negative format if it does not exist
  31. i18n = i18n_format_options
  32. i18n[:negative_format] ||= "-#{i18n[:format]}" if i18n[:format]
  33. i18n
  34. end
  35. end
  36. end
  37. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_delimited_converter.rb

60.0% lines covered

15 relevant lines. 9 lines covered and 6 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToDelimitedConverter < NumberConverter #:nodoc:
  5. 1 self.validate_float = true
  6. 1 DEFAULT_DELIMITER_REGEX = /(\d)(?=(\d\d\d)+(?!\d))/
  7. 1 def convert
  8. parts.join(options[:separator])
  9. end
  10. 1 private
  11. 1 def parts
  12. left, right = number.to_s.split(".".freeze)
  13. left.gsub!(delimiter_pattern) do |digit_to_delimit|
  14. "#{digit_to_delimit}#{options[:delimiter]}"
  15. end
  16. [left, right].compact
  17. end
  18. 1 def delimiter_pattern
  19. options.fetch(:delimiter_pattern, DEFAULT_DELIMITER_REGEX)
  20. end
  21. end
  22. end
  23. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_converter.rb

35.14% lines covered

37 relevant lines. 13 lines covered and 24 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToHumanConverter < NumberConverter # :nodoc:
  5. 1 DECIMAL_UNITS = { 0 => :unit, 1 => :ten, 2 => :hundred, 3 => :thousand, 6 => :million, 9 => :billion, 12 => :trillion, 15 => :quadrillion,
  6. -1 => :deci, -2 => :centi, -3 => :mili, -6 => :micro, -9 => :nano, -12 => :pico, -15 => :femto }
  7. 1 INVERTED_DECIMAL_UNITS = DECIMAL_UNITS.invert
  8. 1 self.namespace = :human
  9. 1 self.validate_float = true
  10. 1 def convert # :nodoc:
  11. @number = RoundingHelper.new(options).round(number)
  12. @number = Float(number)
  13. # for backwards compatibility with those that didn't add strip_insignificant_zeros to their locale files
  14. unless options.key?(:strip_insignificant_zeros)
  15. options[:strip_insignificant_zeros] = true
  16. end
  17. units = opts[:units]
  18. exponent = calculate_exponent(units)
  19. @number = number / (10**exponent)
  20. rounded_number = NumberToRoundedConverter.convert(number, options)
  21. unit = determine_unit(units, exponent)
  22. format.gsub("%n".freeze, rounded_number).gsub("%u".freeze, unit).strip
  23. end
  24. 1 private
  25. 1 def format
  26. options[:format] || translate_in_locale("human.decimal_units.format")
  27. end
  28. 1 def determine_unit(units, exponent)
  29. exp = DECIMAL_UNITS[exponent]
  30. case units
  31. when Hash
  32. units[exp] || ""
  33. when String, Symbol
  34. I18n.translate("#{units}.#{exp}", locale: options[:locale], count: number.to_i)
  35. else
  36. translate_in_locale("human.decimal_units.units.#{exp}", count: number.to_i)
  37. end
  38. end
  39. 1 def calculate_exponent(units)
  40. exponent = number != 0 ? Math.log10(number.abs).floor : 0
  41. unit_exponents(units).find { |e| exponent >= e } || 0
  42. end
  43. 1 def unit_exponents(units)
  44. case units
  45. when Hash
  46. units
  47. when String, Symbol
  48. I18n.translate(units.to_s, locale: options[:locale], raise: true)
  49. when nil
  50. translate_in_locale("human.decimal_units.units", raise: true)
  51. else
  52. raise ArgumentError, ":units must be a Hash or String translation scope."
  53. end.keys.map { |e_name| INVERTED_DECIMAL_UNITS[e_name] }.sort_by(&:-@)
  54. end
  55. end
  56. end
  57. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_human_size_converter.rb

43.75% lines covered

32 relevant lines. 14 lines covered and 18 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToHumanSizeConverter < NumberConverter #:nodoc:
  5. 1 STORAGE_UNITS = [:byte, :kb, :mb, :gb, :tb, :pb, :eb]
  6. 1 self.namespace = :human
  7. 1 self.validate_float = true
  8. 1 def convert
  9. @number = Float(number)
  10. # for backwards compatibility with those that didn't add strip_insignificant_zeros to their locale files
  11. unless options.key?(:strip_insignificant_zeros)
  12. options[:strip_insignificant_zeros] = true
  13. end
  14. if smaller_than_base?
  15. number_to_format = number.to_i.to_s
  16. else
  17. human_size = number / (base**exponent)
  18. number_to_format = NumberToRoundedConverter.convert(human_size, options)
  19. end
  20. conversion_format.gsub("%n".freeze, number_to_format).gsub("%u".freeze, unit)
  21. end
  22. 1 private
  23. 1 def conversion_format
  24. translate_number_value_with_default("human.storage_units.format", locale: options[:locale], raise: true)
  25. end
  26. 1 def unit
  27. translate_number_value_with_default(storage_unit_key, locale: options[:locale], count: number.to_i, raise: true)
  28. end
  29. 1 def storage_unit_key
  30. key_end = smaller_than_base? ? "byte" : STORAGE_UNITS[exponent]
  31. "human.storage_units.units.#{key_end}"
  32. end
  33. 1 def exponent
  34. max = STORAGE_UNITS.size - 1
  35. exp = (Math.log(number) / Math.log(base)).to_i
  36. exp = max if exp > max # avoid overflow for the highest unit
  37. exp
  38. end
  39. 1 def smaller_than_base?
  40. number.to_i < base
  41. end
  42. 1 def base
  43. 1024
  44. end
  45. end
  46. end
  47. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_percentage_converter.rb

71.43% lines covered

7 relevant lines. 5 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToPercentageConverter < NumberConverter # :nodoc:
  5. 1 self.namespace = :percentage
  6. 1 def convert
  7. rounded_number = NumberToRoundedConverter.convert(number, options)
  8. options[:format].gsub("%n".freeze, rounded_number)
  9. end
  10. end
  11. end
  12. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_phone_converter.rb

39.39% lines covered

33 relevant lines. 13 lines covered and 20 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToPhoneConverter < NumberConverter #:nodoc:
  5. 1 def convert
  6. str = country_code(opts[:country_code]).dup
  7. str << convert_to_phone_number(number.to_s.strip)
  8. str << phone_ext(opts[:extension])
  9. end
  10. 1 private
  11. 1 def convert_to_phone_number(number)
  12. if opts[:area_code]
  13. convert_with_area_code(number)
  14. else
  15. convert_without_area_code(number)
  16. end
  17. end
  18. 1 def convert_with_area_code(number)
  19. default_pattern = /(\d{1,3})(\d{3})(\d{4}$)/
  20. number.gsub!(regexp_pattern(default_pattern),
  21. "(\\1) \\2#{delimiter}\\3")
  22. number
  23. end
  24. 1 def convert_without_area_code(number)
  25. default_pattern = /(\d{0,3})(\d{3})(\d{4})$/
  26. number.gsub!(regexp_pattern(default_pattern),
  27. "\\1#{delimiter}\\2#{delimiter}\\3")
  28. number.slice!(0, 1) if start_with_delimiter?(number)
  29. number
  30. end
  31. 1 def start_with_delimiter?(number)
  32. delimiter.present? && number.start_with?(delimiter)
  33. end
  34. 1 def delimiter
  35. opts[:delimiter] || "-"
  36. end
  37. 1 def country_code(code)
  38. code.blank? ? "" : "+#{code}#{delimiter}"
  39. end
  40. 1 def phone_ext(ext)
  41. ext.blank? ? "" : " x #{ext}"
  42. end
  43. 1 def regexp_pattern(default_pattern)
  44. opts.fetch :pattern, default_pattern
  45. end
  46. end
  47. end
  48. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/number_to_rounded_converter.rb

29.03% lines covered

31 relevant lines. 9 lines covered and 22 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class NumberToRoundedConverter < NumberConverter # :nodoc:
  5. 1 self.namespace = :precision
  6. 1 self.validate_float = true
  7. 1 def convert
  8. helper = RoundingHelper.new(options)
  9. rounded_number = helper.round(number)
  10. if precision = options[:precision]
  11. if options[:significant] && precision > 0
  12. digits = helper.digit_count(rounded_number)
  13. precision -= digits
  14. precision = 0 if precision < 0 # don't let it be negative
  15. end
  16. formatted_string =
  17. if BigDecimal === rounded_number && rounded_number.finite?
  18. s = rounded_number.to_s("F")
  19. s << "0".freeze * precision
  20. a, b = s.split(".".freeze, 2)
  21. a << ".".freeze
  22. a << b[0, precision]
  23. else
  24. "%00.#{precision}f" % rounded_number
  25. end
  26. else
  27. formatted_string = rounded_number
  28. end
  29. delimited_number = NumberToDelimitedConverter.convert(formatted_string, options)
  30. format_number(delimited_number)
  31. end
  32. 1 private
  33. 1 def strip_insignificant_zeros
  34. options[:strip_insignificant_zeros]
  35. end
  36. 1 def format_number(number)
  37. if strip_insignificant_zeros
  38. escaped_separator = Regexp.escape(options[:separator])
  39. number.sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, "")
  40. else
  41. number
  42. end
  43. end
  44. end
  45. end
  46. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/number_helper/rounding_helper.rb

37.84% lines covered

37 relevant lines. 14 lines covered and 23 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module NumberHelper
  4. 1 class RoundingHelper # :nodoc:
  5. 1 attr_reader :options
  6. 1 def initialize(options)
  7. @options = options
  8. end
  9. 1 def round(number)
  10. return number unless precision
  11. number = convert_to_decimal(number)
  12. if significant && precision > 0
  13. round_significant(number)
  14. else
  15. round_without_significant(number)
  16. end
  17. end
  18. 1 def digit_count(number)
  19. return 1 if number.zero?
  20. (Math.log10(absolute_number(number)) + 1).floor
  21. end
  22. 1 private
  23. 1 def round_without_significant(number)
  24. number = number.round(precision)
  25. number = number.to_i if precision == 0 && number.finite?
  26. number = number.abs if number.zero? # prevent showing negative zeros
  27. number
  28. end
  29. 1 def round_significant(number)
  30. return 0 if number.zero?
  31. digits = digit_count(number)
  32. multiplier = 10**(digits - precision)
  33. (number / BigDecimal(multiplier.to_f.to_s)).round * multiplier
  34. end
  35. 1 def convert_to_decimal(number)
  36. case number
  37. when Float, String
  38. BigDecimal(number.to_s)
  39. when Rational
  40. BigDecimal(number, digit_count(number.to_i) + precision)
  41. else
  42. number.to_d
  43. end
  44. end
  45. 1 def precision
  46. options[:precision]
  47. end
  48. 1 def significant
  49. options[:significant]
  50. end
  51. 1 def absolute_number(number)
  52. number.respond_to?(:abs) ? number.abs : number.to_d.abs
  53. end
  54. end
  55. end
  56. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/ordered_hash.rb

58.82% lines covered

17 relevant lines. 10 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "yaml"
  3. 1 YAML.add_builtin_type("omap") do |type, val|
  4. ActiveSupport::OrderedHash[val.map { |v| v.to_a.first }]
  5. end
  6. 1 module ActiveSupport
  7. # DEPRECATED: <tt>ActiveSupport::OrderedHash</tt> implements a hash that preserves
  8. # insertion order.
  9. #
  10. # oh = ActiveSupport::OrderedHash.new
  11. # oh[:a] = 1
  12. # oh[:b] = 2
  13. # oh.keys # => [:a, :b], this order is guaranteed
  14. #
  15. # Also, maps the +omap+ feature for YAML files
  16. # (See http://yaml.org/type/omap.html) to support ordered items
  17. # when loading from yaml.
  18. #
  19. # <tt>ActiveSupport::OrderedHash</tt> is namespaced to prevent conflicts
  20. # with other implementations.
  21. 1 class OrderedHash < ::Hash
  22. 1 def to_yaml_type
  23. "!tag:yaml.org,2002:omap"
  24. end
  25. 1 def encode_with(coder)
  26. coder.represent_seq "!omap", map { |k, v| { k => v } }
  27. end
  28. 1 def select(*args, &block)
  29. dup.tap { |hash| hash.select!(*args, &block) }
  30. end
  31. 1 def reject(*args, &block)
  32. dup.tap { |hash| hash.reject!(*args, &block) }
  33. end
  34. 1 def nested_under_indifferent_access
  35. self
  36. end
  37. # Returns true to make sure that this hash is extractable via <tt>Array#extract_options!</tt>
  38. 1 def extractable_options?
  39. true
  40. end
  41. end
  42. end

target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/autorun.rb

100.0% lines covered

3 relevant lines. 3 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 gem "minitest"
  3. 1 require "minitest"
  4. 1 Minitest.autorun

target/rubygems/gems/activesupport-5.2.3/lib/active_support/testing/stream.rb

25.93% lines covered

27 relevant lines. 7 lines covered and 20 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module ActiveSupport
  3. 1 module Testing
  4. 1 module Stream #:nodoc:
  5. 1 private
  6. 1 def silence_stream(stream)
  7. old_stream = stream.dup
  8. stream.reopen(IO::NULL)
  9. stream.sync = true
  10. yield
  11. ensure
  12. stream.reopen(old_stream)
  13. old_stream.close
  14. end
  15. 1 def quietly
  16. silence_stream(STDOUT) do
  17. silence_stream(STDERR) do
  18. yield
  19. end
  20. end
  21. end
  22. 1 def capture(stream)
  23. stream = stream.to_s
  24. captured_stream = Tempfile.new(stream)
  25. stream_io = eval("$#{stream}")
  26. origin_stream = stream_io.dup
  27. stream_io.reopen(captured_stream)
  28. yield
  29. stream_io.rewind
  30. return captured_stream.read
  31. ensure
  32. captured_stream.close
  33. captured_stream.unlink
  34. stream_io.reopen(origin_stream)
  35. end
  36. end
  37. end
  38. end

target/rubygems/gems/case_transform-0.2/lib/case_transform.rb

34.88% lines covered

43 relevant lines. 15 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'active_support/core_ext/hash/keys'
  3. 1 require 'active_support/core_ext/string'
  4. 1 require 'case_transform/version'
  5. 1 module CaseTransform
  6. 1 class << self
  7. 1 def camel_cache
  8. @camel_cache ||= {}
  9. end
  10. 1 def camel_lower_cache
  11. @camel_lower_cache ||= {}
  12. end
  13. 1 def dash_cache
  14. @dash_cache ||= {}
  15. end
  16. 1 def underscore_cache
  17. @underscore_cache ||= {}
  18. end
  19. # Transforms values to UpperCamelCase or PascalCase.
  20. #
  21. # @example:
  22. # "some_key" => "SomeKey",
  23. 1 def camel(value)
  24. case value
  25. when Array then value.map { |item| camel(item) }
  26. when Hash then value.deep_transform_keys! { |key| camel(key) }
  27. when Symbol then camel(value.to_s).to_sym
  28. when String then camel_cache[value] ||= value.underscore.camelize
  29. else value
  30. end
  31. end
  32. # Transforms values to camelCase.
  33. #
  34. # @example:
  35. # "some_key" => "someKey",
  36. 1 def camel_lower(value)
  37. case value
  38. when Array then value.map { |item| camel_lower(item) }
  39. when Hash then value.deep_transform_keys! { |key| camel_lower(key) }
  40. when Symbol then camel_lower(value.to_s).to_sym
  41. when String then camel_lower_cache[value] ||= value.underscore.camelize(:lower)
  42. else value
  43. end
  44. end
  45. # Transforms values to dashed-case.
  46. # This is the default case for the JsonApi adapter.
  47. #
  48. # @example:
  49. # "some_key" => "some-key",
  50. 1 def dash(value)
  51. case value
  52. when Array then value.map { |item| dash(item) }
  53. when Hash then value.deep_transform_keys! { |key| dash(key) }
  54. when Symbol then dash(value.to_s).to_sym
  55. when String then dash_cache[value] ||= value.underscore.dasherize
  56. else value
  57. end
  58. end
  59. # Transforms values to underscore_case.
  60. # This is the default case for deserialization in the JsonApi adapter.
  61. #
  62. # @example:
  63. # "some-key" => "some_key",
  64. 1 def underscore(value)
  65. case value
  66. when Array then value.map { |item| underscore(item) }
  67. when Hash then value.deep_transform_keys! { |key| underscore(key) }
  68. when Symbol then underscore(value.to_s).to_sym
  69. when String then underscore_cache[value] ||= value.underscore
  70. else value
  71. end
  72. end
  73. # Returns the value unaltered
  74. 1 def unaltered(value)
  75. 1 value
  76. end
  77. end
  78. end

target/rubygems/gems/case_transform-0.2/lib/case_transform/version.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module CaseTransform
  3. 1 VERSION = '0.2'.freeze
  4. end

target/rubygems/gems/globalid-0.4.2/lib/global_id/identification.rb

71.43% lines covered

14 relevant lines. 10 lines covered and 4 lines missed.
    
  1. 1 require 'active_support/concern'
  2. 1 class GlobalID
  3. 1 module Identification
  4. 1 extend ActiveSupport::Concern
  5. 1 def to_global_id(options = {})
  6. GlobalID.create(self, options)
  7. end
  8. 1 alias to_gid to_global_id
  9. 1 def to_gid_param(options = {})
  10. to_global_id(options).to_param
  11. end
  12. 1 def to_signed_global_id(options = {})
  13. SignedGlobalID.create(self, options)
  14. end
  15. 1 alias to_sgid to_signed_global_id
  16. 1 def to_sgid_param(options = {})
  17. to_signed_global_id(options).to_param
  18. end
  19. end
  20. end

target/rubygems/gems/globalid-0.4.2/lib/global_id/locator.rb

50.0% lines covered

64 relevant lines. 32 lines covered and 32 lines missed.
    
  1. 1 require 'active_support'
  2. 1 require 'active_support/core_ext/enumerable' # For Enumerable#index_by
  3. 1 class GlobalID
  4. 1 module Locator
  5. 1 class << self
  6. # Takes either a GlobalID or a string that can be turned into a GlobalID
  7. #
  8. # Options:
  9. # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
  10. # allowed to be located. Passing one or more classes limits instances of returned
  11. # classes to those classes or their subclasses. Passing one or more modules in limits
  12. # instances of returned classes to those including that module. If no classes or
  13. # modules match, +nil+ is returned.
  14. 1 def locate(gid, options = {})
  15. if gid = GlobalID.parse(gid)
  16. locator_for(gid).locate gid if find_allowed?(gid.model_class, options[:only])
  17. end
  18. end
  19. # Takes an array of GlobalIDs or strings that can be turned into a GlobalIDs.
  20. # All GlobalIDs must belong to the same app, as they will be located using
  21. # the same locator using its locate_many method.
  22. #
  23. # By default the GlobalIDs will be located using Model.find(array_of_ids), so the
  24. # models must respond to that finder signature.
  25. #
  26. # This approach will efficiently call only one #find (or #where(id: id), when using ignore_missing)
  27. # per model class, but still interpolate the results to match the order in which the gids were passed.
  28. #
  29. # Options:
  30. # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
  31. # allowed to be located. Passing one or more classes limits instances of returned
  32. # classes to those classes or their subclasses. Passing one or more modules in limits
  33. # instances of returned classes to those including that module. If no classes or
  34. # modules match, +nil+ is returned.
  35. # * <tt>:ignore_missing</tt> - By default, locate_many will call #find on the model to locate the
  36. # ids extracted from the GIDs. In Active Record (and other data stores following the same pattern),
  37. # #find will raise an exception if a named ID can't be found. When you set this option to true,
  38. # we will use #where(id: ids) instead, which does not raise on missing records.
  39. 1 def locate_many(gids, options = {})
  40. if (allowed_gids = parse_allowed(gids, options[:only])).any?
  41. locator = locator_for(allowed_gids.first)
  42. locator.locate_many(allowed_gids, options)
  43. else
  44. []
  45. end
  46. end
  47. # Takes either a SignedGlobalID or a string that can be turned into a SignedGlobalID
  48. #
  49. # Options:
  50. # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
  51. # allowed to be located. Passing one or more classes limits instances of returned
  52. # classes to those classes or their subclasses. Passing one or more modules in limits
  53. # instances of returned classes to those including that module. If no classes or
  54. # modules match, +nil+ is returned.
  55. 1 def locate_signed(sgid, options = {})
  56. SignedGlobalID.find sgid, options
  57. end
  58. # Takes an array of SignedGlobalIDs or strings that can be turned into a SignedGlobalIDs.
  59. # The SignedGlobalIDs are located using Model.find(array_of_ids), so the models must respond to
  60. # that finder signature.
  61. #
  62. # This approach will efficiently call only one #find per model class, but still interpolate
  63. # the results to match the order in which the gids were passed.
  64. #
  65. # Options:
  66. # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
  67. # allowed to be located. Passing one or more classes limits instances of returned
  68. # classes to those classes or their subclasses. Passing one or more modules in limits
  69. # instances of returned classes to those including that module. If no classes or
  70. # modules match, +nil+ is returned.
  71. 1 def locate_many_signed(sgids, options = {})
  72. locate_many sgids.collect { |sgid| SignedGlobalID.parse(sgid, options.slice(:for)) }.compact, options
  73. end
  74. # Tie a locator to an app.
  75. # Useful when different apps collaborate and reference each others' Global IDs.
  76. #
  77. # The locator can be either a block or a class.
  78. #
  79. # Using a block:
  80. #
  81. # GlobalID::Locator.use :foo do |gid|
  82. # FooRemote.const_get(gid.model_name).find(gid.model_id)
  83. # end
  84. #
  85. # Using a class:
  86. #
  87. # GlobalID::Locator.use :bar, BarLocator.new
  88. #
  89. # class BarLocator
  90. # def locate(gid)
  91. # @search_client.search name: gid.model_name, id: gid.model_id
  92. # end
  93. # end
  94. 1 def use(app, locator = nil, &locator_block)
  95. raise ArgumentError, 'No locator provided. Pass a block or an object that responds to #locate.' unless locator || block_given?
  96. URI::GID.validate_app(app)
  97. @locators[normalize_app(app)] = locator || BlockLocator.new(locator_block)
  98. end
  99. 1 private
  100. 1 def locator_for(gid)
  101. @locators.fetch(normalize_app(gid.app)) { DEFAULT_LOCATOR }
  102. end
  103. 1 def find_allowed?(model_class, only = nil)
  104. only ? Array(only).any? { |c| model_class <= c } : true
  105. end
  106. 1 def parse_allowed(gids, only = nil)
  107. gids.collect { |gid| GlobalID.parse(gid) }.compact.select { |gid| find_allowed?(gid.model_class, only) }
  108. end
  109. 1 def normalize_app(app)
  110. app.to_s.downcase
  111. end
  112. end
  113. 1 private
  114. 1 @locators = {}
  115. 1 class BaseLocator
  116. 1 def locate(gid)
  117. gid.model_class.find gid.model_id
  118. end
  119. 1 def locate_many(gids, options = {})
  120. models_and_ids = gids.collect { |gid| [ gid.model_class, gid.model_id ] }
  121. ids_by_model = models_and_ids.group_by(&:first)
  122. loaded_by_model = Hash[ids_by_model.map { |model, ids|
  123. [ model, find_records(model, ids.map(&:last), ignore_missing: options[:ignore_missing]).index_by { |record| record.id.to_s } ]
  124. }]
  125. models_and_ids.collect { |(model, id)| loaded_by_model[model][id] }.compact
  126. end
  127. 1 private
  128. 1 def find_records(model_class, ids, options)
  129. if options[:ignore_missing]
  130. model_class.where(id: ids)
  131. else
  132. model_class.find(ids)
  133. end
  134. end
  135. end
  136. 1 class UnscopedLocator < BaseLocator
  137. 1 def locate(gid)
  138. unscoped(gid.model_class) { super }
  139. end
  140. 1 private
  141. 1 def find_records(model_class, ids, options)
  142. unscoped(model_class) { super }
  143. end
  144. 1 def unscoped(model_class)
  145. if model_class.respond_to?(:unscoped)
  146. model_class.unscoped { yield }
  147. else
  148. yield
  149. end
  150. end
  151. end
  152. 1 DEFAULT_LOCATOR = UnscopedLocator.new
  153. 1 class BlockLocator
  154. 1 def initialize(block)
  155. @locator = block
  156. end
  157. 1 def locate(gid)
  158. @locator.call(gid)
  159. end
  160. 1 def locate_many(gids, options = {})
  161. gids.map { |gid| locate(gid) }
  162. end
  163. end
  164. end
  165. end

target/rubygems/gems/globalid-0.4.2/lib/global_id/signed_global_id.rb

53.33% lines covered

45 relevant lines. 24 lines covered and 21 lines missed.
    
  1. 1 require 'global_id'
  2. 1 require 'active_support/message_verifier'
  3. 1 require 'time'
  4. 1 class SignedGlobalID < GlobalID
  5. 1 class ExpiredMessage < StandardError; end
  6. 1 class << self
  7. 1 attr_accessor :verifier
  8. 1 def parse(sgid, options = {})
  9. super verify(sgid.to_s, options), options
  10. end
  11. # Grab the verifier from options and fall back to SignedGlobalID.verifier.
  12. # Raise ArgumentError if neither is available.
  13. 1 def pick_verifier(options)
  14. options.fetch :verifier do
  15. verifier || raise(ArgumentError, 'Pass a `verifier:` option with an `ActiveSupport::MessageVerifier` instance, or set a default SignedGlobalID.verifier.')
  16. end
  17. end
  18. 1 attr_accessor :expires_in
  19. 1 DEFAULT_PURPOSE = "default"
  20. 1 def pick_purpose(options)
  21. options.fetch :for, DEFAULT_PURPOSE
  22. end
  23. 1 private
  24. 1 def verify(sgid, options)
  25. metadata = pick_verifier(options).verify(sgid)
  26. raise_if_expired(metadata['expires_at'])
  27. metadata['gid'] if pick_purpose(options) == metadata['purpose']
  28. rescue ActiveSupport::MessageVerifier::InvalidSignature, ExpiredMessage
  29. nil
  30. end
  31. 1 def raise_if_expired(expires_at)
  32. if expires_at && Time.now.utc > Time.iso8601(expires_at)
  33. raise ExpiredMessage, 'This signed global id has expired.'
  34. end
  35. end
  36. end
  37. 1 attr_reader :verifier, :purpose, :expires_at
  38. 1 def initialize(gid, options = {})
  39. super
  40. @verifier = self.class.pick_verifier(options)
  41. @purpose = self.class.pick_purpose(options)
  42. @expires_at = pick_expiration(options)
  43. end
  44. 1 def to_s
  45. @sgid ||= @verifier.generate(to_h)
  46. end
  47. 1 alias to_param to_s
  48. 1 def to_h
  49. # Some serializers decodes symbol keys to symbols, others to strings.
  50. # Using string keys remedies that.
  51. { 'gid' => @uri.to_s, 'purpose' => purpose, 'expires_at' => encoded_expiration }
  52. end
  53. 1 def ==(other)
  54. super && @purpose == other.purpose
  55. end
  56. 1 private
  57. 1 def encoded_expiration
  58. expires_at.utc.iso8601(3) if expires_at
  59. end
  60. 1 def pick_expiration(options)
  61. return options[:expires_at] if options.key?(:expires_at)
  62. if expires_in = options.fetch(:expires_in) { self.class.expires_in }
  63. expires_in.from_now
  64. end
  65. end
  66. end

target/rubygems/gems/globalid-0.4.2/lib/global_id/verifier.rb

77.78% lines covered

9 relevant lines. 7 lines covered and 2 lines missed.
    
  1. 1 require 'active_support'
  2. 1 require 'active_support/message_verifier'
  3. 1 class GlobalID
  4. 1 class Verifier < ActiveSupport::MessageVerifier
  5. 1 private
  6. 1 def encode(data)
  7. ::Base64.urlsafe_encode64(data)
  8. end
  9. 1 def decode(data)
  10. ::Base64.urlsafe_decode64(data)
  11. end
  12. end
  13. end

target/rubygems/gems/i18n-1.6.0/lib/i18n/backend.rb

100.0% lines covered

17 relevant lines. 17 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module I18n
  3. 1 module Backend
  4. 1 autoload :Base, 'i18n/backend/base'
  5. 1 autoload :InterpolationCompiler, 'i18n/backend/interpolation_compiler'
  6. 1 autoload :Cache, 'i18n/backend/cache'
  7. 1 autoload :CacheFile, 'i18n/backend/cache_file'
  8. 1 autoload :Cascade, 'i18n/backend/cascade'
  9. 1 autoload :Chain, 'i18n/backend/chain'
  10. 1 autoload :Fallbacks, 'i18n/backend/fallbacks'
  11. 1 autoload :Flatten, 'i18n/backend/flatten'
  12. 1 autoload :Gettext, 'i18n/backend/gettext'
  13. 1 autoload :KeyValue, 'i18n/backend/key_value'
  14. 1 autoload :Memoize, 'i18n/backend/memoize'
  15. 1 autoload :Metadata, 'i18n/backend/metadata'
  16. 1 autoload :Pluralization, 'i18n/backend/pluralization'
  17. 1 autoload :Simple, 'i18n/backend/simple'
  18. 1 autoload :Transliterator, 'i18n/backend/transliterator'
  19. end
  20. end

target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/base.rb

25.56% lines covered

133 relevant lines. 34 lines covered and 99 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'yaml'
  3. 1 require 'json'
  4. 1 require 'i18n/core_ext/hash'
  5. 1 module I18n
  6. 1 module Backend
  7. 1 module Base
  8. 1 using I18n::HashRefinements
  9. 1 include I18n::Backend::Transliterator
  10. # Accepts a list of paths to translation files. Loads translations from
  11. # plain Ruby (*.rb), YAML files (*.yml), or JSON files (*.json). See #load_rb, #load_yml, and #load_json
  12. # for details.
  13. 1 def load_translations(*filenames)
  14. filenames = I18n.load_path if filenames.empty?
  15. filenames.flatten.each { |filename| load_file(filename) }
  16. end
  17. # This method receives a locale, a data hash and options for storing translations.
  18. # Should be implemented
  19. 1 def store_translations(locale, data, options = EMPTY_HASH)
  20. raise NotImplementedError
  21. end
  22. 1 def translate(locale, key, options = EMPTY_HASH)
  23. raise I18n::ArgumentError if (key.is_a?(String) || key.is_a?(Symbol)) && key.empty?
  24. raise InvalidLocale.new(locale) unless locale
  25. return nil if key.nil? && !options.key?(:default)
  26. entry = lookup(locale, key, options[:scope], options) unless key.nil?
  27. if entry.nil? && options.key?(:default)
  28. entry = default(locale, key, options[:default], options)
  29. else
  30. entry = resolve(locale, key, entry, options)
  31. end
  32. count = options[:count]
  33. if entry.nil? && (subtrees? || !count)
  34. if (options.key?(:default) && !options[:default].nil?) || !options.key?(:default)
  35. throw(:exception, I18n::MissingTranslation.new(locale, key, options))
  36. end
  37. end
  38. entry = entry.dup if entry.is_a?(String)
  39. entry = pluralize(locale, entry, count) if count
  40. if entry.nil? && !subtrees?
  41. throw(:exception, I18n::MissingTranslation.new(locale, key, options))
  42. end
  43. deep_interpolation = options[:deep_interpolation]
  44. values = options.except(*RESERVED_KEYS)
  45. if values
  46. entry = if deep_interpolation
  47. deep_interpolate(locale, entry, values)
  48. else
  49. interpolate(locale, entry, values)
  50. end
  51. end
  52. entry
  53. end
  54. 1 def exists?(locale, key)
  55. lookup(locale, key) != nil
  56. end
  57. # Acts the same as +strftime+, but uses a localized version of the
  58. # format string. Takes a key from the date/time formats translations as
  59. # a format argument (<em>e.g.</em>, <tt>:short</tt> in <tt>:'date.formats'</tt>).
  60. 1 def localize(locale, object, format = :default, options = EMPTY_HASH)
  61. if object.nil? && options.include?(:default)
  62. return options[:default]
  63. end
  64. raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
  65. if Symbol === format
  66. key = format
  67. type = object.respond_to?(:sec) ? 'time' : 'date'
  68. options = options.merge(:raise => true, :object => object, :locale => locale)
  69. format = I18n.t(:"#{type}.formats.#{key}", options)
  70. end
  71. format = translate_localization_format(locale, object, format, options)
  72. object.strftime(format)
  73. end
  74. # Returns an array of locales for which translations are available
  75. # ignoring the reserved translation meta data key :i18n.
  76. 1 def available_locales
  77. raise NotImplementedError
  78. end
  79. 1 def reload!
  80. 3 eager_load! if eager_loaded?
  81. end
  82. 1 def eager_load!
  83. @eager_loaded = true
  84. end
  85. 1 protected
  86. 1 def eager_loaded?
  87. 3 @eager_loaded ||= false
  88. end
  89. # The method which actually looks up for the translation in the store.
  90. 1 def lookup(locale, key, scope = [], options = EMPTY_HASH)
  91. raise NotImplementedError
  92. end
  93. 1 def subtrees?
  94. true
  95. end
  96. # Evaluates defaults.
  97. # If given subject is an Array, it walks the array and returns the
  98. # first translation that can be resolved. Otherwise it tries to resolve
  99. # the translation directly.
  100. 1 def default(locale, object, subject, options = EMPTY_HASH)
  101. options = options.dup.reject { |key, value| key == :default }
  102. case subject
  103. when Array
  104. subject.each do |item|
  105. result = resolve(locale, object, item, options)
  106. return result unless result.nil?
  107. end and nil
  108. else
  109. resolve(locale, object, subject, options)
  110. end
  111. end
  112. # Resolves a translation.
  113. # If the given subject is a Symbol, it will be translated with the
  114. # given options. If it is a Proc then it will be evaluated. All other
  115. # subjects will be returned directly.
  116. 1 def resolve(locale, object, subject, options = EMPTY_HASH)
  117. return subject if options[:resolve] == false
  118. result = catch(:exception) do
  119. case subject
  120. when Symbol
  121. I18n.translate(subject, options.merge(:locale => locale, :throw => true))
  122. when Proc
  123. date_or_time = options.delete(:object) || object
  124. resolve(locale, object, subject.call(date_or_time, options))
  125. else
  126. subject
  127. end
  128. end
  129. result unless result.is_a?(MissingTranslation)
  130. end
  131. # Picks a translation from a pluralized mnemonic subkey according to English
  132. # pluralization rules :
  133. # - It will pick the :one subkey if count is equal to 1.
  134. # - It will pick the :other subkey otherwise.
  135. # - It will pick the :zero subkey in the special case where count is
  136. # equal to 0 and there is a :zero subkey present. This behaviour is
  137. # not standard with regards to the CLDR pluralization rules.
  138. # Other backends can implement more flexible or complex pluralization rules.
  139. 1 def pluralize(locale, entry, count)
  140. return entry unless entry.is_a?(Hash) && count
  141. key = pluralization_key(entry, count)
  142. raise InvalidPluralizationData.new(entry, count, key) unless entry.has_key?(key)
  143. entry[key]
  144. end
  145. # Interpolates values into a given subject.
  146. #
  147. # if the given subject is a string then:
  148. # method interpolates "file %{file} opened by %%{user}", :file => 'test.txt', :user => 'Mr. X'
  149. # # => "file test.txt opened by %{user}"
  150. #
  151. # if the given subject is an array then:
  152. # each element of the array is recursively interpolated (until it finds a string)
  153. # method interpolates ["yes, %{user}", ["maybe no, %{user}, "no, %{user}"]], :user => "bartuz"
  154. # # => "["yes, bartuz",["maybe no, bartuz", "no, bartuz"]]"
  155. 1 def interpolate(locale, subject, values = EMPTY_HASH)
  156. return subject if values.empty?
  157. case subject
  158. when ::String then I18n.interpolate(subject, values)
  159. when ::Array then subject.map { |element| interpolate(locale, element, values) }
  160. else
  161. subject
  162. end
  163. end
  164. # Deep interpolation
  165. #
  166. # deep_interpolate { people: { ann: "Ann is %{ann}", john: "John is %{john}" } },
  167. # ann: 'good', john: 'big'
  168. # #=> { people: { ann: "Ann is good", john: "John is big" } }
  169. 1 def deep_interpolate(locale, data, values = EMPTY_HASH)
  170. return data if values.empty?
  171. case data
  172. when ::String
  173. I18n.interpolate(data, values)
  174. when ::Hash
  175. data.each_with_object({}) do |(k, v), result|
  176. result[k] = deep_interpolate(locale, v, values)
  177. end
  178. when ::Array
  179. data.map do |v|
  180. deep_interpolate(locale, v, values)
  181. end
  182. else
  183. data
  184. end
  185. end
  186. # Loads a single translations file by delegating to #load_rb or
  187. # #load_yml depending on the file extension and directly merges the
  188. # data to the existing translations. Raises I18n::UnknownFileType
  189. # for all other file extensions.
  190. 1 def load_file(filename)
  191. type = File.extname(filename).tr('.', '').downcase
  192. raise UnknownFileType.new(type, filename) unless respond_to?(:"load_#{type}", true)
  193. data = send(:"load_#{type}", filename)
  194. unless data.is_a?(Hash)
  195. raise InvalidLocaleData.new(filename, 'expects it to return a hash, but does not')
  196. end
  197. data.each { |locale, d| store_translations(locale, d || {}) }
  198. end
  199. # Loads a plain Ruby translations file. eval'ing the file must yield
  200. # a Hash containing translation data with locales as toplevel keys.
  201. 1 def load_rb(filename)
  202. eval(IO.read(filename), binding, filename)
  203. end
  204. # Loads a YAML translations file. The data must have locales as
  205. # toplevel keys.
  206. 1 def load_yml(filename)
  207. begin
  208. YAML.load_file(filename)
  209. rescue TypeError, ScriptError, StandardError => e
  210. raise InvalidLocaleData.new(filename, e.inspect)
  211. end
  212. end
  213. 1 alias_method :load_yaml, :load_yml
  214. # Loads a JSON translations file. The data must have locales as
  215. # toplevel keys.
  216. 1 def load_json(filename)
  217. begin
  218. ::JSON.parse(File.read(filename))
  219. rescue TypeError, StandardError => e
  220. raise InvalidLocaleData.new(filename, e.inspect)
  221. end
  222. end
  223. 1 def translate_localization_format(locale, object, format, options)
  224. format.to_s.gsub(/%(|\^)[aAbBpP]/) do |match|
  225. case match
  226. when '%a' then I18n.t!(:"date.abbr_day_names", :locale => locale, :format => format)[object.wday]
  227. when '%^a' then I18n.t!(:"date.abbr_day_names", :locale => locale, :format => format)[object.wday].upcase
  228. when '%A' then I18n.t!(:"date.day_names", :locale => locale, :format => format)[object.wday]
  229. when '%^A' then I18n.t!(:"date.day_names", :locale => locale, :format => format)[object.wday].upcase
  230. when '%b' then I18n.t!(:"date.abbr_month_names", :locale => locale, :format => format)[object.mon]
  231. when '%^b' then I18n.t!(:"date.abbr_month_names", :locale => locale, :format => format)[object.mon].upcase
  232. when '%B' then I18n.t!(:"date.month_names", :locale => locale, :format => format)[object.mon]
  233. when '%^B' then I18n.t!(:"date.month_names", :locale => locale, :format => format)[object.mon].upcase
  234. when '%p' then I18n.t!(:"time.#{object.hour < 12 ? :am : :pm}", :locale => locale, :format => format).upcase if object.respond_to? :hour
  235. when '%P' then I18n.t!(:"time.#{object.hour < 12 ? :am : :pm}", :locale => locale, :format => format).downcase if object.respond_to? :hour
  236. end
  237. end
  238. rescue MissingTranslationData => e
  239. e.message
  240. end
  241. 1 def pluralization_key(entry, count)
  242. key = :zero if count == 0 && entry.has_key?(:zero)
  243. key ||= count == 1 ? :one : :other
  244. end
  245. end
  246. end
  247. end

target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/simple.rb

43.75% lines covered

48 relevant lines. 21 lines covered and 27 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'i18n/backend/base'
  3. 1 module I18n
  4. 1 module Backend
  5. # A simple backend that reads translations from YAML files and stores them in
  6. # an in-memory hash. Relies on the Base backend.
  7. #
  8. # The implementation is provided by a Implementation module allowing to easily
  9. # extend Simple backend's behavior by including modules. E.g.:
  10. #
  11. # module I18n::Backend::Pluralization
  12. # def pluralize(*args)
  13. # # extended pluralization logic
  14. # super
  15. # end
  16. # end
  17. #
  18. # I18n::Backend::Simple.include(I18n::Backend::Pluralization)
  19. 1 class Simple
  20. 1 using I18n::HashRefinements
  21. 3 (class << self; self; end).class_eval { public :include }
  22. 1 module Implementation
  23. 1 include Base
  24. 1 def initialized?
  25. @initialized ||= false
  26. end
  27. # Stores translations for the given locale in memory.
  28. # This uses a deep merge for the translations hash, so existing
  29. # translations will be overwritten by new ones only at the deepest
  30. # level of the hash.
  31. 1 def store_translations(locale, data, options = EMPTY_HASH)
  32. if I18n.enforce_available_locales &&
  33. I18n.available_locales_initialized? &&
  34. !I18n.available_locales.include?(locale.to_sym) &&
  35. !I18n.available_locales.include?(locale.to_s)
  36. return data
  37. end
  38. locale = locale.to_sym
  39. translations[locale] ||= {}
  40. data = data.deep_symbolize_keys
  41. translations[locale].deep_merge!(data)
  42. end
  43. # Get available locales from the translations hash
  44. 1 def available_locales
  45. init_translations unless initialized?
  46. translations.inject([]) do |locales, (locale, data)|
  47. locales << locale unless data.size <= 1 && (data.empty? || data.has_key?(:i18n))
  48. locales
  49. end
  50. end
  51. # Clean up translations hash and set initialized to false on reload!
  52. 1 def reload!
  53. 3 @initialized = false
  54. 3 @translations = nil
  55. 3 super
  56. end
  57. 1 def eager_load!
  58. init_translations unless initialized?
  59. super
  60. end
  61. 1 def translations(do_init: false)
  62. # To avoid returning empty translations,
  63. # call `init_translations`
  64. init_translations if do_init && !initialized?
  65. @translations ||= {}
  66. end
  67. 1 protected
  68. 1 def init_translations
  69. load_translations
  70. @initialized = true
  71. end
  72. # Looks up a translation from the translations hash. Returns nil if
  73. # either key is nil, or locale, scope or key do not exist as a key in the
  74. # nested translations hash. Splits keys or scopes containing dots
  75. # into multiple keys, i.e. <tt>currency.format</tt> is regarded the same as
  76. # <tt>%w(currency format)</tt>.
  77. 1 def lookup(locale, key, scope = [], options = EMPTY_HASH)
  78. init_translations unless initialized?
  79. keys = I18n.normalize_keys(locale, key, scope, options[:separator])
  80. keys.inject(translations) do |result, _key|
  81. return nil unless result.is_a?(Hash)
  82. unless result.has_key?(_key)
  83. _key = _key.to_s.to_sym
  84. return nil unless result.has_key?(_key)
  85. end
  86. result = result[_key]
  87. result = resolve(locale, _key, result, options.merge(:scope => nil)) if result.is_a?(Symbol)
  88. result
  89. end
  90. end
  91. end
  92. 1 include Implementation
  93. end
  94. end
  95. end

target/rubygems/gems/i18n-1.6.0/lib/i18n/backend/transliterator.rb

42.11% lines covered

38 relevant lines. 16 lines covered and 22 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module I18n
  4. 1 module Backend
  5. 1 module Transliterator
  6. 1 DEFAULT_REPLACEMENT_CHAR = "?"
  7. # Given a locale and a UTF-8 string, return the locale's ASCII
  8. # approximation for the string.
  9. 1 def transliterate(locale, string, replacement = nil)
  10. @transliterators ||= {}
  11. @transliterators[locale] ||= Transliterator.get I18n.t(:'i18n.transliterate.rule',
  12. :locale => locale, :resolve => false, :default => {})
  13. @transliterators[locale].transliterate(string, replacement)
  14. end
  15. # Get a transliterator instance.
  16. 1 def self.get(rule = nil)
  17. if !rule || rule.kind_of?(Hash)
  18. HashTransliterator.new(rule)
  19. elsif rule.kind_of? Proc
  20. ProcTransliterator.new(rule)
  21. else
  22. raise I18n::ArgumentError, "Transliteration rule must be a proc or a hash."
  23. end
  24. end
  25. # A transliterator which accepts a Proc as its transliteration rule.
  26. 1 class ProcTransliterator
  27. 1 def initialize(rule)
  28. @rule = rule
  29. end
  30. 1 def transliterate(string, replacement = nil)
  31. @rule.call(string)
  32. end
  33. end
  34. # A transliterator which accepts a Hash of characters as its translation
  35. # rule.
  36. 1 class HashTransliterator
  37. DEFAULT_APPROXIMATIONS = {
  38. "��"=>"A", "��"=>"A", "��"=>"A", "��"=>"A", "��"=>"A", "��"=>"A", "��"=>"AE",
  39. "��"=>"C", "��"=>"E", "��"=>"E", "��"=>"E", "��"=>"E", "��"=>"I", "��"=>"I",
  40. "��"=>"I", "��"=>"I", "��"=>"D", "��"=>"N", "��"=>"O", "��"=>"O", "��"=>"O",
  41. "��"=>"O", "��"=>"O", "��"=>"x", "��"=>"O", "��"=>"U", "��"=>"U", "��"=>"U",
  42. "��"=>"U", "��"=>"Y", "��"=>"Th", "��"=>"ss", "��"=>"a", "��"=>"a", "��"=>"a",
  43. "��"=>"a", "��"=>"a", "��"=>"a", "��"=>"ae", "��"=>"c", "��"=>"e", "��"=>"e",
  44. "��"=>"e", "��"=>"e", "��"=>"i", "��"=>"i", "��"=>"i", "��"=>"i", "��"=>"d",
  45. "��"=>"n", "��"=>"o", "��"=>"o", "��"=>"o", "��"=>"o", "��"=>"o", "��"=>"o",
  46. "��"=>"u", "��"=>"u", "��"=>"u", "��"=>"u", "��"=>"y", "��"=>"th", "��"=>"y",
  47. "��"=>"A", "��"=>"a", "��"=>"A", "��"=>"a", "��"=>"A", "��"=>"a", "��"=>"C",
  48. "��"=>"c", "��"=>"C", "��"=>"c", "��"=>"C", "��"=>"c", "��"=>"C", "��"=>"c",
  49. "��"=>"D", "��"=>"d", "��"=>"D", "��"=>"d", "��"=>"E", "��"=>"e", "��"=>"E",
  50. "��"=>"e", "��"=>"E", "��"=>"e", "��"=>"E", "��"=>"e", "��"=>"E", "��"=>"e",
  51. "��"=>"G", "��"=>"g", "��"=>"G", "��"=>"g", "��"=>"G", "��"=>"g", "��"=>"G",
  52. "��"=>"g", "��"=>"H", "��"=>"h", "��"=>"H", "��"=>"h", "��"=>"I", "��"=>"i",
  53. "��"=>"I", "��"=>"i", "��"=>"I", "��"=>"i", "��"=>"I", "��"=>"i", "��"=>"I",
  54. "��"=>"i", "��"=>"IJ", "��"=>"ij", "��"=>"J", "��"=>"j", "��"=>"K", "��"=>"k",
  55. "��"=>"k", "��"=>"L", "��"=>"l", "��"=>"L", "��"=>"l", "��"=>"L", "��"=>"l",
  56. "��"=>"L", "��"=>"l", "��"=>"L", "��"=>"l", "��"=>"N", "��"=>"n", "��"=>"N",
  57. "��"=>"n", "��"=>"N", "��"=>"n", "��"=>"'n", "��"=>"NG", "��"=>"ng",
  58. "��"=>"O", "��"=>"o", "��"=>"O", "��"=>"o", "��"=>"O", "��"=>"o", "��"=>"OE",
  59. "��"=>"oe", "��"=>"R", "��"=>"r", "��"=>"R", "��"=>"r", "��"=>"R", "��"=>"r",
  60. "��"=>"S", "��"=>"s", "��"=>"S", "��"=>"s", "��"=>"S", "��"=>"s", "��"=>"S",
  61. "��"=>"s", "��"=>"T", "��"=>"t", "��"=>"T", "��"=>"t", "��"=>"T", "��"=>"t",
  62. "��"=>"U", "��"=>"u", "��"=>"U", "��"=>"u", "��"=>"U", "��"=>"u", "��"=>"U",
  63. "��"=>"u", "��"=>"U", "��"=>"u", "��"=>"U", "��"=>"u", "��"=>"W", "��"=>"w",
  64. "��"=>"Y", "��"=>"y", "��"=>"Y", "��"=>"Z", "��"=>"z", "��"=>"Z", "��"=>"z",
  65. "��"=>"Z", "��"=>"z"
  66. }.freeze
  67. 1 def initialize(rule = nil)
  68. @rule = rule
  69. add_default_approximations
  70. add rule if rule
  71. end
  72. 1 def transliterate(string, replacement = nil)
  73. replacement ||= DEFAULT_REPLACEMENT_CHAR
  74. string.gsub(/[^\x00-\x7f]/u) do |char|
  75. approximations[char] || replacement
  76. end
  77. end
  78. 1 private
  79. 1 def approximations
  80. @approximations ||= {}
  81. end
  82. 1 def add_default_approximations
  83. DEFAULT_APPROXIMATIONS.each do |key, value|
  84. approximations[key] = value
  85. end
  86. end
  87. # Add transliteration rules to the approximations hash.
  88. 1 def add(hash)
  89. hash.each do |key, value|
  90. approximations[key.to_s] = value.to_s
  91. end
  92. end
  93. end
  94. end
  95. end
  96. end

target/rubygems/gems/i18n-1.6.0/lib/i18n/core_ext/hash.rb

44.0% lines covered

25 relevant lines. 11 lines covered and 14 lines missed.
    
  1. 1 module I18n
  2. 1 module HashRefinements
  3. 1 refine Hash do
  4. 1 using I18n::HashRefinements
  5. 1 def except(*keys)
  6. dup.except!(*keys)
  7. end
  8. 1 def except!(*keys)
  9. keys.each { |key| delete(key) }
  10. self
  11. end
  12. 1 def deep_symbolize_keys
  13. each_with_object({}) do |(key, value), result|
  14. result[symbolize_key(key)] = deep_symbolize_keys_in_object(value)
  15. result
  16. end
  17. end
  18. # deep_merge_hash! by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
  19. 1 def deep_merge!(data)
  20. merger = lambda do |_key, v1, v2|
  21. Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2
  22. end
  23. merge!(data, &merger)
  24. end
  25. 1 def symbolize_key(key)
  26. key.respond_to?(:to_sym) ? key.to_sym : key
  27. end
  28. 1 private
  29. 1 def deep_symbolize_keys_in_object(value)
  30. case value
  31. when Hash
  32. value.deep_symbolize_keys
  33. when Array
  34. value.map { |e| deep_symbolize_keys_in_object(e) }
  35. else
  36. value
  37. end
  38. end
  39. end
  40. end
  41. end

target/rubygems/gems/jbuilder-2.9.1/lib/jbuilder/dependency_tracker.rb

75.0% lines covered

24 relevant lines. 18 lines covered and 6 lines missed.
    
  1. 1 require 'jbuilder/jbuilder'
  2. 1 dependency_tracker = false
  3. 1 begin
  4. 1 require 'action_view'
  5. 1 require 'action_view/dependency_tracker'
  6. 1 dependency_tracker = ::ActionView::DependencyTracker
  7. rescue LoadError
  8. begin
  9. require 'cache_digests'
  10. dependency_tracker = ::CacheDigests::DependencyTracker
  11. rescue LoadError
  12. end
  13. end
  14. 1 if dependency_tracker
  15. 1 class Jbuilder
  16. 1 module DependencyTrackerMethods
  17. # Matches:
  18. # json.partial! "messages/message"
  19. # json.partial!('messages/message')
  20. #
  21. 1 DIRECT_RENDERS = /
  22. \w+\.partial! # json.partial!
  23. \(?\s* # optional parenthesis
  24. (['"])([^'"]+)\1 # quoted value
  25. /x
  26. # Matches:
  27. # json.partial! partial: "comments/comment"
  28. # json.comments @post.comments, partial: "comments/comment", as: :comment
  29. # json.array! @posts, partial: "posts/post", as: :post
  30. # = render partial: "account"
  31. #
  32. 1 INDIRECT_RENDERS = /
  33. (?::partial\s*=>|partial:) # partial: or :partial =>
  34. \s* # optional whitespace
  35. (['"])([^'"]+)\1 # quoted value
  36. /x
  37. 1 def dependencies
  38. direct_dependencies + indirect_dependencies + explicit_dependencies
  39. end
  40. 1 private
  41. 1 def direct_dependencies
  42. source.scan(DIRECT_RENDERS).map(&:second)
  43. end
  44. 1 def indirect_dependencies
  45. source.scan(INDIRECT_RENDERS).map(&:second)
  46. end
  47. end
  48. end
  49. 1 ::Jbuilder::DependencyTracker = Class.new(dependency_tracker::ERBTracker)
  50. 1 ::Jbuilder::DependencyTracker.send :include, ::Jbuilder::DependencyTrackerMethods
  51. 1 dependency_tracker.register_tracker :jbuilder, ::Jbuilder::DependencyTracker
  52. end

target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres.rb

66.67% lines covered

33 relevant lines. 22 lines covered and 11 lines missed.
    
  1. 1 require 'jdbc/postgres/version'
  2. 1 module Jdbc
  3. 1 module Postgres
  4. 1 def self.driver_jar
  5. 1 version_jre_version = DRIVER_VERSION.split( '.' )
  6. 1 version = jre_version
  7. 1 version_jre_version << (version ? ".jre#{version}" : '')
  8. 1 'postgresql-%s.%s.%s%s.jar' % version_jre_version
  9. end
  10. 1 def self.load_driver(method = :load)
  11. 1 send method, driver_jar
  12. rescue LoadError => e
  13. if (version = jre_version) && version < 6
  14. warn "failed to load postgresql (driver) jar, please note that we no longer " <<
  15. "include JDBC 3.x support, on Java < 6 please use gem 'jdbc-postgres', '~> 9.2'"
  16. end
  17. raise e
  18. end
  19. 1 def self.driver_name
  20. 1 'org.postgresql.Driver'
  21. end
  22. 1 private
  23. 1 def self.jre_version
  24. 1 version = ENV_JAVA[ 'java.specification.version' ]
  25. 1 version = version.split('.').last.to_i # '1.7' => 7, '9' => 9
  26. 1 if version < 6
  27. 5 # not supported
  28. elsif version == 6
  29. 6
  30. elsif version == 7
  31. 7
  32. else
  33. 1 nil # non-tagged X.Y.Z.jar
  34. end
  35. end
  36. 2 class << self; private :jre_version end
  37. 1 if defined?(JRUBY_VERSION) && # enable backwards-compat behavior :
  38. 1 ( Java::JavaLang::Boolean.get_boolean("jdbc.driver.autoload") ||
  39. Java::JavaLang::Boolean.get_boolean("jdbc.postgres.autoload") )
  40. warn "autoloading JDBC driver on require 'jdbc/postgres'" if $VERBOSE
  41. load_driver :require
  42. end
  43. end
  44. 1 PostgreSQL = Postgres unless const_defined?(:PostgreSQL)
  45. end

target/rubygems/gems/jdbc-postgres-42.2.6/lib/jdbc/postgres/version.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. 1 module Jdbc
  2. 1 module Postgres
  3. 1 DRIVER_VERSION = '42.2.6'
  4. 1 VERSION = DRIVER_VERSION
  5. end
  6. end

target/rubygems/gems/mail-2.7.1/lib/mail.rb

89.58% lines covered

48 relevant lines. 43 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail # :doc:
  4. 1 require 'date'
  5. 1 require 'shellwords'
  6. 1 require 'uri'
  7. 1 require 'net/smtp'
  8. 1 require 'mini_mime'
  9. 1 if RUBY_VERSION <= '1.8.6'
  10. begin
  11. require 'tlsmail'
  12. rescue LoadError
  13. raise "You need to install tlsmail if you are using ruby <= 1.8.6"
  14. end
  15. end
  16. 1 if RUBY_VERSION >= "1.9.0"
  17. 1 require 'mail/version_specific/ruby_1_9'
  18. 1 RubyVer = Ruby19
  19. else
  20. require 'mail/version_specific/ruby_1_8'
  21. RubyVer = Ruby18
  22. end
  23. 1 require 'mail/version'
  24. 1 require 'mail/core_extensions/string'
  25. 1 require 'mail/core_extensions/smtp'
  26. 1 require 'mail/indifferent_hash'
  27. 1 require 'mail/multibyte'
  28. 1 require 'mail/constants'
  29. 1 require 'mail/utilities'
  30. 1 require 'mail/configuration'
  31. 1 @@autoloads = {}
  32. 1 def self.register_autoload(name, path)
  33. 55 @@autoloads[name] = path
  34. 55 autoload(name, path)
  35. end
  36. # This runs through the autoload list and explictly requires them for you.
  37. # Useful when running mail in a threaded process.
  38. #
  39. # Usage:
  40. #
  41. # require 'mail'
  42. # Mail.eager_autoload!
  43. 1 def self.eager_autoload!
  44. 56 @@autoloads.each { |_,path| require(path) }
  45. end
  46. # Autoload mail send and receive classes.
  47. 1 require 'mail/network'
  48. 1 require 'mail/message'
  49. 1 require 'mail/part'
  50. 1 require 'mail/header'
  51. 1 require 'mail/parts_list'
  52. 1 require 'mail/attachments_list'
  53. 1 require 'mail/body'
  54. 1 require 'mail/field'
  55. 1 require 'mail/field_list'
  56. 1 require 'mail/envelope'
  57. 1 register_autoload :Parsers, "mail/parsers"
  58. # Autoload header field elements and transfer encodings.
  59. 1 require 'mail/elements'
  60. 1 require 'mail/encodings'
  61. 1 require 'mail/encodings/base64'
  62. 1 require 'mail/encodings/quoted_printable'
  63. 1 require 'mail/encodings/unix_to_unix'
  64. 1 require 'mail/matchers/has_sent_mail'
  65. 1 require 'mail/matchers/attachment_matchers.rb'
  66. # Finally... require all the Mail.methods
  67. 1 require 'mail/mail'
  68. end

target/rubygems/gems/mail-2.7.1/lib/mail/attachments_list.rb

14.04% lines covered

57 relevant lines. 8 lines covered and 49 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 class AttachmentsList < Array
  4. 1 def initialize(parts_list)
  5. @parts_list = parts_list
  6. @content_disposition_type = 'attachment'
  7. parts_list.map { |p|
  8. if p.mime_type == 'message/rfc822'
  9. Mail.new(p.body.encoded).attachments
  10. elsif p.parts.empty?
  11. p if p.attachment?
  12. else
  13. p.attachments
  14. end
  15. }.flatten.compact.each { |a| self << a }
  16. self
  17. end
  18. 1 def inline
  19. @content_disposition_type = 'inline'
  20. self
  21. end
  22. # Returns the attachment by filename or at index.
  23. #
  24. # mail.attachments['test.png'] = File.read('test.png')
  25. # mail.attachments['test.jpg'] = File.read('test.jpg')
  26. #
  27. # mail.attachments['test.png'].filename #=> 'test.png'
  28. # mail.attachments[1].filename #=> 'test.jpg'
  29. 1 def [](index_value)
  30. if index_value.is_a?(Integer)
  31. self.fetch(index_value)
  32. else
  33. self.select { |a| a.filename == index_value }.first
  34. end
  35. end
  36. 1 def []=(name, value)
  37. encoded_name = Mail::Encodings.decode_encode name, :encode
  38. default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{encoded_name}\"",
  39. :content_transfer_encoding => "#{guess_encoding}",
  40. :content_disposition => "#{@content_disposition_type}; filename=\"#{encoded_name}\"" }
  41. if value.is_a?(Hash)
  42. if path = value.delete(:filename)
  43. value[:content] ||= File.open(path, 'rb') { |f| f.read }
  44. end
  45. default_values[:body] = value.delete(:content) if value[:content]
  46. default_values[:body] = value.delete(:data) if value[:data]
  47. encoding = value.delete(:transfer_encoding) || value.delete(:encoding)
  48. if encoding
  49. if Mail::Encodings.defined? encoding
  50. default_values[:content_transfer_encoding] = encoding
  51. else
  52. raise "Do not know how to handle Content Transfer Encoding #{encoding}, please choose either quoted-printable or base64"
  53. end
  54. end
  55. if value[:mime_type]
  56. default_values[:content_type] = value.delete(:mime_type)
  57. @mime_type = MiniMime.lookup_by_content_type(default_values[:content_type])
  58. default_values[:content_transfer_encoding] ||= guess_encoding
  59. end
  60. hash = default_values.merge(value)
  61. else
  62. default_values[:body] = value
  63. hash = default_values
  64. end
  65. if hash[:body].respond_to? :force_encoding and hash[:body].respond_to? :valid_encoding?
  66. if not hash[:body].valid_encoding? and default_values[:content_transfer_encoding].downcase == "binary"
  67. hash[:body] = hash[:body].dup if hash[:body].frozen?
  68. hash[:body].force_encoding("BINARY")
  69. end
  70. end
  71. attachment = Part.new(hash)
  72. attachment.add_content_id(hash[:content_id])
  73. @parts_list << attachment
  74. end
  75. # Uses the mime type to try and guess the encoding, if it is a binary type, or unknown, then we
  76. # set it to binary, otherwise as set to plain text
  77. 1 def guess_encoding
  78. if @mime_type && !@mime_type.binary?
  79. "7bit"
  80. else
  81. "binary"
  82. end
  83. end
  84. 1 def set_mime_type(filename)
  85. # Have to do this because MIME::Types is not Ruby 1.9 safe yet
  86. if RUBY_VERSION >= '1.9'
  87. filename = filename.encode(Encoding::UTF_8) if filename.respond_to?(:encode)
  88. end
  89. @mime_type = MiniMime.lookup_by_filename(filename)
  90. @mime_type && @mime_type.content_type
  91. end
  92. end
  93. end

target/rubygems/gems/mail-2.7.1/lib/mail/body.rb

29.27% lines covered

123 relevant lines. 36 lines covered and 87 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # = Body
  5. #
  6. # The body is where the text of the email is stored. Mail treats the body
  7. # as a single object. The body itself has no information about boundaries
  8. # used in the MIME standard, it just looks at its content as either a single
  9. # block of text, or (if it is a multipart message) as an array of blocks of text.
  10. #
  11. # A body has to be told to split itself up into a multipart message by calling
  12. # #split with the correct boundary. This is because the body object has no way
  13. # of knowing what the correct boundary is for itself (there could be many
  14. # boundaries in a body in the case of a nested MIME text).
  15. #
  16. # Once split is called, Mail::Body will slice itself up on this boundary,
  17. # assigning anything that appears before the first part to the preamble, and
  18. # anything that appears after the closing boundary to the epilogue, then
  19. # each part gets initialized into a Mail::Part object.
  20. #
  21. # The boundary that is used to split up the Body is also stored in the Body
  22. # object for use on encoding itself back out to a string. You can
  23. # overwrite this if it needs to be changed.
  24. #
  25. # On encoding, the body will return the preamble, then each part joined by
  26. # the boundary, followed by a closing boundary string and then the epilogue.
  27. 1 class Body
  28. 1 def initialize(string = '')
  29. @boundary = nil
  30. @preamble = nil
  31. @epilogue = nil
  32. @charset = nil
  33. @part_sort_order = [ "text/plain", "text/enriched", "text/html", "multipart/alternative" ]
  34. @parts = Mail::PartsList.new
  35. if Utilities.blank?(string)
  36. @raw_source = ''
  37. else
  38. # Do join first incase we have been given an Array in Ruby 1.9
  39. if string.respond_to?(:join)
  40. @raw_source = ::Mail::Utilities.to_crlf(string.join(''))
  41. elsif string.respond_to?(:to_s)
  42. @raw_source = ::Mail::Utilities.to_crlf(string.to_s)
  43. else
  44. raise "You can only assign a string or an object that responds_to? :join or :to_s to a body."
  45. end
  46. end
  47. @encoding = default_encoding
  48. set_charset
  49. end
  50. # Matches this body with another body. Also matches the decoded value of this
  51. # body with a string.
  52. #
  53. # Examples:
  54. #
  55. # body = Mail::Body.new('The body')
  56. # body == body #=> true
  57. #
  58. # body = Mail::Body.new('The body')
  59. # body == 'The body' #=> true
  60. #
  61. # body = Mail::Body.new("VGhlIGJvZHk=\n")
  62. # body.encoding = 'base64'
  63. # body == "The body" #=> true
  64. 1 def ==(other)
  65. if other.class == String
  66. self.decoded == other
  67. else
  68. super
  69. end
  70. end
  71. # Accepts a string and performs a regular expression against the decoded text
  72. #
  73. # Examples:
  74. #
  75. # body = Mail::Body.new('The body')
  76. # body =~ /The/ #=> 0
  77. #
  78. # body = Mail::Body.new("VGhlIGJvZHk=\n")
  79. # body.encoding = 'base64'
  80. # body =~ /The/ #=> 0
  81. 1 def =~(regexp)
  82. self.decoded =~ regexp
  83. end
  84. # Accepts a string and performs a regular expression against the decoded text
  85. #
  86. # Examples:
  87. #
  88. # body = Mail::Body.new('The body')
  89. # body.match(/The/) #=> #<MatchData "The">
  90. #
  91. # body = Mail::Body.new("VGhlIGJvZHk=\n")
  92. # body.encoding = 'base64'
  93. # body.match(/The/) #=> #<MatchData "The">
  94. 1 def match(regexp)
  95. self.decoded.match(regexp)
  96. end
  97. # Accepts anything that responds to #to_s and checks if it's a substring of the decoded text
  98. #
  99. # Examples:
  100. #
  101. # body = Mail::Body.new('The body')
  102. # body.include?('The') #=> true
  103. #
  104. # body = Mail::Body.new("VGhlIGJvZHk=\n")
  105. # body.encoding = 'base64'
  106. # body.include?('The') #=> true
  107. 1 def include?(other)
  108. self.decoded.include?(other.to_s)
  109. end
  110. # Allows you to set the sort order of the parts, overriding the default sort order.
  111. # Defaults to 'text/plain', then 'text/enriched', then 'text/html', then 'multipart/alternative'
  112. # with any other content type coming after.
  113. 1 def set_sort_order(order)
  114. @part_sort_order = order
  115. end
  116. # Allows you to sort the parts according to the default sort order, or the sort order you
  117. # set with :set_sort_order.
  118. #
  119. # sort_parts! is also called from :encode, so there is no need for you to call this explicitly
  120. 1 def sort_parts!
  121. @parts.each do |p|
  122. p.body.set_sort_order(@part_sort_order)
  123. p.body.sort_parts!
  124. end
  125. @parts.sort!(@part_sort_order)
  126. end
  127. # Returns the raw source that the body was initialized with, without
  128. # any tampering
  129. 1 def raw_source
  130. @raw_source
  131. end
  132. 1 def negotiate_best_encoding(message_encoding, allowed_encodings = nil)
  133. Mail::Encodings::TransferEncoding.negotiate(message_encoding, encoding, raw_source, allowed_encodings)
  134. end
  135. # Returns a body encoded using transfer_encoding. Multipart always uses an
  136. # identiy encoding (i.e. no encoding).
  137. # Calling this directly is not a good idea, but supported for compatibility
  138. # TODO: Validate that preamble and epilogue are valid for requested encoding
  139. 1 def encoded(transfer_encoding = nil)
  140. if multipart?
  141. self.sort_parts!
  142. encoded_parts = parts.map { |p| p.encoded }
  143. ([preamble] + encoded_parts).join(crlf_boundary) + end_boundary + epilogue.to_s
  144. else
  145. dec = Mail::Encodings.get_encoding(encoding)
  146. enc =
  147. if Utilities.blank?(transfer_encoding)
  148. dec
  149. else
  150. negotiate_best_encoding(transfer_encoding)
  151. end
  152. if dec.nil?
  153. # Cannot decode, so skip normalization
  154. raw_source
  155. else
  156. # Decode then encode to normalize and allow transforming
  157. # from base64 to Q-P and vice versa
  158. decoded = dec.decode(raw_source)
  159. if defined?(Encoding) && charset && charset != "US-ASCII"
  160. decoded = decoded.encode(charset)
  161. decoded.force_encoding('BINARY') unless Encoding.find(charset).ascii_compatible?
  162. end
  163. enc.encode(decoded)
  164. end
  165. end
  166. end
  167. 1 def decoded
  168. if !Encodings.defined?(encoding)
  169. raise UnknownEncodingType, "Don't know how to decode #{encoding}, please call #encoded and decode it yourself."
  170. else
  171. Encodings.get_encoding(encoding).decode(raw_source)
  172. end
  173. end
  174. 1 def to_s
  175. decoded
  176. end
  177. 1 def charset
  178. @charset
  179. end
  180. 1 def charset=( val )
  181. @charset = val
  182. end
  183. 1 def encoding(val = nil)
  184. if val
  185. self.encoding = val
  186. else
  187. @encoding
  188. end
  189. end
  190. 1 def encoding=( val )
  191. @encoding =
  192. if val == "text" || Utilities.blank?(val)
  193. default_encoding
  194. else
  195. val
  196. end
  197. end
  198. # Returns the preamble (any text that is before the first MIME boundary)
  199. 1 def preamble
  200. @preamble
  201. end
  202. # Sets the preamble to a string (adds text before the first MIME boundary)
  203. 1 def preamble=( val )
  204. @preamble = val
  205. end
  206. # Returns the epilogue (any text that is after the last MIME boundary)
  207. 1 def epilogue
  208. @epilogue
  209. end
  210. # Sets the epilogue to a string (adds text after the last MIME boundary)
  211. 1 def epilogue=( val )
  212. @epilogue = val
  213. end
  214. # Returns true if there are parts defined in the body
  215. 1 def multipart?
  216. true unless parts.empty?
  217. end
  218. # Returns the boundary used by the body
  219. 1 def boundary
  220. @boundary
  221. end
  222. # Allows you to change the boundary of this Body object
  223. 1 def boundary=( val )
  224. @boundary = val
  225. end
  226. 1 def parts
  227. @parts
  228. end
  229. 1 def <<( val )
  230. if @parts
  231. @parts << val
  232. else
  233. @parts = Mail::PartsList.new[val]
  234. end
  235. end
  236. 1 def split!(boundary)
  237. self.boundary = boundary
  238. parts = extract_parts
  239. # Make the preamble equal to the preamble (if any)
  240. self.preamble = parts[0].to_s.strip
  241. # Make the epilogue equal to the epilogue (if any)
  242. self.epilogue = parts[-1].to_s.strip
  243. parts[1...-1].to_a.each { |part| @parts << Mail::Part.new(part) }
  244. self
  245. end
  246. 1 def ascii_only?
  247. unless defined? @ascii_only
  248. @ascii_only = raw_source.ascii_only?
  249. end
  250. @ascii_only
  251. end
  252. 1 def empty?
  253. !!raw_source.to_s.empty?
  254. end
  255. 1 def default_encoding
  256. ascii_only? ? '7bit' : '8bit'
  257. end
  258. 1 private
  259. # split parts by boundary, ignore first part if empty, append final part when closing boundary was missing
  260. 1 def extract_parts
  261. parts_regex = /
  262. (?: # non-capturing group
  263. \A | # start of string OR
  264. \r\n # line break
  265. )
  266. (
  267. --#{Regexp.escape(boundary || "")} # boundary delimiter
  268. (?:--)? # with non-capturing optional closing
  269. )
  270. (?=\s*$) # lookahead matching zero or more spaces followed by line-ending
  271. /x
  272. parts = raw_source.split(parts_regex).each_slice(2).to_a
  273. parts.each_with_index { |(part, _), index| parts.delete_at(index) if index > 0 && Utilities.blank?(part) }
  274. if parts.size > 1
  275. final_separator = parts[-2][1]
  276. parts << [""] if final_separator != "--#{boundary}--"
  277. end
  278. parts.map(&:first)
  279. end
  280. 1 def crlf_boundary
  281. "\r\n--#{boundary}\r\n"
  282. end
  283. 1 def end_boundary
  284. "\r\n--#{boundary}--\r\n"
  285. end
  286. 1 def set_charset
  287. @charset = ascii_only? ? 'US-ASCII' : nil
  288. end
  289. end
  290. end

target/rubygems/gems/mail-2.7.1/lib/mail/check_delivery_params.rb

31.03% lines covered

29 relevant lines. 9 lines covered and 20 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module CheckDeliveryParams #:nodoc:
  4. 1 class << self
  5. 1 def check(mail)
  6. [ check_from(mail.smtp_envelope_from),
  7. check_to(mail.smtp_envelope_to),
  8. check_message(mail) ]
  9. end
  10. 1 def check_from(addr)
  11. if Utilities.blank?(addr)
  12. raise ArgumentError, "SMTP From address may not be blank: #{addr.inspect}"
  13. end
  14. check_addr 'From', addr
  15. end
  16. 1 def check_to(addrs)
  17. if Utilities.blank?(addrs)
  18. raise ArgumentError, "SMTP To address may not be blank: #{addrs.inspect}"
  19. end
  20. Array(addrs).map do |addr|
  21. check_addr 'To', addr
  22. end
  23. end
  24. 1 def check_addr(addr_name, addr)
  25. validate_smtp_addr addr do |error_message|
  26. raise ArgumentError, "SMTP #{addr_name} address #{error_message}: #{addr.inspect}"
  27. end
  28. end
  29. 1 def validate_smtp_addr(addr)
  30. if addr
  31. if addr.bytesize > 2048
  32. yield 'may not exceed 2kB'
  33. end
  34. if /[\r\n]/ =~ addr
  35. yield 'may not contain CR or LF line breaks'
  36. end
  37. end
  38. addr
  39. end
  40. 1 def check_message(message)
  41. message = message.encoded if message.respond_to?(:encoded)
  42. if Utilities.blank?(message)
  43. raise ArgumentError, 'An encoded message is required to send an email'
  44. end
  45. message
  46. end
  47. end
  48. end
  49. end

target/rubygems/gems/mail-2.7.1/lib/mail/configuration.rb

29.41% lines covered

34 relevant lines. 10 lines covered and 24 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # Thanks to Nicolas Fouch�� for this wrapper
  5. #
  6. 1 require 'singleton'
  7. 1 module Mail
  8. # The Configuration class is a Singleton used to hold the default
  9. # configuration for all Mail objects.
  10. #
  11. # Each new mail object gets a copy of these values at initialization
  12. # which can be overwritten on a per mail object basis.
  13. 1 class Configuration
  14. 1 include Singleton
  15. 1 def initialize
  16. @delivery_method = nil
  17. @retriever_method = nil
  18. super
  19. end
  20. 1 def delivery_method(method = nil, settings = {})
  21. return @delivery_method if @delivery_method && method.nil?
  22. @delivery_method = lookup_delivery_method(method).new(settings)
  23. end
  24. 1 def lookup_delivery_method(method)
  25. case method.is_a?(String) ? method.to_sym : method
  26. when nil
  27. Mail::SMTP
  28. when :smtp
  29. Mail::SMTP
  30. when :sendmail
  31. Mail::Sendmail
  32. when :exim
  33. Mail::Exim
  34. when :file
  35. Mail::FileDelivery
  36. when :smtp_connection
  37. Mail::SMTPConnection
  38. when :test
  39. Mail::TestMailer
  40. when :logger
  41. Mail::LoggerDelivery
  42. else
  43. method
  44. end
  45. end
  46. 1 def retriever_method(method = nil, settings = {})
  47. return @retriever_method if @retriever_method && method.nil?
  48. @retriever_method = lookup_retriever_method(method).new(settings)
  49. end
  50. 1 def lookup_retriever_method(method)
  51. case method
  52. when nil
  53. Mail::POP3
  54. when :pop3
  55. Mail::POP3
  56. when :imap
  57. Mail::IMAP
  58. when :test
  59. Mail::TestRetriever
  60. else
  61. method
  62. end
  63. end
  64. 1 def param_encode_language(value = nil)
  65. value ? @encode_language = value : @encode_language ||= 'en'
  66. end
  67. end
  68. end

target/rubygems/gems/mail-2.7.1/lib/mail/constants.rb

100.0% lines covered

46 relevant lines. 46 lines covered and 0 lines missed.
    
  1. # encoding: us-ascii
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 module Constants
  5. 1 white_space = %Q|\x9\x20|
  6. 1 text = %Q|\x1-\x8\xB\xC\xE-\x7f|
  7. 1 field_name = %Q|\x21-\x39\x3b-\x7e|
  8. 1 qp_safe = %Q|\x20-\x3c\x3e-\x7e|
  9. 1 aspecial = %Q|()<>[]:;@\\,."| # RFC5322
  10. 1 tspecial = %Q|()<>@,;:\\"/[]?=| # RFC2045
  11. 1 sp = %Q| |
  12. 1 control = %Q|\x00-\x1f\x7f-\xff|
  13. 1 if control.respond_to?(:force_encoding)
  14. 1 control = control.dup.force_encoding(Encoding::BINARY)
  15. end
  16. 1 CRLF = /\r?\n/
  17. 1 WSP = /[#{white_space}]/
  18. 1 FWS = /#{CRLF}#{WSP}*/
  19. 1 TEXT = /[#{text}]/ # + obs-text
  20. 1 FIELD_NAME = /[#{field_name}]+/
  21. 1 FIELD_PREFIX = /\A(#{FIELD_NAME})/
  22. 1 FIELD_BODY = /.+/m
  23. 1 FIELD_LINE = /^[#{field_name}]+:\s*.+$/
  24. 1 FIELD_SPLIT = /^(#{FIELD_NAME})\s*:\s*(#{FIELD_BODY})?$/
  25. 1 HEADER_LINE = /^([#{field_name}]+:\s*.+)$/
  26. 1 HEADER_SPLIT = /#{CRLF}(?!#{WSP})/
  27. 1 QP_UNSAFE = /[^#{qp_safe}]/
  28. 1 QP_SAFE = /[#{qp_safe}]/
  29. 1 CONTROL_CHAR = /[#{control}]/n
  30. 1 ATOM_UNSAFE = /[#{Regexp.quote aspecial}#{control}#{sp}]/n
  31. 1 PHRASE_UNSAFE = /[#{Regexp.quote aspecial}#{control}]/n
  32. 1 TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{sp}]/n
  33. 1 ENCODED_VALUE = /\=\?([^?]+)\?([QB])\?[^?]*?\?\=/mi
  34. 1 FULL_ENCODED_VALUE = /(\=\?[^?]+\?[QB]\?[^?]*?\?\=)/mi
  35. 1 EMPTY = ''
  36. 1 SPACE = ' '
  37. 1 UNDERSCORE = '_'
  38. 1 HYPHEN = '-'
  39. 1 COLON = ':'
  40. 1 ASTERISK = '*'
  41. 1 CR = "\r"
  42. 1 LF = "\n"
  43. 1 CR_ENCODED = "=0D"
  44. 1 LF_ENCODED = "=0A"
  45. 1 CAPITAL_M = 'M'
  46. 1 EQUAL_LF = "=\n"
  47. 1 NULL_SENDER = '<>'
  48. 1 Q_VALUES = ['Q','q']
  49. 1 B_VALUES = ['B','b']
  50. end
  51. end

target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/smtp.rb

9.09% lines covered

11 relevant lines. 1 lines covered and 10 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. # This is a backport of r30294 from ruby trunk because of a bug in net/smtp.
  4. # http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&amp;revision=30294
  5. #
  6. # Fixed in Ruby 1.9.3 - tlsconnect also does not exist in some early versions of ruby
  7. 1 if RUBY_VERSION < '1.9.3'
  8. module Net
  9. class SMTP
  10. begin
  11. alias_method :original_tlsconnect, :tlsconnect
  12. def tlsconnect(s)
  13. verified = false
  14. begin
  15. original_tlsconnect(s).tap { verified = true }
  16. ensure
  17. unless verified
  18. s.close rescue nil
  19. end
  20. end
  21. end
  22. rescue NameError
  23. end
  24. end
  25. end
  26. end

target/rubygems/gems/mail-2.7.1/lib/mail/core_extensions/string.rb

42.86% lines covered

7 relevant lines. 3 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 class String #:nodoc:
  4. 1 unless method_defined?(:ascii_only?)
  5. # Backport from Ruby 1.9 checks for non-us-ascii characters.
  6. def ascii_only?
  7. self !~ MATCH_NON_US_ASCII
  8. end
  9. MATCH_NON_US_ASCII = /[^\x00-\x7f]/
  10. end
  11. 1 unless method_defined?(:bytesize)
  12. alias :bytesize :length
  13. end
  14. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements.rb

100.0% lines covered

13 relevant lines. 13 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 register_autoload :Address, 'mail/elements/address'
  4. 1 register_autoload :AddressList, 'mail/elements/address_list'
  5. 1 register_autoload :ContentDispositionElement, 'mail/elements/content_disposition_element'
  6. 1 register_autoload :ContentLocationElement, 'mail/elements/content_location_element'
  7. 1 register_autoload :ContentTransferEncodingElement, 'mail/elements/content_transfer_encoding_element'
  8. 1 register_autoload :ContentTypeElement, 'mail/elements/content_type_element'
  9. 1 register_autoload :DateTimeElement, 'mail/elements/date_time_element'
  10. 1 register_autoload :EnvelopeFromElement, 'mail/elements/envelope_from_element'
  11. 1 register_autoload :MessageIdsElement, 'mail/elements/message_ids_element'
  12. 1 register_autoload :MimeVersionElement, 'mail/elements/mime_version_element'
  13. 1 register_autoload :PhraseList, 'mail/elements/phrase_list'
  14. 1 register_autoload :ReceivedElement, 'mail/elements/received_element'
  15. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/address.rb

30.3% lines covered

99 relevant lines. 30 lines covered and 69 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/address_lists_parser'
  4. 1 module Mail
  5. 1 class Address
  6. 1 include Mail::Utilities
  7. # Mail::Address handles all email addresses in Mail. It takes an email address string
  8. # and parses it, breaking it down into its component parts and allowing you to get the
  9. # address, comments, display name, name, local part, domain part and fully formatted
  10. # address.
  11. #
  12. # Mail::Address requires a correctly formatted email address per RFC2822 or RFC822. It
  13. # handles all obsolete versions including obsolete domain routing on the local part.
  14. #
  15. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  16. # a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
  17. # a.address #=> 'mikel@test.lindsaar.net'
  18. # a.display_name #=> 'Mikel Lindsaar'
  19. # a.local #=> 'mikel'
  20. # a.domain #=> 'test.lindsaar.net'
  21. # a.comments #=> ['My email address']
  22. # a.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
  23. 1 def initialize(value = nil)
  24. if value.nil?
  25. @parsed = false
  26. @data = nil
  27. else
  28. parse(value)
  29. end
  30. end
  31. # Returns the raw input of the passed in string, this is before it is passed
  32. # by the parser.
  33. 1 def raw
  34. @data.raw
  35. end
  36. # Returns a correctly formatted address for the email going out. If given
  37. # an incorrectly formatted address as input, Mail::Address will do its best
  38. # to format it correctly. This includes quoting display names as needed and
  39. # putting the address in angle brackets etc.
  40. #
  41. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  42. # a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
  43. 1 def format(output_type = :decode)
  44. parse unless @parsed
  45. if @data.nil?
  46. EMPTY
  47. elsif name = display_name(output_type)
  48. [quote_phrase(name), "<#{address(output_type)}>", format_comments].compact.join(SPACE)
  49. elsif a = address(output_type)
  50. [a, format_comments].compact.join(SPACE)
  51. else
  52. raw
  53. end
  54. end
  55. # Returns the address that is in the address itself. That is, the
  56. # local@domain string, without any angle brackets or the like.
  57. #
  58. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  59. # a.address #=> 'mikel@test.lindsaar.net'
  60. 1 def address(output_type = :decode)
  61. parse unless @parsed
  62. if d = domain(output_type)
  63. "#{local(output_type)}@#{d}"
  64. else
  65. local(output_type)
  66. end
  67. end
  68. # Provides a way to assign an address to an already made Mail::Address object.
  69. #
  70. # a = Address.new
  71. # a.address = 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
  72. # a.address #=> 'mikel@test.lindsaar.net'
  73. 1 def address=(value)
  74. parse(value)
  75. end
  76. # Returns the display name of the email address passed in.
  77. #
  78. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  79. # a.display_name #=> 'Mikel Lindsaar'
  80. 1 def display_name(output_type = :decode)
  81. parse unless @parsed
  82. @display_name ||= get_display_name
  83. Encodings.decode_encode(@display_name.to_s, output_type) if @display_name
  84. end
  85. # Provides a way to assign a display name to an already made Mail::Address object.
  86. #
  87. # a = Address.new
  88. # a.address = 'mikel@test.lindsaar.net'
  89. # a.display_name = 'Mikel Lindsaar'
  90. # a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
  91. 1 def display_name=( str )
  92. @display_name = str.nil? ? nil : str.dup # in case frozen
  93. end
  94. # Returns the local part (the left hand side of the @ sign in the email address) of
  95. # the address
  96. #
  97. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  98. # a.local #=> 'mikel'
  99. 1 def local(output_type = :decode)
  100. parse unless @parsed
  101. Encodings.decode_encode("#{@data.obs_domain_list}#{get_local.strip}", output_type) if get_local
  102. end
  103. # Returns the domain part (the right hand side of the @ sign in the email address) of
  104. # the address
  105. #
  106. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  107. # a.domain #=> 'test.lindsaar.net'
  108. 1 def domain(output_type = :decode)
  109. parse unless @parsed
  110. Encodings.decode_encode(strip_all_comments(get_domain), output_type) if get_domain
  111. end
  112. # Returns an array of comments that are in the email, or nil if there
  113. # are no comments
  114. #
  115. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  116. # a.comments #=> ['My email address']
  117. #
  118. # b = Address.new('Mikel Lindsaar <mikel@test.lindsaar.net>')
  119. # b.comments #=> nil
  120. 1 def comments
  121. parse unless @parsed
  122. comments = get_comments
  123. if comments.nil? || comments.none?
  124. nil
  125. else
  126. comments.map { |c| c.squeeze(SPACE) }
  127. end
  128. end
  129. # Sometimes an address will not have a display name, but might have the name
  130. # as a comment field after the address. This returns that name if it exists.
  131. #
  132. # a = Address.new('mikel@test.lindsaar.net (Mikel Lindsaar)')
  133. # a.name #=> 'Mikel Lindsaar'
  134. 1 def name
  135. parse unless @parsed
  136. get_name
  137. end
  138. # Returns the format of the address, or returns nothing
  139. #
  140. # a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
  141. # a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
  142. 1 def to_s
  143. parse unless @parsed
  144. format
  145. end
  146. # Shows the Address object basic details, including the Address
  147. # a = Address.new('Mikel (My email) <mikel@test.lindsaar.net>')
  148. # a.inspect #=> "#<Mail::Address:14184910 Address: |Mikel <mikel@test.lindsaar.net> (My email)| >"
  149. 1 def inspect
  150. parse unless @parsed
  151. "#<#{self.class}:#{self.object_id} Address: |#{to_s}| >"
  152. end
  153. 1 def encoded
  154. format :encode
  155. end
  156. 1 def decoded
  157. format :decode
  158. end
  159. 1 def group
  160. @data && @data.group
  161. end
  162. 1 private
  163. 1 def parse(value = nil)
  164. @parsed = true
  165. @data = nil
  166. case value
  167. when Mail::Parsers::AddressListsParser::AddressStruct
  168. @data = value
  169. when String
  170. unless Utilities.blank?(value)
  171. address_list = Mail::Parsers::AddressListsParser.parse(value)
  172. @data = address_list.addresses.first
  173. end
  174. end
  175. end
  176. 1 def strip_all_comments(string)
  177. unless Utilities.blank?(comments)
  178. comments.each do |comment|
  179. string = string.gsub("(#{comment})", EMPTY)
  180. end
  181. end
  182. string.strip
  183. end
  184. 1 def strip_domain_comments(value)
  185. unless Utilities.blank?(comments)
  186. comments.each do |comment|
  187. if @data.domain && @data.domain.include?("(#{comment})")
  188. value = value.gsub("(#{comment})", EMPTY)
  189. end
  190. end
  191. end
  192. value.to_s.strip
  193. end
  194. 1 def get_display_name
  195. if @data && @data.display_name
  196. str = strip_all_comments(@data.display_name.to_s)
  197. elsif @data && @data.comments && @data.domain
  198. str = strip_domain_comments(format_comments)
  199. end
  200. str unless Utilities.blank?(str)
  201. end
  202. 1 def get_name
  203. if display_name
  204. str = display_name
  205. elsif comments
  206. str = "(#{comments.join(SPACE).squeeze(SPACE)})"
  207. end
  208. unparen(str) unless Utilities.blank?(str)
  209. end
  210. 1 def format_comments
  211. if comments
  212. comment_text = comments.map {|c| escape_paren(c) }.join(SPACE).squeeze(SPACE)
  213. @format_comments ||= "(#{comment_text})"
  214. else
  215. nil
  216. end
  217. end
  218. 1 def get_local
  219. @data && @data.local
  220. end
  221. 1 def get_domain
  222. @data && @data.domain
  223. end
  224. 1 def get_comments
  225. @data && @data.comments
  226. end
  227. end
  228. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/address_list.rb

60.0% lines covered

10 relevant lines. 6 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/address_lists_parser'
  4. 1 module Mail
  5. 1 class AddressList # :nodoc:
  6. 1 attr_reader :addresses, :group_names
  7. # Mail::AddressList is the class that parses To, From and other address fields from
  8. # emails passed into Mail.
  9. #
  10. # AddressList provides a way to query the groups and mailbox lists of the passed in
  11. # string.
  12. #
  13. # It can supply all addresses in an array, or return each address as an address object.
  14. #
  15. # Mail::AddressList requires a correctly formatted group or mailbox list per RFC2822 or
  16. # RFC822. It also handles all obsolete versions in those RFCs.
  17. #
  18. # list = 'ada@test.lindsaar.net, My Group: mikel@test.lindsaar.net, Bob <bob@test.lindsaar.net>;'
  19. # a = AddressList.new(list)
  20. # a.addresses #=> [#<Mail::Address:14943130 Address: |ada@test.lindsaar.net...
  21. # a.group_names #=> ["My Group"]
  22. 1 def initialize(string)
  23. address_list = Parsers::AddressListsParser.parse(string)
  24. @addresses = address_list.addresses.map { |a| Address.new(a) }
  25. @group_names = address_list.group_names
  26. end
  27. 1 def addresses_grouped_by_group
  28. addresses.select(&:group).group_by(&:group)
  29. end
  30. end
  31. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_disposition_element.rb

63.64% lines covered

11 relevant lines. 7 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/content_disposition_parser'
  4. 1 module Mail
  5. 1 class ContentDispositionElement # :nodoc:
  6. 1 attr_reader :disposition_type, :parameters
  7. 1 def initialize(string)
  8. content_disposition = Mail::Parsers::ContentDispositionParser.parse(cleaned(string))
  9. @disposition_type = content_disposition.disposition_type
  10. @parameters = content_disposition.parameters
  11. end
  12. 1 private
  13. 1 def cleaned(string)
  14. string =~ /(.+);\s*$/ ? $1 : string
  15. end
  16. end
  17. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_location_element.rb

75.0% lines covered

8 relevant lines. 6 lines covered and 2 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/content_location_parser'
  4. 1 module Mail
  5. 1 class ContentLocationElement # :nodoc:
  6. 1 attr_reader :location
  7. 1 def initialize(string)
  8. @location = Mail::Parsers::ContentLocationParser.parse(string).location
  9. end
  10. 1 def to_s(*args)
  11. location.to_s
  12. end
  13. end
  14. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_transfer_encoding_element.rb

83.33% lines covered

6 relevant lines. 5 lines covered and 1 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/content_transfer_encoding_parser'
  4. 1 module Mail
  5. 1 class ContentTransferEncodingElement
  6. 1 attr_reader :encoding
  7. 1 def initialize(string)
  8. @encoding = Mail::Parsers::ContentTransferEncodingParser.parse(string).encoding
  9. end
  10. end
  11. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/content_type_element.rb

58.33% lines covered

12 relevant lines. 7 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/content_type_parser'
  4. 1 module Mail
  5. 1 class ContentTypeElement # :nodoc:
  6. 1 attr_reader :main_type, :sub_type, :parameters
  7. 1 def initialize(string)
  8. content_type = Mail::Parsers::ContentTypeParser.parse(cleaned(string))
  9. @main_type = content_type.main_type
  10. @sub_type = content_type.sub_type
  11. @parameters = content_type.parameters
  12. end
  13. 1 private
  14. 1 def cleaned(string)
  15. string =~ /(.+);\s*$/ ? $1 : string
  16. end
  17. end
  18. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/date_time_element.rb

62.5% lines covered

8 relevant lines. 5 lines covered and 3 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/date_time_parser'
  4. 1 module Mail
  5. 1 class DateTimeElement # :nodoc:
  6. 1 attr_reader :date_string, :time_string
  7. 1 def initialize(string)
  8. date_time = Mail::Parsers::DateTimeParser.parse(string)
  9. @date_string = date_time.date_string
  10. @time_string = date_time.time_string
  11. end
  12. end
  13. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/envelope_from_element.rb

53.33% lines covered

15 relevant lines. 8 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/envelope_from_parser'
  4. 1 require 'date'
  5. 1 module Mail
  6. 1 class EnvelopeFromElement
  7. 1 attr_reader :date_time, :address
  8. 1 def initialize(string)
  9. envelope_from = Mail::Parsers::EnvelopeFromParser.parse(string)
  10. @address = envelope_from.address
  11. @date_time = ::DateTime.parse(envelope_from.ctime_date)
  12. end
  13. # RFC 4155:
  14. # a timestamp indicating the UTC date and time when the message
  15. # was originally received, conformant with the syntax of the
  16. # traditional UNIX 'ctime' output sans timezone (note that the
  17. # use of UTC precludes the need for a timezone indicator);
  18. 1 def formatted_date_time
  19. if date_time.respond_to?(:ctime)
  20. date_time.ctime
  21. else
  22. date_time.strftime '%a %b %e %T %Y'
  23. end
  24. end
  25. 1 def to_s
  26. "#{address} #{formatted_date_time}"
  27. end
  28. end
  29. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/message_ids_element.rb

72.73% lines covered

11 relevant lines. 8 lines covered and 3 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/message_ids_parser'
  4. 1 module Mail
  5. 1 class MessageIdsElement
  6. 1 attr_reader :message_ids
  7. 1 def initialize(string)
  8. @message_ids = Mail::Parsers::MessageIdsParser.parse(string).message_ids.map { |msg_id| clean_msg_id(msg_id) }
  9. end
  10. 1 def message_id
  11. message_ids.first
  12. end
  13. 1 private
  14. 1 def clean_msg_id(val)
  15. val =~ /.*<(.*)>.*/ ? $1 : val
  16. end
  17. end
  18. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/mime_version_element.rb

62.5% lines covered

8 relevant lines. 5 lines covered and 3 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/mime_version_parser'
  4. 1 module Mail
  5. 1 class MimeVersionElement
  6. 1 attr_reader :major, :minor
  7. 1 def initialize(string)
  8. mime_version = Mail::Parsers::MimeVersionParser.parse(string)
  9. @major = mime_version.major
  10. @minor = mime_version.minor
  11. end
  12. end
  13. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/phrase_list.rb

85.71% lines covered

7 relevant lines. 6 lines covered and 1 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/phrase_lists_parser'
  4. 1 require 'mail/utilities'
  5. 1 module Mail
  6. 1 class PhraseList
  7. 1 attr_reader :phrases
  8. 1 def initialize(string)
  9. @phrases = Mail::Parsers::PhraseListsParser.parse(string).phrases.map { |p| Mail::Utilities.unquote(p) }
  10. end
  11. end
  12. end

target/rubygems/gems/mail-2.7.1/lib/mail/elements/received_element.rb

66.67% lines covered

12 relevant lines. 8 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/parsers/received_parser'
  4. 1 require 'date'
  5. 1 module Mail
  6. 1 class ReceivedElement
  7. 1 include Mail::Utilities
  8. 1 attr_reader :date_time, :info
  9. 1 def initialize(string)
  10. received = Mail::Parsers::ReceivedParser.parse(string)
  11. @date_time = ::DateTime.parse("#{received.date} #{received.time}")
  12. @info = received.info
  13. end
  14. 1 def to_s(*args)
  15. "#{info}; #{date_time.to_s(*args)}"
  16. end
  17. end
  18. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings.rb

26.19% lines covered

126 relevant lines. 33 lines covered and 93 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # Raised when attempting to decode an unknown encoding type
  5. 1 class UnknownEncodingType < StandardError #:nodoc:
  6. end
  7. 1 module Encodings
  8. 1 include Mail::Constants
  9. 1 extend Mail::Utilities
  10. 1 @transfer_encodings = {}
  11. # Register transfer encoding
  12. #
  13. # Example
  14. #
  15. # Encodings.register "base64", Mail::Encodings::Base64
  16. 1 def Encodings.register(name, cls)
  17. 8 @transfer_encodings[get_name(name)] = cls
  18. end
  19. # Is the encoding we want defined?
  20. #
  21. # Example:
  22. #
  23. # Encodings.defined?(:base64) #=> true
  24. 1 def Encodings.defined?(name)
  25. @transfer_encodings.include? get_name(name)
  26. end
  27. # Gets a defined encoding type, QuotedPrintable or Base64 for now.
  28. #
  29. # Each encoding needs to be defined as a Mail::Encodings::ClassName for
  30. # this to work, allows us to add other encodings in the future.
  31. #
  32. # Example:
  33. #
  34. # Encodings.get_encoding(:base64) #=> Mail::Encodings::Base64
  35. 1 def Encodings.get_encoding(name)
  36. @transfer_encodings[get_name(name)]
  37. end
  38. 1 def Encodings.get_all
  39. @transfer_encodings.values
  40. end
  41. 1 def Encodings.get_name(name)
  42. 8 underscoreize(name).downcase
  43. end
  44. 1 def Encodings.transcode_charset(str, from_charset, to_charset = 'UTF-8')
  45. if from_charset
  46. RubyVer.transcode_charset str, from_charset, to_charset
  47. else
  48. str
  49. end
  50. end
  51. # Encodes a parameter value using URI Escaping, note the language field 'en' can
  52. # be set using Mail::Configuration, like so:
  53. #
  54. # Mail.defaults do
  55. # param_encode_language 'jp'
  56. # end
  57. #
  58. # The character set used for encoding will either be the value of $KCODE for
  59. # Ruby < 1.9 or the encoding on the string passed in.
  60. #
  61. # Example:
  62. #
  63. # Mail::Encodings.param_encode("This is fun") #=> "us-ascii'en'This%20is%20fun"
  64. 1 def Encodings.param_encode(str)
  65. case
  66. when str.ascii_only? && str =~ TOKEN_UNSAFE
  67. %Q{"#{str}"}
  68. when str.ascii_only?
  69. str
  70. else
  71. RubyVer.param_encode(str)
  72. end
  73. end
  74. # Decodes a parameter value using URI Escaping.
  75. #
  76. # Example:
  77. #
  78. # Mail::Encodings.param_decode("This%20is%20fun", 'us-ascii') #=> "This is fun"
  79. #
  80. # str = Mail::Encodings.param_decode("This%20is%20fun", 'iso-8559-1')
  81. # str.encoding #=> 'ISO-8859-1' ## Only on Ruby 1.9
  82. # str #=> "This is fun"
  83. 1 def Encodings.param_decode(str, encoding)
  84. RubyVer.param_decode(str, encoding)
  85. end
  86. # Decodes or encodes a string as needed for either Base64 or QP encoding types in
  87. # the =?<encoding>?[QB]?<string>?=" format.
  88. #
  89. # The output type needs to be :decode to decode the input string or :encode to
  90. # encode the input string. The character set used for encoding will either be
  91. # the value of $KCODE for Ruby < 1.9 or the encoding on the string passed in.
  92. #
  93. # On encoding, will only send out Base64 encoded strings.
  94. 1 def Encodings.decode_encode(str, output_type)
  95. case
  96. when output_type == :decode
  97. Encodings.value_decode(str)
  98. else
  99. if str.ascii_only?
  100. str
  101. else
  102. Encodings.b_value_encode(str, find_encoding(str))
  103. end
  104. end
  105. end
  106. # Decodes a given string as Base64 or Quoted Printable, depending on what
  107. # type it is.
  108. #
  109. # String has to be of the format =?<encoding>?[QB]?<string>?=
  110. 1 def Encodings.value_decode(str)
  111. # Optimization: If there's no encoded-words in the string, just return it
  112. return str unless str =~ ENCODED_VALUE
  113. lines = collapse_adjacent_encodings(str)
  114. # Split on white-space boundaries with capture, so we capture the white-space as well
  115. lines.each do |line|
  116. line.gsub!(ENCODED_VALUE) do |string|
  117. case $2
  118. when *B_VALUES then b_value_decode(string)
  119. when *Q_VALUES then q_value_decode(string)
  120. end
  121. end
  122. end.join("")
  123. end
  124. # Takes an encoded string of the format =?<encoding>?[QB]?<string>?=
  125. 1 def Encodings.unquote_and_convert_to(str, to_encoding)
  126. output = value_decode( str ).to_s # output is already converted to UTF-8
  127. if 'utf8' == to_encoding.to_s.downcase.gsub("-", "")
  128. output
  129. elsif to_encoding
  130. begin
  131. if RUBY_VERSION >= '1.9'
  132. output.encode(to_encoding)
  133. else
  134. require 'iconv'
  135. Iconv.iconv(to_encoding, 'UTF-8', output).first
  136. end
  137. rescue Iconv::IllegalSequence, Iconv::InvalidEncoding, Errno::EINVAL
  138. # the 'from' parameter specifies a charset other than what the text
  139. # actually is...not much we can do in this case but just return the
  140. # unconverted text.
  141. #
  142. # Ditto if either parameter represents an unknown charset, like
  143. # X-UNKNOWN.
  144. output
  145. end
  146. else
  147. output
  148. end
  149. end
  150. 1 def Encodings.address_encode(address, charset = 'utf-8')
  151. if address.is_a?(Array)
  152. address.compact.map { |a| Encodings.address_encode(a, charset) }.join(", ")
  153. elsif address
  154. encode_non_usascii(address, charset)
  155. end
  156. end
  157. 1 def Encodings.encode_non_usascii(address, charset)
  158. return address if address.ascii_only? or charset.nil?
  159. # With KCODE=u we can't use regexps on other encodings. Go ASCII.
  160. with_ascii_kcode do
  161. # Encode all strings embedded inside of quotes
  162. address = address.gsub(/("[^"]*[^\/]")/) { |s| Encodings.b_value_encode(unquote(s), charset) }
  163. # Then loop through all remaining items and encode as needed
  164. tokens = address.split(/\s/)
  165. map_with_index(tokens) do |word, i|
  166. if word.ascii_only?
  167. word
  168. else
  169. previous_non_ascii = i>0 && tokens[i-1] && !tokens[i-1].ascii_only?
  170. if previous_non_ascii #why are we adding an extra space here?
  171. word = " #{word}"
  172. end
  173. Encodings.b_value_encode(word, charset)
  174. end
  175. end.join(' ')
  176. end
  177. end
  178. 1 if RUBY_VERSION < '1.9'
  179. # With KCODE=u we can't use regexps on other encodings. Go ASCII.
  180. def Encodings.with_ascii_kcode #:nodoc:
  181. if $KCODE
  182. $KCODE, original_kcode = '', $KCODE
  183. end
  184. yield
  185. ensure
  186. $KCODE = original_kcode if original_kcode
  187. end
  188. else
  189. 1 def Encodings.with_ascii_kcode #:nodoc:
  190. yield
  191. end
  192. end
  193. # Encode a string with Base64 Encoding and returns it ready to be inserted
  194. # as a value for a field, that is, in the =?<charset>?B?<string>?= format
  195. #
  196. # Example:
  197. #
  198. # Encodings.b_value_encode('This is ��� string', 'UTF-8')
  199. # #=> "=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?="
  200. 1 def Encodings.b_value_encode(string, encoding = nil)
  201. if string.to_s.ascii_only?
  202. string
  203. else
  204. Encodings.each_base64_chunk_byterange(string, 60).map do |chunk|
  205. str, encoding = RubyVer.b_value_encode(chunk, encoding)
  206. "=?#{encoding}?B?#{str.chomp}?="
  207. end.join(" ")
  208. end
  209. end
  210. # Encode a string with Quoted-Printable Encoding and returns it ready to be inserted
  211. # as a value for a field, that is, in the =?<charset>?Q?<string>?= format
  212. #
  213. # Example:
  214. #
  215. # Encodings.q_value_encode('This is ��� string', 'UTF-8')
  216. # #=> "=?UTF-8?Q?This_is_=E3=81=82_string?="
  217. 1 def Encodings.q_value_encode(encoded_str, encoding = nil)
  218. return encoded_str if encoded_str.to_s.ascii_only?
  219. string, encoding = RubyVer.q_value_encode(encoded_str, encoding)
  220. string.gsub!("=\r\n", '') # We already have limited the string to the length we want
  221. map_lines(string) do |str|
  222. "=?#{encoding}?Q?#{str.chomp.gsub(/ /, '_')}?="
  223. end.join(" ")
  224. end
  225. 1 private
  226. # Decodes a Base64 string from the "=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=" format
  227. #
  228. # Example:
  229. #
  230. # Encodings.b_value_decode("=?UTF-8?B?VGhpcyBpcyDjgYIgc3RyaW5n?=")
  231. # #=> 'This is ��� string'
  232. 1 def Encodings.b_value_decode(str)
  233. RubyVer.b_value_decode(str)
  234. end
  235. # Decodes a Quoted-Printable string from the "=?UTF-8?Q?This_is_=E3=81=82_string?=" format
  236. #
  237. # Example:
  238. #
  239. # Encodings.q_value_decode("=?UTF-8?Q?This_is_=E3=81=82_string?=")
  240. # #=> 'This is ��� string'
  241. 1 def Encodings.q_value_decode(str)
  242. RubyVer.q_value_decode(str)
  243. end
  244. 1 def Encodings.find_encoding(str)
  245. RUBY_VERSION >= '1.9' ? str.encoding : $KCODE
  246. end
  247. # Gets the encoding type (Q or B) from the string.
  248. 1 def Encodings.value_encoding_from_string(str)
  249. str[ENCODED_VALUE, 1]
  250. end
  251. # Split header line into proper encoded and unencoded parts.
  252. #
  253. # String has to be of the format =?<encoding>?[QB]?<string>?=
  254. #
  255. # Omit unencoded space after an encoded-word.
  256. 1 def Encodings.collapse_adjacent_encodings(str)
  257. results = []
  258. last_encoded = nil # Track whether to preserve or drop whitespace
  259. lines = str.split(FULL_ENCODED_VALUE)
  260. lines.each_slice(2) do |unencoded, encoded|
  261. if last_encoded = encoded
  262. if !Utilities.blank?(unencoded) || (!last_encoded && unencoded != EMPTY)
  263. results << unencoded
  264. end
  265. results << encoded
  266. else
  267. results << unencoded
  268. end
  269. end
  270. results
  271. end
  272. # Partition the string into bounded-size chunks without splitting
  273. # multibyte characters.
  274. 1 def Encodings.each_base64_chunk_byterange(str, max_bytesize_per_base64_chunk, &block)
  275. raise "size per chunk must be multiple of 4" if (max_bytesize_per_base64_chunk % 4).nonzero?
  276. if block_given?
  277. max_bytesize = ((3 * max_bytesize_per_base64_chunk) / 4.0).floor
  278. each_chunk_byterange(str, max_bytesize, &block)
  279. else
  280. enum_for :each_base64_chunk_byterange, str, max_bytesize_per_base64_chunk
  281. end
  282. end
  283. # Partition the string into bounded-size chunks without splitting
  284. # multibyte characters.
  285. 1 def Encodings.each_chunk_byterange(str, max_bytesize_per_chunk)
  286. return enum_for(:each_chunk_byterange, str, max_bytesize_per_chunk) unless block_given?
  287. offset = 0
  288. chunksize = 0
  289. str.each_char do |chr|
  290. charsize = chr.bytesize
  291. if chunksize + charsize > max_bytesize_per_chunk
  292. yield RubyVer.string_byteslice(str, offset, chunksize)
  293. offset += chunksize
  294. chunksize = charsize
  295. else
  296. chunksize += charsize
  297. end
  298. end
  299. yield RubyVer.string_byteslice(str, offset, chunksize)
  300. end
  301. end
  302. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/7bit.rb

81.82% lines covered

11 relevant lines. 9 lines covered and 2 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/8bit'
  4. 1 module Mail
  5. 1 module Encodings
  6. # 7bit and 8bit are equivalent. 7bit encoding is for text only.
  7. 1 class SevenBit < EightBit
  8. 1 NAME = '7bit'
  9. 1 PRIORITY = 1
  10. 1 Encodings.register(NAME, self)
  11. 1 def self.decode(str)
  12. ::Mail::Utilities.binary_unsafe_to_lf str
  13. end
  14. 1 def self.encode(str)
  15. ::Mail::Utilities.binary_unsafe_to_crlf str
  16. end
  17. end
  18. end
  19. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/8bit.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/binary'
  4. 1 module Mail
  5. 1 module Encodings
  6. 1 class EightBit < Binary
  7. 1 NAME = '8bit'
  8. 1 PRIORITY = 4
  9. 1 Encodings.register(NAME, self)
  10. # Per RFC 2821 4.5.3.1, SMTP lines may not be longer than 1000 octets including the <CRLF>.
  11. 1 def self.compatible_input?(str)
  12. !str.lines.find { |line| line.bytesize > 998 }
  13. end
  14. end
  15. end
  16. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/base64.rb

70.59% lines covered

17 relevant lines. 12 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/7bit'
  4. 1 module Mail
  5. 1 module Encodings
  6. # Base64 encoding handles binary content at the cost of 4 output bytes
  7. # per input byte.
  8. 1 class Base64 < SevenBit
  9. 1 NAME = 'base64'
  10. 1 PRIORITY = 3
  11. 1 Encodings.register(NAME, self)
  12. 1 def self.can_encode?(enc)
  13. true
  14. end
  15. 1 def self.decode(str)
  16. RubyVer.decode_base64(str)
  17. end
  18. 1 def self.encode(str)
  19. ::Mail::Utilities.binary_unsafe_to_crlf(RubyVer.encode_base64(str))
  20. end
  21. # 3 bytes in -> 4 bytes out
  22. 1 def self.cost(str)
  23. 4.0 / 3
  24. end
  25. # Ruby Base64 inserts newlines automatically, so it doesn't exceed
  26. # SMTP line length limits.
  27. 1 def self.compatible_input?(str)
  28. true
  29. end
  30. end
  31. end
  32. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/binary.rb

100.0% lines covered

7 relevant lines. 7 lines covered and 0 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/identity'
  4. 1 module Mail
  5. 1 module Encodings
  6. 1 class Binary < Identity
  7. 1 NAME = 'binary'
  8. 1 PRIORITY = 5
  9. 1 Encodings.register(NAME, self)
  10. end
  11. end
  12. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/identity.rb

70.0% lines covered

10 relevant lines. 7 lines covered and 3 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/transfer_encoding'
  4. 1 module Mail
  5. 1 module Encodings
  6. # Identity encodings do no encoding/decoding and have a fixed cost:
  7. # 1 byte in -> 1 byte out.
  8. 1 class Identity < TransferEncoding #:nodoc:
  9. 1 def self.decode(str)
  10. str
  11. end
  12. 1 def self.encode(str)
  13. str
  14. end
  15. # 1 output byte per input byte.
  16. 1 def self.cost(str)
  17. 1.0
  18. end
  19. end
  20. end
  21. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/quoted_printable.rb

65.0% lines covered

20 relevant lines. 13 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/encodings/7bit'
  4. 1 module Mail
  5. 1 module Encodings
  6. 1 class QuotedPrintable < SevenBit
  7. 1 NAME='quoted-printable'
  8. 1 PRIORITY = 2
  9. 1 def self.can_encode?(enc)
  10. EightBit.can_encode? enc
  11. end
  12. # Decode the string from Quoted-Printable. Cope with hard line breaks
  13. # that were incorrectly encoded as hex instead of literal CRLF.
  14. 1 def self.decode(str)
  15. str.gsub(/(?:=0D=0A|=0D|=0A)\r\n/, "\r\n").unpack("M*").first
  16. end
  17. 1 def self.encode(str)
  18. [str].pack("M")
  19. end
  20. 1 def self.cost(str)
  21. # These bytes probably do not need encoding
  22. c = str.count("\x9\xA\xD\x20-\x3C\x3E-\x7E")
  23. # Everything else turns into =XX where XX is a
  24. # two digit hex number (taking 3 bytes)
  25. total = (str.bytesize - c)*3 + c
  26. total.to_f/str.bytesize
  27. end
  28. # QP inserts newlines automatically and cannot violate the SMTP spec.
  29. 1 def self.compatible_input?(str)
  30. true
  31. end
  32. 1 private
  33. 1 Encodings.register(NAME, self)
  34. end
  35. end
  36. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/transfer_encoding.rb

37.14% lines covered

35 relevant lines. 13 lines covered and 22 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 module Encodings
  5. 1 class TransferEncoding
  6. 1 NAME = ''
  7. 1 PRIORITY = -1
  8. # And encoding's superclass can always transport it since the
  9. # class hierarchy is arranged e.g. Base64 < 7bit < 8bit < Binary.
  10. 1 def self.can_transport?(enc)
  11. enc && enc <= self
  12. end
  13. # Override in subclasses to indicate that they can encode text
  14. # that couldn't be directly transported, e.g. Base64 has 7bit output,
  15. # but it can encode binary.
  16. 1 def self.can_encode?(enc)
  17. can_transport? enc
  18. end
  19. 1 def self.cost(str)
  20. raise "Unimplemented"
  21. end
  22. 1 def self.compatible_input?(str)
  23. true
  24. end
  25. 1 def self.to_s
  26. self::NAME
  27. end
  28. 1 def self.negotiate(message_encoding, source_encoding, str, allowed_encodings = nil)
  29. message_encoding = Encodings.get_encoding(message_encoding) || Encodings.get_encoding('8bit')
  30. source_encoding = Encodings.get_encoding(source_encoding)
  31. if message_encoding && source_encoding && message_encoding.can_transport?(source_encoding) && source_encoding.compatible_input?(str)
  32. source_encoding
  33. else
  34. renegotiate(message_encoding, source_encoding, str, allowed_encodings)
  35. end
  36. end
  37. 1 def self.renegotiate(message_encoding, source_encoding, str, allowed_encodings = nil)
  38. encodings = Encodings.get_all.select do |enc|
  39. (allowed_encodings.nil? || allowed_encodings.include?(enc)) &&
  40. message_encoding.can_transport?(enc) &&
  41. enc.can_encode?(source_encoding)
  42. end
  43. lowest_cost(str, encodings)
  44. end
  45. 1 def self.lowest_cost(str, encodings)
  46. best = nil
  47. best_cost = nil
  48. encodings.each do |enc|
  49. # If the current choice cannot be transported safely, give priority
  50. # to other choices but allow it to be used as a fallback.
  51. this_cost = enc.cost(str) if enc.compatible_input?(str)
  52. if !best_cost || (this_cost && this_cost < best_cost)
  53. best_cost = this_cost
  54. best = enc
  55. elsif this_cost == best_cost
  56. best = enc if enc::PRIORITY < best::PRIORITY
  57. end
  58. end
  59. best
  60. end
  61. end
  62. end
  63. end

target/rubygems/gems/mail-2.7.1/lib/mail/encodings/unix_to_unix.rb

81.82% lines covered

11 relevant lines. 9 lines covered and 2 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module Encodings
  4. 1 class UnixToUnix < TransferEncoding
  5. 1 NAME = "x-uuencode"
  6. 1 def self.decode(str)
  7. str.sub(/\Abegin \d+ [^\n]*\n/, '').unpack('u').first
  8. end
  9. 1 def self.encode(str)
  10. [str].pack("u")
  11. end
  12. 1 Encodings.register(NAME, self)
  13. 1 Encodings.register("uuencode", self)
  14. 1 Encodings.register("x-uue", self)
  15. end
  16. end
  17. end

target/rubygems/gems/mail-2.7.1/lib/mail/envelope.rb

60.0% lines covered

10 relevant lines. 6 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Mail Envelope
  5. #
  6. # The Envelope class provides a field for the first line in an
  7. # mbox file, that looks like "From mikel@test.lindsaar.net DATETIME"
  8. #
  9. # This envelope class reads that line, and turns it into an
  10. # Envelope.from and Envelope.date for your use.
  11. 1 module Mail
  12. 1 class Envelope < StructuredField
  13. 1 def initialize(*args)
  14. super(FIELD_NAME, args.last.to_s)
  15. end
  16. 1 def element
  17. @element ||= Mail::EnvelopeFromElement.new(value)
  18. end
  19. 1 def date
  20. ::DateTime.parse("#{element.date_time}")
  21. end
  22. 1 def from
  23. element.address
  24. end
  25. end
  26. end

target/rubygems/gems/mail-2.7.1/lib/mail/field.rb

43.86% lines covered

114 relevant lines. 50 lines covered and 64 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/fields'
  3. 1 require 'mail/constants'
  4. # encoding: utf-8
  5. 1 module Mail
  6. # Provides a single class to call to create a new structured or unstructured
  7. # field. Works out per RFC what field of field it is being given and returns
  8. # the correct field of class back on new.
  9. #
  10. # ===Per RFC 2822
  11. #
  12. # 2.2. Header Fields
  13. #
  14. # Header fields are lines composed of a field name, followed by a colon
  15. # (":"), followed by a field body, and terminated by CRLF. A field
  16. # name MUST be composed of printable US-ASCII characters (i.e.,
  17. # characters that have values between 33 and 126, inclusive), except
  18. # colon. A field body may be composed of any US-ASCII characters,
  19. # except for CR and LF. However, a field body may contain CRLF when
  20. # used in header "folding" and "unfolding" as described in section
  21. # 2.2.3. All field bodies MUST conform to the syntax described in
  22. # sections 3 and 4 of this standard.
  23. #
  24. 1 class Field
  25. 1 include Utilities
  26. 1 include Comparable
  27. 1 STRUCTURED_FIELDS = %w[ bcc cc content-description content-disposition
  28. content-id content-location content-transfer-encoding
  29. content-type date from in-reply-to keywords message-id
  30. mime-version received references reply-to
  31. resent-bcc resent-cc resent-date resent-from
  32. resent-message-id resent-sender resent-to
  33. return-path sender to ]
  34. 1 KNOWN_FIELDS = STRUCTURED_FIELDS + ['comments', 'subject']
  35. 1 FIELDS_MAP = {
  36. "to" => ToField,
  37. "cc" => CcField,
  38. "bcc" => BccField,
  39. "message-id" => MessageIdField,
  40. "in-reply-to" => InReplyToField,
  41. "references" => ReferencesField,
  42. "subject" => SubjectField,
  43. "comments" => CommentsField,
  44. "keywords" => KeywordsField,
  45. "date" => DateField,
  46. "from" => FromField,
  47. "sender" => SenderField,
  48. "reply-to" => ReplyToField,
  49. "resent-date" => ResentDateField,
  50. "resent-from" => ResentFromField,
  51. "resent-sender" => ResentSenderField,
  52. "resent-to" => ResentToField,
  53. "resent-cc" => ResentCcField,
  54. "resent-bcc" => ResentBccField,
  55. "resent-message-id" => ResentMessageIdField,
  56. "return-path" => ReturnPathField,
  57. "received" => ReceivedField,
  58. "mime-version" => MimeVersionField,
  59. "content-transfer-encoding" => ContentTransferEncodingField,
  60. "content-description" => ContentDescriptionField,
  61. "content-disposition" => ContentDispositionField,
  62. "content-type" => ContentTypeField,
  63. "content-id" => ContentIdField,
  64. "content-location" => ContentLocationField,
  65. }
  66. 1 FIELD_NAME_MAP = FIELDS_MAP.inject({}) do |map, (field, field_klass)|
  67. 29 map.update(field => field_klass::CAPITALIZED_FIELD)
  68. end
  69. # Generic Field Exception
  70. 1 class FieldError < StandardError
  71. end
  72. # Raised when a parsing error has occurred (ie, a StructuredField has tried
  73. # to parse a field that is invalid or improperly written)
  74. 1 class ParseError < FieldError #:nodoc:
  75. 1 attr_accessor :element, :value, :reason
  76. 1 def initialize(element, value, reason)
  77. @element = element
  78. @value = to_utf8(value)
  79. @reason = to_utf8(reason)
  80. super("#{@element} can not parse |#{@value}|: #{@reason}")
  81. end
  82. 1 private
  83. 1 def to_utf8(text)
  84. if text.respond_to?(:force_encoding)
  85. text.dup.force_encoding(Encoding::UTF_8)
  86. else
  87. text
  88. end
  89. end
  90. end
  91. 1 class NilParseError < ParseError #:nodoc:
  92. 1 def initialize(element)
  93. super element, nil, 'nil is invalid'
  94. end
  95. end
  96. 1 class IncompleteParseError < ParseError #:nodoc:
  97. 1 def initialize(element, original_text, unparsed_index)
  98. parsed_text = to_utf8(original_text[0...unparsed_index])
  99. super element, original_text, "Only able to parse up to #{parsed_text.inspect}"
  100. end
  101. end
  102. # Raised when attempting to set a structured field's contents to an invalid syntax
  103. 1 class SyntaxError < FieldError #:nodoc:
  104. end
  105. 1 class << self
  106. # Parse a field from a raw header line:
  107. #
  108. # Mail::Field.parse("field-name: field data")
  109. # # => #<Mail::Field ���>
  110. 1 def parse(field, charset = nil)
  111. name, value = split(field)
  112. if name && value
  113. new name, value, charset
  114. end
  115. end
  116. 1 def split(raw_field) #:nodoc:
  117. if raw_field.index(Constants::COLON)
  118. name, value = raw_field.split(Constants::COLON, 2)
  119. name.rstrip!
  120. if name =~ /\A#{Constants::FIELD_NAME}\z/
  121. [ name.rstrip, value.strip ]
  122. else
  123. Kernel.warn "WARNING: Ignoring unparsable header #{raw_field.inspect}: invalid header name syntax: #{name.inspect}"
  124. nil
  125. end
  126. else
  127. raw_field.strip
  128. end
  129. rescue => error
  130. warn "WARNING: Ignoring unparsable header #{raw_field.inspect}: #{error.class}: #{error.message}"
  131. nil
  132. end
  133. end
  134. 1 attr_reader :unparsed_value
  135. # Create a field by name and optional value:
  136. #
  137. # Mail::Field.new("field-name", "value")
  138. # # => #<Mail::Field ���>
  139. #
  140. # Values that aren't strings or arrays are coerced to Strings with `#to_s`.
  141. #
  142. # Mail::Field.new("field-name", 1234)
  143. # # => #<Mail::Field ���>
  144. #
  145. # Mail::Field.new('content-type', ['text', 'plain', {:charset => 'UTF-8'}])
  146. # # => #<Mail::Field ���>
  147. 1 def initialize(name, value = nil, charset = 'utf-8')
  148. case
  149. when name.index(COLON)
  150. Kernel.warn 'Passing an unparsed header field to Mail::Field.new is deprecated and will be removed in Mail 2.8.0. Use Mail::Field.parse instead.'
  151. @name, @unparsed_value = self.class.split(name)
  152. @charset = Utilities.blank?(value) ? charset : value
  153. when Utilities.blank?(value)
  154. @name = name
  155. @unparsed_value = nil
  156. @charset = charset
  157. else
  158. @name = name
  159. @unparsed_value = value
  160. @charset = charset
  161. end
  162. @name = FIELD_NAME_MAP[@name.to_s.downcase] || @name
  163. end
  164. 1 def field=(value)
  165. @field = value
  166. end
  167. 1 def field
  168. @field ||= create_field(@name, @unparsed_value, @charset)
  169. end
  170. 1 def name
  171. @name
  172. end
  173. 1 def value
  174. field.value
  175. end
  176. 1 def value=(val)
  177. @field = create_field(name, val, @charset)
  178. end
  179. 1 def to_s
  180. field.to_s
  181. end
  182. 1 def inspect
  183. "#<#{self.class.name} 0x#{(object_id * 2).to_s(16)} #{instance_variables.map do |ivar|
  184. "#{ivar}=#{instance_variable_get(ivar).inspect}"
  185. end.join(" ")}>"
  186. end
  187. 1 def update(name, value)
  188. @field = create_field(name, value, @charset)
  189. end
  190. 1 def same( other )
  191. return false unless other.kind_of?(self.class)
  192. match_to_s(other.name, self.name)
  193. end
  194. 1 def ==( other )
  195. return false unless other.kind_of?(self.class)
  196. match_to_s(other.name, self.name) && match_to_s(other.value, self.value)
  197. end
  198. 1 def responsible_for?( val )
  199. name.to_s.casecmp(val.to_s) == 0
  200. end
  201. 1 def <=>( other )
  202. self.field_order_id <=> other.field_order_id
  203. end
  204. 1 def field_order_id
  205. @field_order_id ||= (FIELD_ORDER_LOOKUP[self.name.to_s.downcase] || 100)
  206. end
  207. 1 def method_missing(name, *args, &block)
  208. field.send(name, *args, &block)
  209. end
  210. 1 if RUBY_VERSION >= '1.9.2'
  211. 1 def respond_to_missing?(method_name, include_private)
  212. field.respond_to?(method_name, include_private) || super
  213. end
  214. else
  215. def respond_to?(method_name, include_private = false)
  216. field.respond_to?(method_name, include_private) || super
  217. end
  218. end
  219. 1 FIELD_ORDER = %w[ return-path received
  220. resent-date resent-from resent-sender resent-to
  221. resent-cc resent-bcc resent-message-id
  222. date from sender reply-to to cc bcc
  223. message-id in-reply-to references
  224. subject comments keywords
  225. mime-version content-type content-transfer-encoding
  226. content-location content-disposition content-description ]
  227. 1 FIELD_ORDER_LOOKUP = Hash[FIELD_ORDER.each_with_index.to_a]
  228. 1 private
  229. 1 def create_field(name, value, charset)
  230. new_field(name, value, charset)
  231. rescue Mail::Field::ParseError => e
  232. field = Mail::UnstructuredField.new(name, value)
  233. field.errors << [name, value, e]
  234. field
  235. end
  236. 1 def new_field(name, value, charset)
  237. value = unfold(value) if value.is_a?(String)
  238. if klass = field_class_for(name)
  239. klass.new(value, charset)
  240. else
  241. OptionalField.new(name, value, charset)
  242. end
  243. end
  244. 1 def field_class_for(name)
  245. FIELDS_MAP[name.to_s.downcase]
  246. end
  247. # 2.2.3. Long Header Fields
  248. #
  249. # The process of moving from this folded multiple-line representation
  250. # of a header field to its single line representation is called
  251. # "unfolding". Unfolding is accomplished by simply removing any CRLF
  252. # that is immediately followed by WSP. Each header field should be
  253. # treated in its unfolded form for further syntactic and semantic
  254. # evaluation.
  255. 1 def unfold(string)
  256. string.gsub(/#{Constants::CRLF}(#{Constants::WSP})/m, '\1')
  257. end
  258. end
  259. end

target/rubygems/gems/mail-2.7.1/lib/mail/field_list.rb

33.33% lines covered

12 relevant lines. 4 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # Field List class provides an enhanced array that keeps a list of
  5. # email fields in order. And allows you to insert new fields without
  6. # having to worry about the order they will appear in.
  7. 1 class FieldList < Array
  8. 1 include Enumerable
  9. # Insert the field in sorted order.
  10. #
  11. # Heavily based on bisect.insort from Python, which is:
  12. # Copyright (C) 2001-2013 Python Software Foundation.
  13. # Licensed under <http://docs.python.org/license.html>
  14. # From <http://hg.python.org/cpython/file/2.7/Lib/bisect.py>
  15. 1 def <<( new_field )
  16. lo = 0
  17. hi = size
  18. while lo < hi
  19. mid = (lo + hi).div(2)
  20. if new_field < self[mid]
  21. hi = mid
  22. else
  23. lo = mid + 1
  24. end
  25. end
  26. insert(lo, new_field)
  27. end
  28. end
  29. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields.rb

100.0% lines covered

33 relevant lines. 33 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 register_autoload :UnstructuredField, 'mail/fields/unstructured_field'
  4. 1 register_autoload :StructuredField, 'mail/fields/structured_field'
  5. 1 register_autoload :OptionalField, 'mail/fields/optional_field'
  6. 1 register_autoload :BccField, 'mail/fields/bcc_field'
  7. 1 register_autoload :CcField, 'mail/fields/cc_field'
  8. 1 register_autoload :CommentsField, 'mail/fields/comments_field'
  9. 1 register_autoload :ContentDescriptionField, 'mail/fields/content_description_field'
  10. 1 register_autoload :ContentDispositionField, 'mail/fields/content_disposition_field'
  11. 1 register_autoload :ContentIdField, 'mail/fields/content_id_field'
  12. 1 register_autoload :ContentLocationField, 'mail/fields/content_location_field'
  13. 1 register_autoload :ContentTransferEncodingField, 'mail/fields/content_transfer_encoding_field'
  14. 1 register_autoload :ContentTypeField, 'mail/fields/content_type_field'
  15. 1 register_autoload :DateField, 'mail/fields/date_field'
  16. 1 register_autoload :FromField, 'mail/fields/from_field'
  17. 1 register_autoload :InReplyToField, 'mail/fields/in_reply_to_field'
  18. 1 register_autoload :KeywordsField, 'mail/fields/keywords_field'
  19. 1 register_autoload :MessageIdField, 'mail/fields/message_id_field'
  20. 1 register_autoload :MimeVersionField, 'mail/fields/mime_version_field'
  21. 1 register_autoload :ReceivedField, 'mail/fields/received_field'
  22. 1 register_autoload :ReferencesField, 'mail/fields/references_field'
  23. 1 register_autoload :ReplyToField, 'mail/fields/reply_to_field'
  24. 1 register_autoload :ResentBccField, 'mail/fields/resent_bcc_field'
  25. 1 register_autoload :ResentCcField, 'mail/fields/resent_cc_field'
  26. 1 register_autoload :ResentDateField, 'mail/fields/resent_date_field'
  27. 1 register_autoload :ResentFromField, 'mail/fields/resent_from_field'
  28. 1 register_autoload :ResentMessageIdField, 'mail/fields/resent_message_id_field'
  29. 1 register_autoload :ResentSenderField, 'mail/fields/resent_sender_field'
  30. 1 register_autoload :ResentToField, 'mail/fields/resent_to_field'
  31. 1 register_autoload :ReturnPathField, 'mail/fields/return_path_field'
  32. 1 register_autoload :SenderField, 'mail/fields/sender_field'
  33. 1 register_autoload :SubjectField, 'mail/fields/subject_field'
  34. 1 register_autoload :ToField, 'mail/fields/to_field'
  35. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/bcc_field.rb

55.0% lines covered

20 relevant lines. 11 lines covered and 9 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Blind Carbon Copy Field
  5. #
  6. # The Bcc field inherits from StructuredField and handles the Bcc: header
  7. # field in the email.
  8. #
  9. # Sending bcc to a mail message will instantiate a Mail::Field object that
  10. # has a BccField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Bcc field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::BccField:0x180e1c4
  22. # mail['bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::BccField:0x180e1c4
  23. # mail['Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::BccField:0x180e1c4
  24. #
  25. # mail[:bcc].encoded #=> '' # Bcc field does not get output into an email
  26. # mail[:bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class BccField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'bcc'
  35. 1 CAPITALIZED_FIELD = 'Bcc'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. @charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def include_in_headers=(include_in_headers)
  42. @include_in_headers = include_in_headers
  43. end
  44. 1 def include_in_headers
  45. defined?(@include_in_headers) ? @include_in_headers : self.include_in_headers = false
  46. end
  47. # Bcc field should not be :encoded by default
  48. 1 def encoded
  49. if include_in_headers
  50. do_encode(CAPITALIZED_FIELD)
  51. else
  52. ''
  53. end
  54. end
  55. 1 def decoded
  56. do_decode
  57. end
  58. end
  59. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/cc_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Carbon Copy Field
  5. #
  6. # The Cc field inherits from StructuredField and handles the Cc: header
  7. # field in the email.
  8. #
  9. # Sending cc to a mail message will instantiate a Mail::Field object that
  10. # has a CcField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Cc field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CcField:0x180e1c4
  22. # mail['cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CcField:0x180e1c4
  23. # mail['Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CcField:0x180e1c4
  24. #
  25. # mail[:cc].encoded #=> 'Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class CcField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'cc'
  35. 1 CAPITALIZED_FIELD = 'Cc'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/comments_field.rb

55.56% lines covered

9 relevant lines. 5 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Comments Field
  5. #
  6. # The Comments field inherits from UnstructuredField and handles the Comments:
  7. # header field in the email.
  8. #
  9. # Sending comments to a mail message will instantiate a Mail::Field object that
  10. # has a CommentsField as its field type.
  11. #
  12. # An email header can have as many comments fields as it wants. There is no upper
  13. # limit, the comments field is also optional (that is, no comment is needed)
  14. #
  15. # == Examples:
  16. #
  17. # mail = Mail.new
  18. # mail.comments = 'This is a comment'
  19. # mail.comments #=> 'This is a comment'
  20. # mail[:comments] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CommentsField:0x180e1c4
  21. # mail['comments'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CommentsField:0x180e1c4
  22. # mail['comments'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::CommentsField:0x180e1c4
  23. #
  24. # mail.comments = "This is another comment"
  25. # mail[:comments].map { |c| c.to_s }
  26. # #=> ['This is a comment', "This is another comment"]
  27. #
  28. 1 module Mail
  29. 1 class CommentsField < UnstructuredField
  30. 1 FIELD_NAME = 'comments'
  31. 1 CAPITALIZED_FIELD = 'Comments'
  32. 1 def initialize(value = nil, charset = 'utf-8')
  33. @charset = charset
  34. super(CAPITALIZED_FIELD, value)
  35. self.parse
  36. self
  37. end
  38. end
  39. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/address_container.rb

57.14% lines covered

7 relevant lines. 4 lines covered and 3 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 class AddressContainer < Array
  4. 1 def initialize(field, list = [])
  5. @field = field
  6. super(list)
  7. end
  8. 1 def <<(address)
  9. @field << address
  10. end
  11. end
  12. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_address.rb

31.71% lines covered

82 relevant lines. 26 lines covered and 56 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/fields/common/address_container'
  4. 1 module Mail
  5. 1 module CommonAddress # :nodoc:
  6. 1 def parse(val = value)
  7. unless Utilities.blank?(val)
  8. @address_list = AddressList.new(encode_if_needed(val))
  9. else
  10. nil
  11. end
  12. end
  13. 1 def charset
  14. @charset
  15. end
  16. 1 def encode_if_needed(val) #:nodoc:
  17. # Need to join arrays of addresses into a single value
  18. if val.kind_of?(Array)
  19. val.compact.map { |a| encode_if_needed a }.join(', ')
  20. # Pass through UTF-8; encode non-UTF-8.
  21. else
  22. utf8_if_needed(val) || Encodings.encode_non_usascii(val, charset)
  23. end
  24. end
  25. # Allows you to iterate through each address object in the address_list
  26. 1 def each
  27. address_list.addresses.each do |address|
  28. yield(address)
  29. end
  30. end
  31. # Returns the address string of all the addresses in the address list
  32. 1 def addresses
  33. list = address_list.addresses.map { |a| a.address }
  34. Mail::AddressContainer.new(self, list)
  35. end
  36. # Returns the formatted string of all the addresses in the address list
  37. 1 def formatted
  38. list = address_list.addresses.map { |a| a.format }
  39. Mail::AddressContainer.new(self, list)
  40. end
  41. # Returns the display name of all the addresses in the address list
  42. 1 def display_names
  43. list = address_list.addresses.map { |a| a.display_name }
  44. Mail::AddressContainer.new(self, list)
  45. end
  46. # Returns the actual address objects in the address list
  47. 1 def addrs
  48. list = address_list.addresses
  49. Mail::AddressContainer.new(self, list)
  50. end
  51. # Returns a hash of group name => address strings for the address list
  52. 1 def groups
  53. address_list.addresses_grouped_by_group
  54. end
  55. # Returns the addresses that are part of groups
  56. 1 def group_addresses
  57. decoded_group_addresses
  58. end
  59. # Returns a list of decoded group addresses
  60. 1 def decoded_group_addresses
  61. groups.map { |k,v| v.map { |a| a.decoded } }.flatten
  62. end
  63. # Returns a list of encoded group addresses
  64. 1 def encoded_group_addresses
  65. groups.map { |k,v| v.map { |a| a.encoded } }.flatten
  66. end
  67. # Returns the name of all the groups in a string
  68. 1 def group_names # :nodoc:
  69. address_list.group_names
  70. end
  71. 1 def default
  72. addresses
  73. end
  74. 1 def <<(val)
  75. case
  76. when val.nil?
  77. raise ArgumentError, "Need to pass an address to <<"
  78. when Utilities.blank?(val)
  79. parse(encoded)
  80. else
  81. self.value = [self.value, val].reject {|a| Utilities.blank?(a) }.join(", ")
  82. end
  83. end
  84. 1 def value=(val)
  85. super
  86. parse(self.value)
  87. end
  88. 1 private
  89. 1 if 'string'.respond_to?(:encoding)
  90. # Pass through UTF-8 addresses
  91. 1 def utf8_if_needed(val)
  92. if charset =~ /\AUTF-?8\z/i
  93. val
  94. elsif val.encoding == Encoding::UTF_8
  95. val
  96. elsif (utf8 = val.dup.force_encoding(Encoding::UTF_8)).valid_encoding?
  97. utf8
  98. end
  99. end
  100. else
  101. def utf8_if_needed(val)
  102. if charset =~ /\AUTF-?8\z/i
  103. val
  104. end
  105. end
  106. end
  107. 1 def do_encode(field_name)
  108. return '' if Utilities.blank?(value)
  109. address_array = address_list.addresses.reject { |a| encoded_group_addresses.include?(a.encoded) }.compact.map { |a| a.encoded }
  110. address_text = address_array.join(", \r\n\s")
  111. group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.encoded }.join(", \r\n\s")};" }
  112. group_text = group_array.join(" \r\n\s")
  113. return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) }
  114. "#{field_name}: #{return_array.join(", \r\n\s")}\r\n"
  115. end
  116. 1 def do_decode
  117. return nil if Utilities.blank?(value)
  118. address_array = address_list.addresses.reject { |a| decoded_group_addresses.include?(a.decoded) }.map { |a| a.decoded }
  119. address_text = address_array.join(", ")
  120. group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.decoded }.join(", ")};" }
  121. group_text = group_array.join(" ")
  122. return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) }
  123. return_array.join(", ")
  124. end
  125. 1 def address_list # :nodoc:
  126. @address_list ||= AddressList.new(value)
  127. end
  128. 1 def get_group_addresses(group_list)
  129. if group_list.respond_to?(:addresses)
  130. group_list.addresses.map do |address|
  131. Mail::Address.new(address)
  132. end
  133. else
  134. []
  135. end
  136. end
  137. end
  138. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_date.rb

52.94% lines covered

17 relevant lines. 9 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 module CommonDate # :nodoc:
  5. # Returns a date time object of the parsed date
  6. 1 def date_time
  7. ::DateTime.parse("#{element.date_string} #{element.time_string}")
  8. end
  9. 1 def default
  10. date_time
  11. end
  12. 1 def parse(val = value)
  13. unless Utilities.blank?(val)
  14. @element = Mail::DateTimeElement.new(val)
  15. else
  16. nil
  17. end
  18. end
  19. 1 private
  20. 1 def do_encode(field_name)
  21. "#{field_name}: #{value}\r\n"
  22. end
  23. 1 def do_decode
  24. "#{value}"
  25. end
  26. 1 def element
  27. @element ||= Mail::DateTimeElement.new(value)
  28. end
  29. end
  30. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_field.rb

51.85% lines covered

27 relevant lines. 14 lines covered and 13 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 module CommonField # :nodoc:
  5. 1 include Mail::Constants
  6. 1 def name=(value)
  7. @name = value
  8. end
  9. 1 def name
  10. @name ||= nil
  11. end
  12. 1 def value=(value)
  13. @length = nil
  14. @element = nil
  15. @value = value.is_a?(Array) ? value : value.to_s
  16. end
  17. 1 def value
  18. @value
  19. end
  20. 1 def to_s
  21. decoded.to_s
  22. end
  23. 1 def default
  24. decoded
  25. end
  26. 1 def field_length
  27. @length ||= "#{name}: #{encode(decoded)}".length
  28. end
  29. 1 def responsible_for?( val )
  30. name.to_s.casecmp(val.to_s) == 0
  31. end
  32. 1 private
  33. 1 FILENAME_RE = /\b(filename|name)=([^;"\r\n]+\s[^;"\r\n]+)/
  34. 1 def ensure_filename_quoted(value)
  35. if value.is_a?(String)
  36. value.sub FILENAME_RE, '\1="\2"'
  37. else
  38. value
  39. end
  40. end
  41. end
  42. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/common_message_id.rb

45.83% lines covered

24 relevant lines. 11 lines covered and 13 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 module CommonMessageId # :nodoc:
  5. 1 def element
  6. @element ||= Mail::MessageIdsElement.new(value) unless Utilities.blank?(value)
  7. end
  8. 1 def parse(val = value)
  9. unless Utilities.blank?(val)
  10. @element = Mail::MessageIdsElement.new(val)
  11. else
  12. nil
  13. end
  14. end
  15. 1 def message_id
  16. element.message_id if element
  17. end
  18. 1 def message_ids
  19. element.message_ids if element
  20. end
  21. 1 def default
  22. return nil unless message_ids
  23. if message_ids.length == 1
  24. message_ids[0]
  25. else
  26. message_ids
  27. end
  28. end
  29. 1 private
  30. 1 def do_encode(field_name)
  31. %Q{#{field_name}: #{formated_message_ids("\r\n ")}\r\n}
  32. end
  33. 1 def do_decode
  34. formated_message_ids(' ')
  35. end
  36. 1 def formated_message_ids(join)
  37. message_ids.map{ |m| "<#{m}>" }.join(join) if message_ids
  38. end
  39. end
  40. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/common/parameter_hash.rb

20.69% lines covered

29 relevant lines. 6 lines covered and 23 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # ParameterHash is an intelligent Hash that allows you to add
  5. # parameter values including the MIME extension paramaters that
  6. # have the name*0="blah", name*1="bleh" keys, and will just return
  7. # a single key called name="blahbleh" and do any required un-encoding
  8. # to make that happen
  9. # Parameters are defined in RFC2045, split keys are in RFC2231
  10. 1 class ParameterHash < IndifferentHash
  11. 1 include Mail::Utilities
  12. 1 def [](key_name)
  13. key_pattern = Regexp.escape(key_name.to_s)
  14. pairs = []
  15. exact = nil
  16. each do |k,v|
  17. if k =~ /^#{key_pattern}(\*|$)/i
  18. if $1 == ASTERISK
  19. pairs << [k, v]
  20. else
  21. exact = k
  22. end
  23. end
  24. end
  25. if pairs.empty? # Just dealing with a single value pair
  26. super(exact || key_name)
  27. else # Dealing with a multiple value pair or a single encoded value pair
  28. string = pairs.sort { |a,b| a.first.to_s <=> b.first.to_s }.map { |v| v.last }.join('')
  29. if mt = string.match(/([\w\-]+)?'(\w\w)?'(.*)/)
  30. string = mt[3]
  31. encoding = mt[1]
  32. else
  33. encoding = nil
  34. end
  35. Mail::Encodings.param_decode(string, encoding)
  36. end
  37. end
  38. 1 def encoded
  39. map.sort_by { |a| a.first.to_s }.map! do |key_name, value|
  40. unless value.ascii_only?
  41. value = Mail::Encodings.param_encode(value)
  42. key_name = "#{key_name}*"
  43. end
  44. %Q{#{key_name}=#{quote_token(value)}}
  45. end.join(";\r\n\s")
  46. end
  47. 1 def decoded
  48. map.sort_by { |a| a.first.to_s }.map! do |key_name, value|
  49. %Q{#{key_name}=#{quote_token(value)}}
  50. end.join("; ")
  51. end
  52. end
  53. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_description_field.rb

55.56% lines covered

9 relevant lines. 5 lines covered and 4 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. #
  5. #
  6. 1 module Mail
  7. 1 class ContentDescriptionField < UnstructuredField
  8. 1 FIELD_NAME = 'content-description'
  9. 1 CAPITALIZED_FIELD = 'Content-Description'
  10. 1 def initialize(value = nil, charset = 'utf-8')
  11. self.charset = charset
  12. super(CAPITALIZED_FIELD, value, charset)
  13. self.parse
  14. self
  15. end
  16. end
  17. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_disposition_field.rb

34.21% lines covered

38 relevant lines. 13 lines covered and 25 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/fields/common/parameter_hash'
  4. 1 module Mail
  5. 1 class ContentDispositionField < StructuredField
  6. 1 FIELD_NAME = 'content-disposition'
  7. 1 CAPITALIZED_FIELD = 'Content-Disposition'
  8. 1 def initialize(value = nil, charset = 'utf-8')
  9. self.charset = charset
  10. value = ensure_filename_quoted(value)
  11. super(CAPITALIZED_FIELD, value, charset)
  12. self.parse
  13. self
  14. end
  15. 1 def parse(val = value)
  16. unless Utilities.blank?(val)
  17. @element = Mail::ContentDispositionElement.new(val)
  18. end
  19. end
  20. 1 def element
  21. @element ||= Mail::ContentDispositionElement.new(value)
  22. end
  23. 1 def disposition_type
  24. element.disposition_type
  25. end
  26. 1 def parameters
  27. @parameters = ParameterHash.new
  28. element.parameters.each { |p| @parameters.merge!(p) } unless element.parameters.nil?
  29. @parameters
  30. end
  31. 1 def filename
  32. case
  33. when parameters['filename']
  34. @filename = parameters['filename']
  35. when parameters['name']
  36. @filename = parameters['name']
  37. else
  38. @filename = nil
  39. end
  40. @filename
  41. end
  42. # TODO: Fix this up
  43. 1 def encoded
  44. if parameters.length > 0
  45. p = ";\r\n\s#{parameters.encoded}\r\n"
  46. else
  47. p = "\r\n"
  48. end
  49. "#{CAPITALIZED_FIELD}: #{disposition_type}" + p
  50. end
  51. 1 def decoded
  52. if parameters.length > 0
  53. p = "; #{parameters.decoded}"
  54. else
  55. p = ""
  56. end
  57. "#{disposition_type}" + p
  58. end
  59. end
  60. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_id_field.rb

45.16% lines covered

31 relevant lines. 14 lines covered and 17 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. #
  5. #
  6. 1 module Mail
  7. 1 class ContentIdField < StructuredField
  8. 1 FIELD_NAME = 'content-id'
  9. 1 CAPITALIZED_FIELD = "Content-ID"
  10. 1 def initialize(value = nil, charset = 'utf-8')
  11. self.charset = charset
  12. @uniq = 1
  13. if Utilities.blank?(value)
  14. value = generate_content_id
  15. else
  16. value = value.to_s
  17. end
  18. super(CAPITALIZED_FIELD, value, charset)
  19. self.parse
  20. self
  21. end
  22. 1 def parse(val = value)
  23. unless Utilities.blank?(val)
  24. @element = Mail::MessageIdsElement.new(val)
  25. end
  26. end
  27. 1 def element
  28. @element ||= Mail::MessageIdsElement.new(value)
  29. end
  30. 1 def name
  31. 'Content-ID'
  32. end
  33. 1 def content_id
  34. element.message_id
  35. end
  36. 1 def to_s
  37. "<#{content_id}>"
  38. end
  39. # TODO: Fix this up
  40. 1 def encoded
  41. "#{CAPITALIZED_FIELD}: #{to_s}\r\n"
  42. end
  43. 1 def decoded
  44. "#{to_s}"
  45. end
  46. 1 private
  47. 1 def generate_content_id
  48. "<#{Mail.random_tag}@#{::Socket.gethostname}.mail>"
  49. end
  50. end
  51. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_location_field.rb

50.0% lines covered

20 relevant lines. 10 lines covered and 10 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. #
  5. #
  6. 1 module Mail
  7. 1 class ContentLocationField < StructuredField
  8. 1 FIELD_NAME = 'content-location'
  9. 1 CAPITALIZED_FIELD = 'Content-Location'
  10. 1 def initialize(value = nil, charset = 'utf-8')
  11. self.charset = charset
  12. super(CAPITALIZED_FIELD, value, charset)
  13. self.parse
  14. self
  15. end
  16. 1 def parse(val = value)
  17. unless Utilities.blank?(val)
  18. @element = Mail::ContentLocationElement.new(val)
  19. end
  20. end
  21. 1 def element
  22. @element ||= Mail::ContentLocationElement.new(value)
  23. end
  24. 1 def location
  25. element.location
  26. end
  27. # TODO: Fix this up
  28. 1 def encoded
  29. "#{CAPITALIZED_FIELD}: #{location}\r\n"
  30. end
  31. 1 def decoded
  32. location
  33. end
  34. end
  35. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_transfer_encoding_field.rb

45.45% lines covered

22 relevant lines. 10 lines covered and 12 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. #
  5. #
  6. 1 module Mail
  7. 1 class ContentTransferEncodingField < StructuredField
  8. 1 FIELD_NAME = 'content-transfer-encoding'
  9. 1 CAPITALIZED_FIELD = 'Content-Transfer-Encoding'
  10. 1 def initialize(value = nil, charset = 'utf-8')
  11. self.charset = charset
  12. value = '7bit' if value.to_s =~ /7-?bits?/i
  13. value = '8bit' if value.to_s =~ /8-?bits?/i
  14. super(CAPITALIZED_FIELD, value, charset)
  15. self.parse
  16. self
  17. end
  18. 1 def parse(val = value)
  19. unless Utilities.blank?(val)
  20. @element = Mail::ContentTransferEncodingElement.new(val)
  21. end
  22. end
  23. 1 def element
  24. @element ||= Mail::ContentTransferEncodingElement.new(value)
  25. end
  26. 1 def encoding
  27. element.encoding
  28. end
  29. # TODO: Fix this up
  30. 1 def encoded
  31. "#{CAPITALIZED_FIELD}: #{encoding}\r\n"
  32. end
  33. 1 def decoded
  34. encoding
  35. end
  36. end
  37. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/content_type_field.rb

26.26% lines covered

99 relevant lines. 26 lines covered and 73 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/fields/common/parameter_hash'
  4. 1 module Mail
  5. 1 class ContentTypeField < StructuredField
  6. 1 FIELD_NAME = 'content-type'
  7. 1 CAPITALIZED_FIELD = 'Content-Type'
  8. 1 def initialize(value = nil, charset = 'utf-8')
  9. self.charset = charset
  10. if value.class == Array
  11. @main_type = value[0]
  12. @sub_type = value[1]
  13. @parameters = ParameterHash.new.merge!(value.last)
  14. else
  15. @main_type = nil
  16. @sub_type = nil
  17. @parameters = nil
  18. value = value.to_s
  19. end
  20. value = ensure_filename_quoted(value)
  21. super(CAPITALIZED_FIELD, value, charset)
  22. self.parse
  23. self
  24. end
  25. 1 def parse(val = value)
  26. unless Utilities.blank?(val)
  27. self.value = val
  28. @element = nil
  29. element
  30. end
  31. end
  32. 1 def element
  33. begin
  34. @element ||= Mail::ContentTypeElement.new(value)
  35. rescue
  36. attempt_to_clean
  37. end
  38. end
  39. 1 def attempt_to_clean
  40. # Sanitize the value, handle special cases
  41. @element ||= Mail::ContentTypeElement.new(sanatize(value))
  42. rescue
  43. # All else fails, just get the MIME media type
  44. @element ||= Mail::ContentTypeElement.new(get_mime_type(value))
  45. end
  46. 1 def main_type
  47. @main_type ||= element.main_type
  48. end
  49. 1 def sub_type
  50. @sub_type ||= element.sub_type
  51. end
  52. 1 def string
  53. "#{main_type}/#{sub_type}"
  54. end
  55. 1 def default
  56. decoded
  57. end
  58. 1 alias :content_type :string
  59. 1 def parameters
  60. unless @parameters
  61. @parameters = ParameterHash.new
  62. element.parameters.each { |p| @parameters.merge!(p) }
  63. end
  64. @parameters
  65. end
  66. 1 def ContentTypeField.with_boundary(type)
  67. new("#{type}; boundary=#{generate_boundary}")
  68. end
  69. 1 def ContentTypeField.generate_boundary
  70. "--==_mimepart_#{Mail.random_tag}"
  71. end
  72. 1 def value
  73. if @value.class == Array
  74. "#{@main_type}/#{@sub_type}; #{stringify(parameters)}"
  75. else
  76. @value
  77. end
  78. end
  79. 1 def stringify(params)
  80. params.map { |k,v| "#{k}=#{Encodings.param_encode(v)}" }.join("; ")
  81. end
  82. 1 def filename
  83. case
  84. when parameters['filename']
  85. @filename = parameters['filename']
  86. when parameters['name']
  87. @filename = parameters['name']
  88. else
  89. @filename = nil
  90. end
  91. @filename
  92. end
  93. # TODO: Fix this up
  94. 1 def encoded
  95. if parameters.length > 0
  96. p = ";\r\n\s#{parameters.encoded}"
  97. else
  98. p = ""
  99. end
  100. "#{CAPITALIZED_FIELD}: #{content_type}#{p}\r\n"
  101. end
  102. 1 def decoded
  103. if parameters.length > 0
  104. p = "; #{parameters.decoded}"
  105. else
  106. p = ""
  107. end
  108. "#{content_type}" + p
  109. end
  110. 1 private
  111. 1 def method_missing(name, *args, &block)
  112. if name.to_s =~ /(\w+)=/
  113. self.parameters[$1] = args.first
  114. @value = "#{content_type}; #{stringify(parameters)}"
  115. else
  116. super
  117. end
  118. end
  119. # Various special cases from random emails found that I am not going to change
  120. # the parser for
  121. 1 def sanatize( val )
  122. # TODO: check if there are cases where whitespace is not a separator
  123. val = val.
  124. gsub(/\s*=\s*/,'='). # remove whitespaces around equal sign
  125. gsub(/[; ]+/, '; '). #use '; ' as a separator (or EOL)
  126. gsub(/;\s*$/,'') #remove trailing to keep examples below
  127. if val =~ /(boundary=(\S*))/i
  128. val = "#{$`.downcase}boundary=#{$2}#{$'.downcase}"
  129. else
  130. val.downcase!
  131. end
  132. case
  133. when val.chomp =~ /^\s*([\w\-]+)\/([\w\-]+)\s*;\s?(ISO[\w\-]+)$/i
  134. # Microsoft helper:
  135. # Handles 'type/subtype;ISO-8559-1'
  136. "#{$1}/#{$2}; charset=#{quote_atom($3)}"
  137. when val.chomp =~ /^text;?$/i
  138. # Handles 'text;' and 'text'
  139. "text/plain;"
  140. when val.chomp =~ /^(\w+);\s(.*)$/i
  141. # Handles 'text; <parameters>'
  142. "text/plain; #{$2}"
  143. when val =~ /([\w\-]+\/[\w\-]+);\scharset="charset="(\w+)""/i
  144. # Handles text/html; charset="charset="GB2312""
  145. "#{$1}; charset=#{quote_atom($2)}"
  146. when val =~ /([\w\-]+\/[\w\-]+);\s+(.*)/i
  147. type = $1
  148. # Handles misquoted param values
  149. # e.g: application/octet-stream; name=archiveshelp1[1].htm
  150. # and: audio/x-midi;\r\n\sname=Part .exe
  151. params = $2.to_s.split(/\s+/)
  152. params = params.map { |i| i.to_s.chomp.strip }
  153. params = params.map { |i| i.split(/\s*\=\s*/, 2) }
  154. params = params.map { |i| "#{i[0]}=#{dquote(i[1].to_s.gsub(/;$/,""))}" }.join('; ')
  155. "#{type}; #{params}"
  156. when val =~ /^\s*$/
  157. 'text/plain'
  158. else
  159. val
  160. end
  161. end
  162. 1 def get_mime_type( val )
  163. case
  164. when val =~ /^([\w\-]+)\/([\w\-]+);.+$/i
  165. "#{$1}/#{$2}"
  166. else
  167. 'text/plain'
  168. end
  169. end
  170. end
  171. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/date_field.rb

50.0% lines covered

18 relevant lines. 9 lines covered and 9 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Date Field
  5. #
  6. # The Date field inherits from StructuredField and handles the Date: header
  7. # field in the email.
  8. #
  9. # Sending date to a mail message will instantiate a Mail::Field object that
  10. # has a DateField as its field type. This includes all Mail::CommonAddress
  11. # module instance methods.
  12. #
  13. # There must be excatly one Date field in an RFC2822 email.
  14. #
  15. # == Examples:
  16. #
  17. # mail = Mail.new
  18. # mail.date = 'Mon, 24 Nov 1997 14:22:01 -0800'
  19. # mail.date #=> #<DateTime: 211747170121/86400,-1/3,2299161>
  20. # mail.date.to_s #=> 'Mon, 24 Nov 1997 14:22:01 -0800'
  21. # mail[:date] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
  22. # mail['date'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
  23. # mail['Date'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
  24. #
  25. 1 require 'mail/fields/common/common_date'
  26. 1 module Mail
  27. 1 class DateField < StructuredField
  28. 1 include Mail::CommonDate
  29. 1 FIELD_NAME = 'date'
  30. 1 CAPITALIZED_FIELD = "Date"
  31. 1 def initialize(value = nil, charset = 'utf-8')
  32. self.charset = charset
  33. if Utilities.blank?(value)
  34. value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
  35. else
  36. value = value.to_s.gsub(/\(.*?\)/, '').squeeze(' ')
  37. value = ::DateTime.parse(value).strftime('%a, %d %b %Y %H:%M:%S %z')
  38. end
  39. super(CAPITALIZED_FIELD, value, charset)
  40. rescue ArgumentError => e
  41. raise e unless "invalid date"==e.message
  42. end
  43. 1 def encoded
  44. do_encode(CAPITALIZED_FIELD)
  45. end
  46. 1 def decoded
  47. do_decode
  48. end
  49. end
  50. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/from_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = From Field
  5. #
  6. # The From field inherits from StructuredField and handles the From: header
  7. # field in the email.
  8. #
  9. # Sending from to a mail message will instantiate a Mail::Field object that
  10. # has a FromField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one From field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::FromField:0x180e1c4
  22. # mail['from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::FromField:0x180e1c4
  23. # mail['From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::FromField:0x180e1c4
  24. #
  25. # mail[:from].encoded #=> 'from: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:from].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class FromField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'from'
  35. 1 CAPITALIZED_FIELD = 'From'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/in_reply_to_field.rb

56.25% lines covered

16 relevant lines. 9 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = In-Reply-To Field
  5. #
  6. # The In-Reply-To field inherits from StructuredField and handles the
  7. # In-Reply-To: header field in the email.
  8. #
  9. # Sending in_reply_to to a mail message will instantiate a Mail::Field object that
  10. # has a InReplyToField as its field type. This includes all Mail::CommonMessageId
  11. # module instance metods.
  12. #
  13. # Note that, the #message_ids method will return an array of message IDs without the
  14. # enclosing angle brackets which per RFC are not syntactically part of the message id.
  15. #
  16. # Only one InReplyTo field can appear in a header, though it can have multiple
  17. # Message IDs.
  18. #
  19. # == Examples:
  20. #
  21. # mail = Mail.new
  22. # mail.in_reply_to = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  23. # mail.in_reply_to #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  24. # mail[:in_reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::InReplyToField:0x180e1c4
  25. # mail['in_reply_to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::InReplyToField:0x180e1c4
  26. # mail['In-Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::InReplyToField:0x180e1c4
  27. #
  28. # mail[:in_reply_to].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
  29. #
  30. 1 require 'mail/fields/common/common_message_id'
  31. 1 module Mail
  32. 1 class InReplyToField < StructuredField
  33. 1 include Mail::CommonMessageId
  34. 1 FIELD_NAME = 'in-reply-to'
  35. 1 CAPITALIZED_FIELD = 'In-Reply-To'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. value = value.join("\r\n\s") if value.is_a?(Array)
  39. super(CAPITALIZED_FIELD, value, charset)
  40. self.parse
  41. self
  42. end
  43. 1 def encoded
  44. do_encode(CAPITALIZED_FIELD)
  45. end
  46. 1 def decoded
  47. do_decode
  48. end
  49. end
  50. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/keywords_field.rb

52.38% lines covered

21 relevant lines. 11 lines covered and 10 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # keywords = "Keywords:" phrase *("," phrase) CRLF
  5. 1 module Mail
  6. 1 class KeywordsField < StructuredField
  7. 1 FIELD_NAME = 'keywords'
  8. 1 CAPITALIZED_FIELD = 'Keywords'
  9. 1 def initialize(value = nil, charset = 'utf-8')
  10. self.charset = charset
  11. super(CAPITALIZED_FIELD, value, charset)
  12. self
  13. end
  14. 1 def parse(val = value)
  15. unless Utilities.blank?(val)
  16. @phrase_list ||= PhraseList.new(value)
  17. end
  18. end
  19. 1 def phrase_list
  20. @phrase_list ||= PhraseList.new(value)
  21. end
  22. 1 def keywords
  23. phrase_list.phrases
  24. end
  25. 1 def encoded
  26. "#{CAPITALIZED_FIELD}: #{keywords.join(",\r\n ")}\r\n"
  27. end
  28. 1 def decoded
  29. keywords.join(', ')
  30. end
  31. 1 def default
  32. keywords
  33. end
  34. end
  35. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/message_id_field.rb

50.0% lines covered

28 relevant lines. 14 lines covered and 14 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Message-ID Field
  5. #
  6. # The Message-ID field inherits from StructuredField and handles the
  7. # Message-ID: header field in the email.
  8. #
  9. # Sending message_id to a mail message will instantiate a Mail::Field object that
  10. # has a MessageIdField as its field type. This includes all Mail::CommonMessageId
  11. # module instance metods.
  12. #
  13. # Only one MessageId field can appear in a header, and syntactically it can only have
  14. # one Message ID. The message_ids method call has been left in however as it will only
  15. # return the one message id, ie, an array of length 1.
  16. #
  17. # Note that, the #message_ids method will return an array of message IDs without the
  18. # enclosing angle brackets which per RFC are not syntactically part of the message id.
  19. #
  20. # == Examples:
  21. #
  22. # mail = Mail.new
  23. # mail.message_id = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  24. # mail.message_id #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  25. # mail[:message_id] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
  26. # mail['message_id'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
  27. # mail['Message-ID'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::MessageIdField:0x180e1c4
  28. #
  29. # mail[:message_id].message_id #=> 'F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom'
  30. # mail[:message_id].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
  31. #
  32. 1 require 'mail/fields/common/common_message_id'
  33. 1 module Mail
  34. 1 class MessageIdField < StructuredField
  35. 1 include Mail::CommonMessageId
  36. 1 FIELD_NAME = 'message-id'
  37. 1 CAPITALIZED_FIELD = 'Message-ID'
  38. 1 def initialize(value = nil, charset = 'utf-8')
  39. self.charset = charset
  40. @uniq = 1
  41. if Utilities.blank?(value)
  42. self.name = CAPITALIZED_FIELD
  43. self.value = generate_message_id
  44. else
  45. super(CAPITALIZED_FIELD, value, charset)
  46. end
  47. self.parse
  48. self
  49. end
  50. 1 def name
  51. 'Message-ID'
  52. end
  53. 1 def message_ids
  54. [message_id]
  55. end
  56. 1 def to_s
  57. "<#{message_id}>"
  58. end
  59. 1 def encoded
  60. do_encode(CAPITALIZED_FIELD)
  61. end
  62. 1 def decoded
  63. do_decode
  64. end
  65. 1 private
  66. 1 def generate_message_id
  67. "<#{Mail.random_tag}@#{::Socket.gethostname}.mail>"
  68. end
  69. end
  70. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/mime_version_field.rb

46.15% lines covered

26 relevant lines. 12 lines covered and 14 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. #
  5. #
  6. 1 module Mail
  7. 1 class MimeVersionField < StructuredField
  8. 1 FIELD_NAME = 'mime-version'
  9. 1 CAPITALIZED_FIELD = 'Mime-Version'
  10. 1 def initialize(value = nil, charset = 'utf-8')
  11. self.charset = charset
  12. if Utilities.blank?(value)
  13. value = '1.0'
  14. end
  15. super(CAPITALIZED_FIELD, value, charset)
  16. self.parse
  17. self
  18. end
  19. 1 def parse(val = value)
  20. unless Utilities.blank?(val)
  21. @element = Mail::MimeVersionElement.new(val)
  22. end
  23. end
  24. 1 def element
  25. @element ||= Mail::MimeVersionElement.new(value)
  26. end
  27. 1 def version
  28. "#{element.major}.#{element.minor}"
  29. end
  30. 1 def major
  31. element.major.to_i
  32. end
  33. 1 def minor
  34. element.minor.to_i
  35. end
  36. 1 def encoded
  37. "#{CAPITALIZED_FIELD}: #{version}\r\n"
  38. end
  39. 1 def decoded
  40. version
  41. end
  42. end
  43. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/optional_field.rb

83.33% lines covered

6 relevant lines. 5 lines covered and 1 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # The field names of any optional-field MUST NOT be identical to any
  5. # field name specified elsewhere in this standard.
  6. #
  7. # optional-field = field-name ":" unstructured CRLF
  8. 1 require 'mail/fields/unstructured_field'
  9. 1 module Mail
  10. 1 class OptionalField < UnstructuredField
  11. 1 private
  12. 1 def do_encode
  13. "#{wrapped_value}\r\n"
  14. end
  15. end
  16. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/received_field.rb

42.86% lines covered

28 relevant lines. 12 lines covered and 16 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # trace = [return]
  5. # 1*received
  6. #
  7. # return = "Return-Path:" path CRLF
  8. #
  9. # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
  10. # obs-path
  11. #
  12. # received = "Received:" name-val-list ";" date-time CRLF
  13. #
  14. # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
  15. #
  16. # name-val-pair = item-name CFWS item-value
  17. #
  18. # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
  19. #
  20. # item-value = 1*angle-addr / addr-spec /
  21. # atom / domain / msg-id
  22. #
  23. 1 module Mail
  24. 1 class ReceivedField < StructuredField
  25. 1 FIELD_NAME = 'received'
  26. 1 CAPITALIZED_FIELD = 'Received'
  27. 1 def initialize(value = nil, charset = 'utf-8')
  28. self.charset = charset
  29. super(CAPITALIZED_FIELD, value, charset)
  30. self.parse
  31. self
  32. end
  33. 1 def parse(val = value)
  34. unless Utilities.blank?(val)
  35. @element = Mail::ReceivedElement.new(val)
  36. end
  37. end
  38. 1 def element
  39. @element ||= Mail::ReceivedElement.new(value)
  40. end
  41. 1 def date_time
  42. @datetime ||= ::DateTime.parse("#{element.date_time}")
  43. end
  44. 1 def info
  45. element.info
  46. end
  47. 1 def formatted_date
  48. date_time.strftime("%a, %d %b %Y %H:%M:%S ") + date_time.zone.delete(':')
  49. end
  50. 1 def encoded
  51. if Utilities.blank?(value)
  52. "#{CAPITALIZED_FIELD}: \r\n"
  53. else
  54. "#{CAPITALIZED_FIELD}: #{info}; #{formatted_date}\r\n"
  55. end
  56. end
  57. 1 def decoded
  58. if Utilities.blank?(value)
  59. ""
  60. else
  61. "#{info}; #{formatted_date}"
  62. end
  63. end
  64. end
  65. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/references_field.rb

56.25% lines covered

16 relevant lines. 9 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = References Field
  5. #
  6. # The References field inherits references StructuredField and handles the References: header
  7. # field in the email.
  8. #
  9. # Sending references to a mail message will instantiate a Mail::Field object that
  10. # has a ReferencesField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Note that, the #message_ids method will return an array of message IDs without the
  14. # enclosing angle brackets which per RFC are not syntactically part of the message id.
  15. #
  16. # Only one References field can appear in a header, though it can have multiple
  17. # Message IDs.
  18. #
  19. # == Examples:
  20. #
  21. # mail = Mail.new
  22. # mail.references = '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  23. # mail.references #=> '<F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom>'
  24. # mail[:references] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
  25. # mail['references'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
  26. # mail['References'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReferencesField:0x180e1c4
  27. #
  28. # mail[:references].message_ids #=> ['F6E2D0B4-CC35-4A91-BA4C-C7C712B10C13@test.me.dom']
  29. #
  30. 1 require 'mail/fields/common/common_message_id'
  31. 1 module Mail
  32. 1 class ReferencesField < StructuredField
  33. 1 include CommonMessageId
  34. 1 FIELD_NAME = 'references'
  35. 1 CAPITALIZED_FIELD = 'References'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. value = value.join("\r\n\s") if value.is_a?(Array)
  39. super(CAPITALIZED_FIELD, value, charset)
  40. self.parse
  41. self
  42. end
  43. 1 def encoded
  44. do_encode(CAPITALIZED_FIELD)
  45. end
  46. 1 def decoded
  47. do_decode
  48. end
  49. end
  50. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/reply_to_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Reply-To Field
  5. #
  6. # The Reply-To field inherits reply-to StructuredField and handles the Reply-To: header
  7. # field in the email.
  8. #
  9. # Sending reply_to to a mail message will instantiate a Mail::Field object that
  10. # has a ReplyToField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Reply-To field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.reply_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:reply_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
  22. # mail['reply-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
  23. # mail['Reply-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ReplyToField:0x180e1c4
  24. #
  25. # mail[:reply_to].encoded #=> 'Reply-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:reply_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:reply_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:reply_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ReplyToField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'reply-to'
  35. 1 CAPITALIZED_FIELD = 'Reply-To'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_bcc_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Resent-Bcc Field
  5. #
  6. # The Resent-Bcc field inherits resent-bcc StructuredField and handles the
  7. # Resent-Bcc: header field in the email.
  8. #
  9. # Sending resent_bcc to a mail message will instantiate a Mail::Field object that
  10. # has a ResentBccField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Resent-Bcc field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.resent_bcc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:resent_bcc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
  22. # mail['resent-bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
  23. # mail['Resent-Bcc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentBccField:0x180e1c4
  24. #
  25. # mail[:resent_bcc].encoded #=> 'Resent-Bcc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:resent_bcc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:resent_bcc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:resent_bcc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ResentBccField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'resent-bcc'
  35. 1 CAPITALIZED_FIELD = 'Resent-Bcc'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_cc_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Resent-Cc Field
  5. #
  6. # The Resent-Cc field inherits resent-cc StructuredField and handles the Resent-Cc: header
  7. # field in the email.
  8. #
  9. # Sending resent_cc to a mail message will instantiate a Mail::Field object that
  10. # has a ResentCcField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Resent-Cc field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.resent_cc = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:resent_cc] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
  22. # mail['resent-cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
  23. # mail['Resent-Cc'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentCcField:0x180e1c4
  24. #
  25. # mail[:resent_cc].encoded #=> 'Resent-Cc: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:resent_cc].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:resent_cc].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:resent_cc].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ResentCcField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'resent-cc'
  35. 1 CAPITALIZED_FIELD = 'Resent-Cc'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_date_field.rb

52.94% lines covered

17 relevant lines. 9 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # resent-date = "Resent-Date:" date-time CRLF
  5. 1 require 'mail/fields/common/common_date'
  6. 1 module Mail
  7. 1 class ResentDateField < StructuredField
  8. 1 include Mail::CommonDate
  9. 1 FIELD_NAME = 'resent-date'
  10. 1 CAPITALIZED_FIELD = 'Resent-Date'
  11. 1 def initialize(value = nil, charset = 'utf-8')
  12. self.charset = charset
  13. if Utilities.blank?(value)
  14. value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
  15. else
  16. value = ::DateTime.parse(value.to_s).strftime('%a, %d %b %Y %H:%M:%S %z')
  17. end
  18. super(CAPITALIZED_FIELD, value, charset)
  19. self
  20. end
  21. 1 def encoded
  22. do_encode(CAPITALIZED_FIELD)
  23. end
  24. 1 def decoded
  25. do_decode
  26. end
  27. end
  28. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_from_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Resent-From Field
  5. #
  6. # The Resent-From field inherits resent-from StructuredField and handles the Resent-From: header
  7. # field in the email.
  8. #
  9. # Sending resent_from to a mail message will instantiate a Mail::Field object that
  10. # has a ResentFromField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Resent-From field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.resent_from = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:resent_from] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
  22. # mail['resent-from'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
  23. # mail['Resent-From'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentFromField:0x180e1c4
  24. #
  25. # mail[:resent_from].encoded #=> 'Resent-From: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:resent_from].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:resent_from].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:resent_from].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ResentFromField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'resent-from'
  35. 1 CAPITALIZED_FIELD = 'Resent-From'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_message_id_field.rb

58.82% lines covered

17 relevant lines. 10 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # resent-msg-id = "Resent-Message-ID:" msg-id CRLF
  5. 1 require 'mail/fields/common/common_message_id'
  6. 1 module Mail
  7. 1 class ResentMessageIdField < StructuredField
  8. 1 include CommonMessageId
  9. 1 FIELD_NAME = 'resent-message-id'
  10. 1 CAPITALIZED_FIELD = 'Resent-Message-ID'
  11. 1 def initialize(value = nil, charset = 'utf-8')
  12. self.charset = charset
  13. super(CAPITALIZED_FIELD, value, charset)
  14. self.parse
  15. self
  16. end
  17. 1 def name
  18. 'Resent-Message-ID'
  19. end
  20. 1 def encoded
  21. do_encode(CAPITALIZED_FIELD)
  22. end
  23. 1 def decoded
  24. do_decode
  25. end
  26. end
  27. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_sender_field.rb

61.11% lines covered

18 relevant lines. 11 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Resent-Sender Field
  5. #
  6. # The Resent-Sender field inherits resent-sender StructuredField and handles the Resent-Sender: header
  7. # field in the email.
  8. #
  9. # Sending resent_sender to a mail message will instantiate a Mail::Field object that
  10. # has a ResentSenderField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Resent-Sender field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.resent_sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.resent_sender #=> ['mikel@test.lindsaar.net']
  21. # mail[:resent_sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
  22. # mail['resent-sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
  23. # mail['Resent-Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentSenderField:0x180e1c4
  24. #
  25. # mail.resent_sender.to_s #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  26. # mail.resent_sender.addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  27. # mail.resent_sender.formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  28. #
  29. 1 require 'mail/fields/common/common_address'
  30. 1 module Mail
  31. 1 class ResentSenderField < StructuredField
  32. 1 include Mail::CommonAddress
  33. 1 FIELD_NAME = 'resent-sender'
  34. 1 CAPITALIZED_FIELD = 'Resent-Sender'
  35. 1 def initialize(value = nil, charset = 'utf-8')
  36. self.charset = charset
  37. super(CAPITALIZED_FIELD, value, charset)
  38. self
  39. end
  40. 1 def addresses
  41. [address.address]
  42. end
  43. 1 def address
  44. address_list.addresses.first
  45. end
  46. 1 def encoded
  47. do_encode(CAPITALIZED_FIELD)
  48. end
  49. 1 def decoded
  50. do_decode
  51. end
  52. end
  53. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/resent_to_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Resent-To Field
  5. #
  6. # The Resent-To field inherits resent-to StructuredField and handles the Resent-To: header
  7. # field in the email.
  8. #
  9. # Sending resent_to to a mail message will instantiate a Mail::Field object that
  10. # has a ResentToField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Resent-To field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.resent_to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:resent_to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
  22. # mail['resent-to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
  23. # mail['Resent-To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ResentToField:0x180e1c4
  24. #
  25. # mail[:resent_to].encoded #=> 'Resent-To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:resent_to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:resent_to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:resent_to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ResentToField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'resent-to'
  35. 1 CAPITALIZED_FIELD = 'Resent-To'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/return_path_field.rb

57.89% lines covered

19 relevant lines. 11 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # 4.4.3. REPLY-TO / RESENT-REPLY-TO
  5. #
  6. # Note: The "Return-Path" field is added by the mail transport
  7. # service, at the time of final deliver. It is intended
  8. # to identify a path back to the orginator of the mes-
  9. # sage. The "Reply-To" field is added by the message
  10. # originator and is intended to direct replies.
  11. #
  12. # trace = [return]
  13. # 1*received
  14. #
  15. # return = "Return-Path:" path CRLF
  16. #
  17. # path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) /
  18. # obs-path
  19. #
  20. # received = "Received:" name-val-list ";" date-time CRLF
  21. #
  22. # name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
  23. #
  24. # name-val-pair = item-name CFWS item-value
  25. #
  26. # item-name = ALPHA *(["-"] (ALPHA / DIGIT))
  27. #
  28. # item-value = 1*angle-addr / addr-spec /
  29. # atom / domain / msg-id
  30. #
  31. 1 require 'mail/fields/common/common_address'
  32. 1 module Mail
  33. 1 class ReturnPathField < StructuredField
  34. 1 include Mail::CommonAddress
  35. 1 FIELD_NAME = 'return-path'
  36. 1 CAPITALIZED_FIELD = 'Return-Path'
  37. 1 def initialize(value = nil, charset = 'utf-8')
  38. value = nil if value == '<>'
  39. self.charset = charset
  40. super(CAPITALIZED_FIELD, value, charset)
  41. self
  42. end
  43. 1 def encoded
  44. "#{CAPITALIZED_FIELD}: <#{address}>\r\n"
  45. end
  46. 1 def decoded
  47. do_decode
  48. end
  49. 1 def address
  50. addresses.first
  51. end
  52. 1 def default
  53. address
  54. end
  55. end
  56. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/sender_field.rb

60.0% lines covered

20 relevant lines. 12 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = Sender Field
  5. #
  6. # The Sender field inherits sender StructuredField and handles the Sender: header
  7. # field in the email.
  8. #
  9. # Sending sender to a mail message will instantiate a Mail::Field object that
  10. # has a SenderField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one Sender field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.sender = 'Mikel Lindsaar <mikel@test.lindsaar.net>'
  20. # mail.sender #=> 'mikel@test.lindsaar.net'
  21. # mail[:sender] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
  22. # mail['sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
  23. # mail['Sender'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::SenderField:0x180e1c4
  24. #
  25. # mail[:sender].encoded #=> "Sender: Mikel Lindsaar <mikel@test.lindsaar.net>\r\n"
  26. # mail[:sender].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'
  27. # mail[:sender].addresses #=> ['mikel@test.lindsaar.net']
  28. # mail[:sender].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class SenderField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'sender'
  35. 1 CAPITALIZED_FIELD = 'Sender'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def addresses
  42. [address.address]
  43. end
  44. 1 def address
  45. address_list.addresses.first
  46. end
  47. 1 def encoded
  48. do_encode(CAPITALIZED_FIELD)
  49. end
  50. 1 def decoded
  51. do_decode
  52. end
  53. 1 def default
  54. address.address
  55. end
  56. end
  57. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/structured_field.rb

55.56% lines covered

18 relevant lines. 10 lines covered and 8 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/fields/common/common_field'
  4. 1 module Mail
  5. # Provides access to a structured header field
  6. #
  7. # ===Per RFC 2822:
  8. # 2.2.2. Structured Header Field Bodies
  9. #
  10. # Some field bodies in this standard have specific syntactical
  11. # structure more restrictive than the unstructured field bodies
  12. # described above. These are referred to as "structured" field bodies.
  13. # Structured field bodies are sequences of specific lexical tokens as
  14. # described in sections 3 and 4 of this standard. Many of these tokens
  15. # are allowed (according to their syntax) to be introduced or end with
  16. # comments (as described in section 3.2.3) as well as the space (SP,
  17. # ASCII value 32) and horizontal tab (HTAB, ASCII value 9) characters
  18. # (together known as the white space characters, WSP), and those WSP
  19. # characters are subject to header "folding" and "unfolding" as
  20. # described in section 2.2.3. Semantic analysis of structured field
  21. # bodies is given along with their syntax.
  22. 1 class StructuredField
  23. 1 include Mail::CommonField
  24. 1 include Mail::Utilities
  25. 1 def initialize(name = nil, value = nil, charset = nil)
  26. self.name = name
  27. self.value = value
  28. self.charset = charset
  29. self
  30. end
  31. 1 def charset
  32. @charset
  33. end
  34. 1 def charset=(val)
  35. @charset = val
  36. end
  37. 1 def default
  38. decoded
  39. end
  40. 1 def errors
  41. []
  42. end
  43. end
  44. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/subject_field.rb

71.43% lines covered

7 relevant lines. 5 lines covered and 2 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # subject = "Subject:" unstructured CRLF
  5. 1 module Mail
  6. 1 class SubjectField < UnstructuredField
  7. 1 FIELD_NAME = 'subject'
  8. 1 CAPITALIZED_FIELD = "Subject"
  9. 1 def initialize(value = nil, charset = 'utf-8')
  10. self.charset = charset
  11. super(CAPITALIZED_FIELD, value, charset)
  12. end
  13. end
  14. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/to_field.rb

64.29% lines covered

14 relevant lines. 9 lines covered and 5 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. #
  4. # = To Field
  5. #
  6. # The To field inherits to StructuredField and handles the To: header
  7. # field in the email.
  8. #
  9. # Sending to to a mail message will instantiate a Mail::Field object that
  10. # has a ToField as its field type. This includes all Mail::CommonAddress
  11. # module instance metods.
  12. #
  13. # Only one To field can appear in a header, though it can have multiple
  14. # addresses and groups of addresses.
  15. #
  16. # == Examples:
  17. #
  18. # mail = Mail.new
  19. # mail.to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  20. # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  21. # mail[:to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
  22. # mail['to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
  23. # mail['To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
  24. #
  25. # mail[:to].encoded #=> 'To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
  26. # mail[:to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  27. # mail[:to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  28. # mail[:to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
  29. #
  30. 1 require 'mail/fields/common/common_address'
  31. 1 module Mail
  32. 1 class ToField < StructuredField
  33. 1 include Mail::CommonAddress
  34. 1 FIELD_NAME = 'to'
  35. 1 CAPITALIZED_FIELD = 'To'
  36. 1 def initialize(value = nil, charset = 'utf-8')
  37. self.charset = charset
  38. super(CAPITALIZED_FIELD, value, charset)
  39. self
  40. end
  41. 1 def encoded
  42. do_encode(CAPITALIZED_FIELD)
  43. end
  44. 1 def decoded
  45. do_decode
  46. end
  47. end
  48. end

target/rubygems/gems/mail-2.7.1/lib/mail/fields/unstructured_field.rb

21.65% lines covered

97 relevant lines. 21 lines covered and 76 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/fields/common/common_field'
  4. 1 module Mail
  5. # Provides access to an unstructured header field
  6. #
  7. # ===Per RFC 2822:
  8. # 2.2.1. Unstructured Header Field Bodies
  9. #
  10. # Some field bodies in this standard are defined simply as
  11. # "unstructured" (which is specified below as any US-ASCII characters,
  12. # except for CR and LF) with no further restrictions. These are
  13. # referred to as unstructured field bodies. Semantically, unstructured
  14. # field bodies are simply to be treated as a single line of characters
  15. # with no further processing (except for header "folding" and
  16. # "unfolding" as described in section 2.2.3).
  17. 1 class UnstructuredField
  18. 1 include Mail::CommonField
  19. 1 include Mail::Utilities
  20. 1 attr_accessor :charset
  21. 1 attr_reader :errors
  22. 1 def initialize(name, value, charset = nil)
  23. @errors = []
  24. if value.is_a?(Array)
  25. # Probably has arrived here from a failed parse of an AddressList Field
  26. value = value.join(', ')
  27. else
  28. # Ensure we are dealing with a string
  29. value = value.to_s
  30. # Mark UTF-8 strings parsed from ASCII-8BIT
  31. if value.respond_to?(:force_encoding) && value.encoding == Encoding::ASCII_8BIT
  32. utf8 = value.dup.force_encoding(Encoding::UTF_8)
  33. value = utf8 if utf8.valid_encoding?
  34. end
  35. end
  36. if charset
  37. self.charset = charset
  38. else
  39. if value.respond_to?(:encoding)
  40. self.charset = value.encoding
  41. else
  42. self.charset = $KCODE
  43. end
  44. end
  45. self.name = name
  46. self.value = value
  47. self
  48. end
  49. 1 def encoded
  50. do_encode
  51. end
  52. 1 def decoded
  53. do_decode
  54. end
  55. 1 def default
  56. decoded
  57. end
  58. 1 def parse # An unstructured field does not parse
  59. self
  60. end
  61. 1 private
  62. 1 def do_encode
  63. if value && !value.empty?
  64. "#{wrapped_value}\r\n"
  65. else
  66. ''
  67. end
  68. end
  69. 1 def do_decode
  70. Utilities.blank?(value) ? nil : Encodings.decode_encode(value, :decode)
  71. end
  72. # 2.2.3. Long Header Fields
  73. #
  74. # Each header field is logically a single line of characters comprising
  75. # the field name, the colon, and the field body. For convenience
  76. # however, and to deal with the 998/78 character limitations per line,
  77. # the field body portion of a header field can be split into a multiple
  78. # line representation; this is called "folding". The general rule is
  79. # that wherever this standard allows for folding white space (not
  80. # simply WSP characters), a CRLF may be inserted before any WSP. For
  81. # example, the header field:
  82. #
  83. # Subject: This is a test
  84. #
  85. # can be represented as:
  86. #
  87. # Subject: This
  88. # is a test
  89. #
  90. # Note: Though structured field bodies are defined in such a way that
  91. # folding can take place between many of the lexical tokens (and even
  92. # within some of the lexical tokens), folding SHOULD be limited to
  93. # placing the CRLF at higher-level syntactic breaks. For instance, if
  94. # a field body is defined as comma-separated values, it is recommended
  95. # that folding occur after the comma separating the structured items in
  96. # preference to other places where the field could be folded, even if
  97. # it is allowed elsewhere.
  98. 1 def wrapped_value # :nodoc:
  99. wrap_lines(name, fold("#{name}: ".length))
  100. end
  101. # 6.2. Display of 'encoded-word's
  102. #
  103. # When displaying a particular header field that contains multiple
  104. # 'encoded-word's, any 'linear-white-space' that separates a pair of
  105. # adjacent 'encoded-word's is ignored. (This is to allow the use of
  106. # multiple 'encoded-word's to represent long strings of unencoded text,
  107. # without having to separate 'encoded-word's where spaces occur in the
  108. # unencoded text.)
  109. 1 def wrap_lines(name, folded_lines)
  110. result = ["#{name}: #{folded_lines.shift}"]
  111. result.concat(folded_lines)
  112. result.join("\r\n\s")
  113. end
  114. 1 def fold(prepend = 0) # :nodoc:
  115. encoding = normalized_encoding
  116. decoded_string = decoded.to_s
  117. should_encode = !decoded_string.ascii_only?
  118. if should_encode
  119. first = true
  120. words = decoded_string.split(/[ \t]/).map do |word|
  121. if first
  122. first = !first
  123. else
  124. word = " #{word}"
  125. end
  126. if !word.ascii_only?
  127. word
  128. else
  129. word.scan(/.{7}|.+$/)
  130. end
  131. end.flatten
  132. else
  133. words = decoded_string.split(/[ \t]/)
  134. end
  135. folded_lines = []
  136. while !words.empty?
  137. limit = 78 - prepend
  138. limit = limit - 7 - encoding.length if should_encode
  139. line = String.new
  140. first_word = true
  141. while !words.empty?
  142. break unless word = words.first.dup
  143. # Convert on 1.9+ only since we aren't sure of the current
  144. # charset encoding on 1.8. We'd need to track internal/external
  145. # charset on each field.
  146. if charset && word.respond_to?(:encoding)
  147. word = Encodings.transcode_charset(word, word.encoding, charset)
  148. end
  149. word = encode(word) if should_encode
  150. word = encode_crlf(word)
  151. # Skip to next line if we're going to go past the limit
  152. # Unless this is the first word, in which case we're going to add it anyway
  153. # Note: This means that a word that's longer than 998 characters is going to break the spec. Please fix if this is a problem for you.
  154. # (The fix, it seems, would be to use encoded-word encoding on it, because that way you can break it across multiple lines and
  155. # the linebreak will be ignored)
  156. break if !line.empty? && (line.length + word.length + 1 > limit)
  157. # Remove the word from the queue ...
  158. words.shift
  159. # Add word separator
  160. if first_word
  161. first_word = false
  162. else
  163. line << " " if !should_encode
  164. end
  165. # ... add it in encoded form to the current line
  166. line << word
  167. end
  168. # Encode the line if necessary
  169. line = "=?#{encoding}?Q?#{line}?=" if should_encode
  170. # Add the line to the output and reset the prepend
  171. folded_lines << line
  172. prepend = 0
  173. end
  174. folded_lines
  175. end
  176. 1 def encode(value)
  177. value = [value].pack(CAPITAL_M).gsub(EQUAL_LF, EMPTY)
  178. value.gsub!(/"/, '=22')
  179. value.gsub!(/\(/, '=28')
  180. value.gsub!(/\)/, '=29')
  181. value.gsub!(/\?/, '=3F')
  182. value.gsub!(/_/, '=5F')
  183. value.gsub!(/ /, '_')
  184. value
  185. end
  186. 1 def encode_crlf(value)
  187. value.gsub!(CR, CR_ENCODED)
  188. value.gsub!(LF, LF_ENCODED)
  189. value
  190. end
  191. 1 def normalized_encoding
  192. encoding = charset.to_s.upcase.gsub('_', '-')
  193. encoding = 'UTF-8' if encoding == 'UTF8' # Ruby 1.8.x and $KCODE == 'u'
  194. encoding
  195. end
  196. end
  197. end

target/rubygems/gems/mail-2.7.1/lib/mail/header.rb

35.48% lines covered

93 relevant lines. 33 lines covered and 60 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # Provides access to a header object.
  5. #
  6. # ===Per RFC2822
  7. #
  8. # 2.2. Header Fields
  9. #
  10. # Header fields are lines composed of a field name, followed by a colon
  11. # (":"), followed by a field body, and terminated by CRLF. A field
  12. # name MUST be composed of printable US-ASCII characters (i.e.,
  13. # characters that have values between 33 and 126, inclusive), except
  14. # colon. A field body may be composed of any US-ASCII characters,
  15. # except for CR and LF. However, a field body may contain CRLF when
  16. # used in header "folding" and "unfolding" as described in section
  17. # 2.2.3. All field bodies MUST conform to the syntax described in
  18. # sections 3 and 4 of this standard.
  19. 1 class Header
  20. 1 include Constants
  21. 1 include Utilities
  22. 1 include Enumerable
  23. 1 @@maximum_amount = 1000
  24. # Large amount of headers in Email might create extra high CPU load
  25. # Use this parameter to limit number of headers that will be parsed by
  26. # mail library.
  27. # Default: 1000
  28. 1 def self.maximum_amount
  29. @@maximum_amount
  30. end
  31. 1 def self.maximum_amount=(value)
  32. @@maximum_amount = value
  33. end
  34. # Creates a new header object.
  35. #
  36. # Accepts raw text or nothing. If given raw text will attempt to parse
  37. # it and split it into the various fields, instantiating each field as
  38. # it goes.
  39. #
  40. # If it finds a field that should be a structured field (such as content
  41. # type), but it fails to parse it, it will simply make it an unstructured
  42. # field and leave it alone. This will mean that the data is preserved but
  43. # no automatic processing of that field will happen. If you find one of
  44. # these cases, please make a patch and send it in, or at the least, send
  45. # me the example so we can fix it.
  46. 1 def initialize(header_text = nil, charset = nil)
  47. @charset = charset
  48. self.raw_source = header_text
  49. split_header if header_text
  50. end
  51. 1 def initialize_copy(original)
  52. super
  53. @fields = @fields.dup
  54. @fields.map!(&:dup)
  55. end
  56. # The preserved raw source of the header as you passed it in, untouched
  57. # for your Regexing glory.
  58. 1 def raw_source
  59. @raw_source
  60. end
  61. # Returns an array of all the fields in the header in order that they
  62. # were read in.
  63. 1 def fields
  64. @fields ||= FieldList.new
  65. end
  66. # 3.6. Field definitions
  67. #
  68. # It is important to note that the header fields are not guaranteed to
  69. # be in a particular order. They may appear in any order, and they
  70. # have been known to be reordered occasionally when transported over
  71. # the Internet. However, for the purposes of this standard, header
  72. # fields SHOULD NOT be reordered when a message is transported or
  73. # transformed. More importantly, the trace header fields and resent
  74. # header fields MUST NOT be reordered, and SHOULD be kept in blocks
  75. # prepended to the message. See sections 3.6.6 and 3.6.7 for more
  76. # information.
  77. #
  78. # Populates the fields container with Field objects in the order it
  79. # receives them in.
  80. #
  81. # Acceps an array of field string values, for example:
  82. #
  83. # h = Header.new
  84. # h.fields = ['From: mikel@me.com', 'To: bob@you.com']
  85. 1 def fields=(unfolded_fields)
  86. @fields = Mail::FieldList.new
  87. Kernel.warn "WARNING: More than #{self.class.maximum_amount} header fields; only using the first #{self.class.maximum_amount} and ignoring the rest" if unfolded_fields.length > self.class.maximum_amount
  88. unfolded_fields[0..(self.class.maximum_amount-1)].each do |field|
  89. if field = Field.parse(field, charset)
  90. if limited_field?(field.name) && (selected = select_field_for(field.name)) && selected.any?
  91. selected.first.update(field.name, field.value)
  92. else
  93. @fields << field
  94. end
  95. end
  96. end
  97. end
  98. 1 def errors
  99. @fields.map(&:errors).flatten(1)
  100. end
  101. # 3.6. Field definitions
  102. #
  103. # The following table indicates limits on the number of times each
  104. # field may occur in a message header as well as any special
  105. # limitations on the use of those fields. An asterisk next to a value
  106. # in the minimum or maximum column indicates that a special restriction
  107. # appears in the Notes column.
  108. #
  109. # <snip table from 3.6>
  110. #
  111. # As per RFC, many fields can appear more than once, we will return a string
  112. # of the value if there is only one header, or if there is more than one
  113. # matching header, will return an array of values in order that they appear
  114. # in the header ordered from top to bottom.
  115. #
  116. # Example:
  117. #
  118. # h = Header.new
  119. # h.fields = ['To: mikel@me.com', 'X-Mail-SPAM: 15', 'X-Mail-SPAM: 20']
  120. # h['To'] #=> 'mikel@me.com'
  121. # h['X-Mail-SPAM'] #=> ['15', '20']
  122. 1 def [](name)
  123. name = dasherize(name)
  124. name.downcase!
  125. selected = select_field_for(name)
  126. case
  127. when selected.length > 1
  128. selected.map { |f| f }
  129. when !Utilities.blank?(selected)
  130. selected.first
  131. else
  132. nil
  133. end
  134. end
  135. # Sets the FIRST matching field in the header to passed value, or deletes
  136. # the FIRST field matched from the header if passed nil
  137. #
  138. # Example:
  139. #
  140. # h = Header.new
  141. # h.fields = ['To: mikel@me.com', 'X-Mail-SPAM: 15', 'X-Mail-SPAM: 20']
  142. # h['To'] = 'bob@you.com'
  143. # h['To'] #=> 'bob@you.com'
  144. # h['X-Mail-SPAM'] = '10000'
  145. # h['X-Mail-SPAM'] # => ['15', '20', '10000']
  146. # h['X-Mail-SPAM'] = nil
  147. # h['X-Mail-SPAM'] # => nil
  148. 1 def []=(name, value)
  149. name = dasherize(name)
  150. if name.include?(':')
  151. raise ArgumentError, "Header names may not contain a colon: #{name.inspect}"
  152. end
  153. fn = name.downcase
  154. selected = select_field_for(fn)
  155. case
  156. # User wants to delete the field
  157. when !Utilities.blank?(selected) && value == nil
  158. fields.delete_if { |f| selected.include?(f) }
  159. # User wants to change the field
  160. when !Utilities.blank?(selected) && limited_field?(fn)
  161. selected.first.update(fn, value)
  162. # User wants to create the field
  163. else
  164. # Need to insert in correct order for trace fields
  165. self.fields << Field.new(name.to_s, value, charset)
  166. end
  167. if dasherize(fn) == "content-type"
  168. # Update charset if specified in Content-Type
  169. params = self[:content_type].parameters rescue nil
  170. @charset = params[:charset] if params && params[:charset]
  171. end
  172. end
  173. 1 def charset
  174. @charset
  175. end
  176. 1 def charset=(val)
  177. params = self[:content_type].parameters rescue nil
  178. if params
  179. params[:charset] = val
  180. end
  181. @charset = val
  182. end
  183. 1 LIMITED_FIELDS = %w[ date from sender reply-to to cc bcc
  184. message-id in-reply-to references subject
  185. return-path content-type mime-version
  186. content-transfer-encoding content-description
  187. content-id content-disposition content-location]
  188. 1 def encoded
  189. buffer = String.new
  190. buffer.force_encoding('us-ascii') if buffer.respond_to?(:force_encoding)
  191. fields.each do |field|
  192. buffer << field.encoded
  193. end
  194. buffer
  195. end
  196. 1 def to_s
  197. encoded
  198. end
  199. 1 def decoded
  200. raise NoMethodError, 'Can not decode an entire header as there could be character set conflicts, try calling #decoded on the various fields.'
  201. end
  202. 1 def field_summary
  203. fields.map { |f| "<#{f.name}: #{f.value}>" }.join(", ")
  204. end
  205. # Returns true if the header has a Message-ID defined (empty or not)
  206. 1 def has_message_id?
  207. !fields.select { |f| f.responsible_for?('Message-ID') }.empty?
  208. end
  209. # Returns true if the header has a Content-ID defined (empty or not)
  210. 1 def has_content_id?
  211. !fields.select { |f| f.responsible_for?('Content-ID') }.empty?
  212. end
  213. # Returns true if the header has a Date defined (empty or not)
  214. 1 def has_date?
  215. !fields.select { |f| f.responsible_for?('Date') }.empty?
  216. end
  217. # Returns true if the header has a MIME version defined (empty or not)
  218. 1 def has_mime_version?
  219. !fields.select { |f| f.responsible_for?('Mime-Version') }.empty?
  220. end
  221. 1 private
  222. 1 def raw_source=(val)
  223. @raw_source = ::Mail::Utilities.to_crlf(val).lstrip
  224. end
  225. # Splits an unfolded and line break cleaned header into individual field
  226. # strings.
  227. 1 def split_header
  228. self.fields = raw_source.split(HEADER_SPLIT)
  229. end
  230. 1 def select_field_for(name)
  231. fields.select { |f| f.responsible_for?(name) }
  232. end
  233. 1 def limited_field?(name)
  234. LIMITED_FIELDS.include?(name.to_s.downcase)
  235. end
  236. # Enumerable support; yield each field in order to the block if there is one,
  237. # or return an Enumerator for them if there isn't.
  238. 1 def each( &block )
  239. return self.fields.each( &block ) if block
  240. self.fields.each
  241. end
  242. end
  243. end

target/rubygems/gems/mail-2.7.1/lib/mail/indifferent_hash.rb

53.57% lines covered

56 relevant lines. 30 lines covered and 26 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. # This is an almost cut and paste from ActiveSupport v3.0.6, copied in here so that Mail
  4. # itself does not depend on ActiveSupport to avoid versioning conflicts
  5. 1 module Mail
  6. 1 class IndifferentHash < Hash
  7. 1 def initialize(constructor = {})
  8. if constructor.is_a?(Hash)
  9. super()
  10. update(constructor)
  11. else
  12. super(constructor)
  13. end
  14. end
  15. 1 def default(key = nil)
  16. if key.is_a?(Symbol) && include?(key = key.to_s)
  17. self[key]
  18. else
  19. super
  20. end
  21. end
  22. 1 def self.new_from_hash_copying_default(hash)
  23. IndifferentHash.new(hash).tap do |new_hash|
  24. new_hash.default = hash.default
  25. end
  26. end
  27. 1 alias_method :regular_writer, :[]= unless method_defined?(:regular_writer)
  28. 1 alias_method :regular_update, :update unless method_defined?(:regular_update)
  29. # Assigns a new value to the hash:
  30. #
  31. # hash = HashWithIndifferentAccess.new
  32. # hash[:key] = "value"
  33. #
  34. 1 def []=(key, value)
  35. regular_writer(convert_key(key), convert_value(value))
  36. end
  37. 1 alias_method :store, :[]=
  38. # Updates the instantized hash with values from the second:
  39. #
  40. # hash_1 = HashWithIndifferentAccess.new
  41. # hash_1[:key] = "value"
  42. #
  43. # hash_2 = HashWithIndifferentAccess.new
  44. # hash_2[:key] = "New Value!"
  45. #
  46. # hash_1.update(hash_2) # => {"key"=>"New Value!"}
  47. #
  48. 1 def update(other_hash)
  49. other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
  50. self
  51. end
  52. 1 alias_method :merge!, :update
  53. # Checks the hash for a key matching the argument passed in:
  54. #
  55. # hash = HashWithIndifferentAccess.new
  56. # hash["key"] = "value"
  57. # hash.key? :key # => true
  58. # hash.key? "key" # => true
  59. #
  60. 1 def key?(key)
  61. super(convert_key(key))
  62. end
  63. 1 alias_method :include?, :key?
  64. 1 alias_method :has_key?, :key?
  65. 1 alias_method :member?, :key?
  66. # Fetches the value for the specified key, same as doing hash[key]
  67. 1 def fetch(key, *extras)
  68. super(convert_key(key), *extras)
  69. end
  70. # Returns an array of the values at the specified indices:
  71. #
  72. # hash = HashWithIndifferentAccess.new
  73. # hash[:a] = "x"
  74. # hash[:b] = "y"
  75. # hash.values_at("a", "b") # => ["x", "y"]
  76. #
  77. 1 def values_at(*indices)
  78. indices.collect {|key| self[convert_key(key)]}
  79. end
  80. # Returns an exact copy of the hash.
  81. 1 def dup
  82. IndifferentHash.new(self)
  83. end
  84. # Merges the instantized and the specified hashes together, giving precedence to the values from the second hash
  85. # Does not overwrite the existing hash.
  86. 1 def merge(hash)
  87. self.dup.update(hash)
  88. end
  89. # Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second.
  90. # This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess.
  91. 1 def reverse_merge(other_hash)
  92. super self.class.new_from_hash_copying_default(other_hash)
  93. end
  94. 1 def reverse_merge!(other_hash)
  95. replace(reverse_merge( other_hash ))
  96. end
  97. # Removes a specified key from the hash.
  98. 1 def delete(key)
  99. super(convert_key(key))
  100. end
  101. 1 def stringify_keys!; self end
  102. 1 def stringify_keys; dup end
  103. 1 def symbolize_keys; to_hash.symbolize_keys end
  104. 1 def to_options!; self end
  105. 1 def to_hash
  106. Hash.new(default).merge!(self)
  107. end
  108. 1 protected
  109. 1 def convert_key(key)
  110. key.kind_of?(Symbol) ? key.to_s : key
  111. end
  112. 1 def convert_value(value)
  113. if value.class == Hash
  114. self.class.new_from_hash_copying_default(value)
  115. elsif value.is_a?(Array)
  116. value.dup.replace(value.map { |e| convert_value(e) })
  117. else
  118. value
  119. end
  120. end
  121. end
  122. end

target/rubygems/gems/mail-2.7.1/lib/mail/mail.rb

51.67% lines covered

60 relevant lines. 31 lines covered and 29 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # Allows you to create a new Mail::Message object.
  5. #
  6. # You can make an email via passing a string or passing a block.
  7. #
  8. # For example, the following two examples will create the same email
  9. # message:
  10. #
  11. # Creating via a string:
  12. #
  13. # string = "To: mikel@test.lindsaar.net\r\n"
  14. # string << "From: bob@test.lindsaar.net\r\n"
  15. # string << "Subject: This is an email\r\n"
  16. # string << "\r\n"
  17. # string << "This is the body"
  18. # Mail.new(string)
  19. #
  20. # Or creating via a block:
  21. #
  22. # message = Mail.new do
  23. # to 'mikel@test.lindsaar.net'
  24. # from 'bob@test.lindsaar.net'
  25. # subject 'This is an email'
  26. # body 'This is the body'
  27. # end
  28. #
  29. # Or creating via a hash (or hash like object):
  30. #
  31. # message = Mail.new({:to => 'mikel@test.lindsaar.net',
  32. # 'from' => 'bob@test.lindsaar.net',
  33. # :subject => 'This is an email',
  34. # :body => 'This is the body' })
  35. #
  36. # Note, the hash keys can be strings or symbols, the passed in object
  37. # does not need to be a hash, it just needs to respond to :each_pair
  38. # and yield each key value pair.
  39. #
  40. # As a side note, you can also create a new email through creating
  41. # a Mail::Message object directly and then passing in values via string,
  42. # symbol or direct method calls. See Mail::Message for more information.
  43. #
  44. # mail = Mail.new
  45. # mail.to = 'mikel@test.lindsaar.net'
  46. # mail[:from] = 'bob@test.lindsaar.net'
  47. # mail['subject'] = 'This is an email'
  48. # mail.body = 'This is the body'
  49. 1 def self.new(*args, &block)
  50. Message.new(args, &block)
  51. end
  52. # Sets the default delivery method and retriever method for all new Mail objects.
  53. # The delivery_method and retriever_method default to :smtp and :pop3, with defaults
  54. # set.
  55. #
  56. # So sending a new email, if you have an SMTP server running on localhost is
  57. # as easy as:
  58. #
  59. # Mail.deliver do
  60. # to 'mikel@test.lindsaar.net'
  61. # from 'bob@test.lindsaar.net'
  62. # subject 'hi there!'
  63. # body 'this is a body'
  64. # end
  65. #
  66. # If you do not specify anything, you will get the following equivalent code set in
  67. # every new mail object:
  68. #
  69. # Mail.defaults do
  70. # delivery_method :smtp, { :address => "localhost",
  71. # :port => 25,
  72. # :domain => 'localhost.localdomain',
  73. # :user_name => nil,
  74. # :password => nil,
  75. # :authentication => nil,
  76. # :enable_starttls_auto => true }
  77. #
  78. # retriever_method :pop3, { :address => "localhost",
  79. # :port => 995,
  80. # :user_name => nil,
  81. # :password => nil,
  82. # :enable_ssl => true }
  83. # end
  84. #
  85. # Mail.delivery_method.new #=> Mail::SMTP instance
  86. # Mail.retriever_method.new #=> Mail::POP3 instance
  87. #
  88. # Each mail object inherits the default set in Mail.delivery_method, however, on
  89. # a per email basis, you can override the method:
  90. #
  91. # mail.delivery_method :smtp
  92. #
  93. # Or you can override the method and pass in settings:
  94. #
  95. # mail.delivery_method :smtp, :address => 'some.host'
  96. 1 def self.defaults(&block)
  97. Configuration.instance.instance_eval(&block)
  98. end
  99. # Returns the delivery method selected, defaults to an instance of Mail::SMTP
  100. 1 def self.delivery_method
  101. Configuration.instance.delivery_method
  102. end
  103. # Returns the retriever method selected, defaults to an instance of Mail::POP3
  104. 1 def self.retriever_method
  105. Configuration.instance.retriever_method
  106. end
  107. # Send an email using the default configuration. You do need to set a default
  108. # configuration first before you use self.deliver, if you don't, an appropriate
  109. # error will be raised telling you to.
  110. #
  111. # If you do not specify a delivery type, SMTP will be used.
  112. #
  113. # Mail.deliver do
  114. # to 'mikel@test.lindsaar.net'
  115. # from 'ada@test.lindsaar.net'
  116. # subject 'This is a test email'
  117. # body 'Not much to say here'
  118. # end
  119. #
  120. # You can also do:
  121. #
  122. # mail = Mail.read('email.eml')
  123. # mail.deliver!
  124. #
  125. # And your email object will be created and sent.
  126. 1 def self.deliver(*args, &block)
  127. mail = self.new(args, &block)
  128. mail.deliver
  129. mail
  130. end
  131. # Find emails from the default retriever
  132. # See Mail::Retriever for a complete documentation.
  133. 1 def self.find(*args, &block)
  134. retriever_method.find(*args, &block)
  135. end
  136. # Finds and then deletes retrieved emails from the default retriever
  137. # See Mail::Retriever for a complete documentation.
  138. 1 def self.find_and_delete(*args, &block)
  139. retriever_method.find_and_delete(*args, &block)
  140. end
  141. # Receive the first email(s) from the default retriever
  142. # See Mail::Retriever for a complete documentation.
  143. 1 def self.first(*args, &block)
  144. retriever_method.first(*args, &block)
  145. end
  146. # Receive the first email(s) from the default retriever
  147. # See Mail::Retriever for a complete documentation.
  148. 1 def self.last(*args, &block)
  149. retriever_method.last(*args, &block)
  150. end
  151. # Receive all emails from the default retriever
  152. # See Mail::Retriever for a complete documentation.
  153. 1 def self.all(*args, &block)
  154. retriever_method.all(*args, &block)
  155. end
  156. # Reads in an email message from a path and instantiates it as a new Mail::Message
  157. 1 def self.read(filename)
  158. self.new(File.open(filename, 'rb') { |f| f.read })
  159. end
  160. # Delete all emails from the default retriever
  161. # See Mail::Retriever for a complete documentation.
  162. 1 def self.delete_all(*args, &block)
  163. retriever_method.delete_all(*args, &block)
  164. end
  165. # Instantiates a new Mail::Message using a string
  166. 1 def Mail.read_from_string(mail_as_string)
  167. Mail.new(mail_as_string)
  168. end
  169. 1 def Mail.connection(&block)
  170. retriever_method.connection(&block)
  171. end
  172. # Initialize the observers and interceptors arrays
  173. 1 @@delivery_notification_observers = []
  174. 1 @@delivery_interceptors = []
  175. # You can register an object to be informed of every email that is sent through
  176. # this method.
  177. #
  178. # Your object needs to respond to a single method #delivered_email(mail)
  179. # which receives the email that is sent.
  180. 1 def self.register_observer(observer)
  181. unless @@delivery_notification_observers.include?(observer)
  182. @@delivery_notification_observers << observer
  183. end
  184. end
  185. # Unregister the given observer, allowing mail to resume operations
  186. # without it.
  187. 1 def self.unregister_observer(observer)
  188. @@delivery_notification_observers.delete(observer)
  189. end
  190. # You can register an object to be given every mail object that will be sent,
  191. # before it is sent. So if you want to add special headers or modify any
  192. # email that gets sent through the Mail library, you can do so.
  193. #
  194. # Your object needs to respond to a single method #delivering_email(mail)
  195. # which receives the email that is about to be sent. Make your modifications
  196. # directly to this object.
  197. 1 def self.register_interceptor(interceptor)
  198. unless @@delivery_interceptors.include?(interceptor)
  199. @@delivery_interceptors << interceptor
  200. end
  201. end
  202. # Unregister the given interceptor, allowing mail to resume operations
  203. # without it.
  204. 1 def self.unregister_interceptor(interceptor)
  205. @@delivery_interceptors.delete(interceptor)
  206. end
  207. 1 def self.inform_observers(mail)
  208. @@delivery_notification_observers.each do |observer|
  209. observer.delivered_email(mail)
  210. end
  211. end
  212. 1 def self.inform_interceptors(mail)
  213. @@delivery_interceptors.each do |interceptor|
  214. interceptor.delivering_email(mail)
  215. end
  216. end
  217. 1 protected
  218. 1 RANDOM_TAG='%x%x_%x%x%d%x'
  219. 1 def self.random_tag
  220. t = Time.now
  221. sprintf(RANDOM_TAG,
  222. t.to_i, t.tv_usec,
  223. $$, Thread.current.object_id.abs, self.uniq, rand(255))
  224. end
  225. 1 private
  226. 1 def self.something_random
  227. 1 (Thread.current.object_id * rand(255) / Time.now.to_f).to_s.slice(-3..-1).to_i
  228. end
  229. 1 def self.uniq
  230. @@uniq += 1
  231. end
  232. 1 @@uniq = self.something_random
  233. end

target/rubygems/gems/mail-2.7.1/lib/mail/matchers/attachment_matchers.rb

66.67% lines covered

15 relevant lines. 10 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module Matchers
  4. 1 def any_attachment
  5. AnyAttachmentMatcher.new
  6. end
  7. 1 def an_attachment_with_filename(filename)
  8. AttachmentFilenameMatcher.new(filename)
  9. end
  10. 1 class AnyAttachmentMatcher
  11. 1 def ===(other)
  12. other.attachment?
  13. end
  14. end
  15. 1 class AttachmentFilenameMatcher
  16. 1 attr_reader :filename
  17. 1 def initialize(filename)
  18. @filename = filename
  19. end
  20. 1 def ===(other)
  21. other.attachment? && other.filename == filename
  22. end
  23. end
  24. end
  25. end

target/rubygems/gems/mail-2.7.1/lib/mail/matchers/has_sent_mail.rb

32.2% lines covered

118 relevant lines. 38 lines covered and 80 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module Matchers
  4. 1 def have_sent_email
  5. HasSentEmailMatcher.new(self)
  6. end
  7. 1 class HasSentEmailMatcher
  8. 1 def initialize(_context)
  9. end
  10. 1 def matches?(subject)
  11. matching_deliveries = filter_matched_deliveries(Mail::TestMailer.deliveries)
  12. !(matching_deliveries.empty?)
  13. end
  14. 1 def from(sender)
  15. @sender = sender
  16. self
  17. end
  18. 1 def to(recipient_or_list)
  19. @recipients ||= []
  20. if recipient_or_list.kind_of?(Array)
  21. @recipients += recipient_or_list
  22. else
  23. @recipients << recipient_or_list
  24. end
  25. self
  26. end
  27. 1 def cc(recipient_or_list)
  28. @copy_recipients ||= []
  29. if recipient_or_list.kind_of?(Array)
  30. @copy_recipients += recipient_or_list
  31. else
  32. @copy_recipients << recipient_or_list
  33. end
  34. self
  35. end
  36. 1 def bcc(recipient_or_list)
  37. @blind_copy_recipients ||= []
  38. @blind_copy_recipients.concat(Array(recipient_or_list))
  39. self
  40. end
  41. 1 def with_attachments(attachments)
  42. @attachments ||= []
  43. @attachments.concat(Array(attachments))
  44. self
  45. end
  46. 1 def with_no_attachments
  47. @having_attachments = false
  48. self
  49. end
  50. 1 def with_any_attachments
  51. @having_attachments = true
  52. self
  53. end
  54. 1 def with_subject(subject)
  55. @subject = subject
  56. self
  57. end
  58. 1 def matching_subject(subject_matcher)
  59. @subject_matcher = subject_matcher
  60. self
  61. end
  62. 1 def with_body(body)
  63. @body = body
  64. self
  65. end
  66. 1 def matching_body(body_matcher)
  67. @body_matcher = body_matcher
  68. self
  69. end
  70. 1 def with_html(body)
  71. @html_part_body = body
  72. self
  73. end
  74. 1 def with_text(body)
  75. @text_part_body = body
  76. self
  77. end
  78. 1 def description
  79. result = "send a matching email"
  80. result
  81. end
  82. 1 def failure_message
  83. result = "Expected email to be sent "
  84. result += explain_expectations
  85. result += dump_deliveries
  86. result
  87. end
  88. 1 def failure_message_when_negated
  89. result = "Expected no email to be sent "
  90. result += explain_expectations
  91. result += dump_deliveries
  92. result
  93. end
  94. 1 protected
  95. 1 def filter_matched_deliveries(deliveries)
  96. candidate_deliveries = deliveries
  97. modifiers =
  98. %w(sender recipients copy_recipients blind_copy_recipients subject
  99. subject_matcher body body_matcher html_part_body text_part_body having_attachments attachments)
  100. modifiers.each do |modifier_name|
  101. next unless instance_variable_defined?("@#{modifier_name}")
  102. candidate_deliveries = candidate_deliveries.select{|matching_delivery| self.send("matches_on_#{modifier_name}?", matching_delivery)}
  103. end
  104. candidate_deliveries
  105. end
  106. 1 def matches_on_sender?(delivery)
  107. delivery.from.include?(@sender)
  108. end
  109. 1 def matches_on_recipients?(delivery)
  110. @recipients.all? {|recipient| delivery.to.include?(recipient) }
  111. end
  112. 1 def matches_on_copy_recipients?(delivery)
  113. @copy_recipients.all? {|recipient| delivery.cc.include?(recipient) }
  114. end
  115. 1 def matches_on_blind_copy_recipients?(delivery)
  116. @blind_copy_recipients.all? {|recipient| delivery.bcc.include?(recipient) }
  117. end
  118. 1 def matches_on_subject?(delivery)
  119. delivery.subject == @subject
  120. end
  121. 1 def matches_on_subject_matcher?(delivery)
  122. @subject_matcher.match delivery.subject
  123. end
  124. 1 def matches_on_having_attachments?(delivery)
  125. @having_attachments && delivery.attachments.any? ||
  126. (!@having_attachments && delivery.attachments.none?)
  127. end
  128. 1 def matches_on_attachments?(delivery)
  129. @attachments.each_with_index.inject( true ) do |sent_attachments, (attachment, index)|
  130. sent_attachments &&= (attachment === delivery.attachments[index])
  131. end
  132. end
  133. 1 def matches_on_body?(delivery)
  134. delivery.body == @body
  135. end
  136. 1 def matches_on_body_matcher?(delivery)
  137. @body_matcher.match delivery.body.raw_source
  138. end
  139. 1 def matches_on_html_part_body?(delivery)
  140. delivery.html_part.body == @html_part_body
  141. end
  142. 1 def matches_on_text_part_body?(delivery)
  143. delivery.text_part.body == @text_part_body
  144. end
  145. 1 def explain_expectations
  146. result = ''
  147. result += "from #{@sender} " if instance_variable_defined?('@sender')
  148. result += "to #{@recipients.inspect} " if instance_variable_defined?('@recipients')
  149. result += "cc #{@copy_recipients.inspect} " if instance_variable_defined?('@copy_recipients')
  150. result += "bcc #{@blind_copy_recipients.inspect} " if instance_variable_defined?('@blind_copy_recipients')
  151. result += "with subject \"#{@subject}\" " if instance_variable_defined?('@subject')
  152. result += "with subject matching \"#{@subject_matcher}\" " if instance_variable_defined?('@subject_matcher')
  153. result += "with body \"#{@body}\" " if instance_variable_defined?('@body')
  154. result += "with body matching \"#{@body_matcher}\" " if instance_variable_defined?('@body_matcher')
  155. result += "with a text part matching \"#{@text_part_body}\" " if instance_variable_defined?('@text_part_body')
  156. result += "with an HTML part matching \"#{@html_part_body}\" " if instance_variable_defined?('@html_part_body')
  157. result
  158. end
  159. 1 def dump_deliveries
  160. "(actual deliveries: " + Mail::TestMailer.deliveries.inspect + ")"
  161. end
  162. end
  163. end
  164. end

target/rubygems/gems/mail-2.7.1/lib/mail/message.rb

30.83% lines covered

639 relevant lines. 197 lines covered and 442 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require "yaml"
  4. 1 module Mail
  5. # The Message class provides a single point of access to all things to do with an
  6. # email message.
  7. #
  8. # You create a new email message by calling the Mail::Message.new method, or just
  9. # Mail.new
  10. #
  11. # A Message object by default has the following objects inside it:
  12. #
  13. # * A Header object which contains all information and settings of the header of the email
  14. # * Body object which contains all parts of the email that are not part of the header, this
  15. # includes any attachments, body text, MIME parts etc.
  16. #
  17. # ==Per RFC2822
  18. #
  19. # 2.1. General Description
  20. #
  21. # At the most basic level, a message is a series of characters. A
  22. # message that is conformant with this standard is comprised of
  23. # characters with values in the range 1 through 127 and interpreted as
  24. # US-ASCII characters [ASCII]. For brevity, this document sometimes
  25. # refers to this range of characters as simply "US-ASCII characters".
  26. #
  27. # Note: This standard specifies that messages are made up of characters
  28. # in the US-ASCII range of 1 through 127. There are other documents,
  29. # specifically the MIME document series [RFC2045, RFC2046, RFC2047,
  30. # RFC2048, RFC2049], that extend this standard to allow for values
  31. # outside of that range. Discussion of those mechanisms is not within
  32. # the scope of this standard.
  33. #
  34. # Messages are divided into lines of characters. A line is a series of
  35. # characters that is delimited with the two characters carriage-return
  36. # and line-feed; that is, the carriage return (CR) character (ASCII
  37. # value 13) followed immediately by the line feed (LF) character (ASCII
  38. # value 10). (The carriage-return/line-feed pair is usually written in
  39. # this document as "CRLF".)
  40. #
  41. # A message consists of header fields (collectively called "the header
  42. # of the message") followed, optionally, by a body. The header is a
  43. # sequence of lines of characters with special syntax as defined in
  44. # this standard. The body is simply a sequence of characters that
  45. # follows the header and is separated from the header by an empty line
  46. # (i.e., a line with nothing preceding the CRLF).
  47. 1 class Message
  48. 1 include Constants
  49. 1 include Utilities
  50. # ==Making an email
  51. #
  52. # You can make an new mail object via a block, passing a string, file or direct assignment.
  53. #
  54. # ===Making an email via a block
  55. #
  56. # mail = Mail.new do |m|
  57. # m.from 'mikel@test.lindsaar.net'
  58. # m.to 'you@test.lindsaar.net'
  59. # m.subject 'This is a test email'
  60. # m.body File.read('body.txt')
  61. # end
  62. #
  63. # mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@...
  64. #
  65. # If may also pass a block with no arguments, in which case it will
  66. # be evaluated in the scope of the new message instance:
  67. #
  68. # mail = Mail.new do
  69. # from 'mikel@test.lindsaar.net'
  70. # # ���
  71. # end
  72. #
  73. # ===Making an email via passing a string
  74. #
  75. # mail = Mail.new("To: mikel@test.lindsaar.net\r\nSubject: Hello\r\n\r\nHi there!")
  76. # mail.body.to_s #=> 'Hi there!'
  77. # mail.subject #=> 'Hello'
  78. # mail.to #=> 'mikel@test.lindsaar.net'
  79. #
  80. # ===Making an email from a file
  81. #
  82. # mail = Mail.read('path/to/file.eml')
  83. # mail.body.to_s #=> 'Hi there!'
  84. # mail.subject #=> 'Hello'
  85. # mail.to #=> 'mikel@test.lindsaar.net'
  86. #
  87. # ===Making an email via assignment
  88. #
  89. # You can assign values to a mail object via four approaches:
  90. #
  91. # * Message#field_name=(value)
  92. # * Message#field_name(value)
  93. # * Message#['field_name']=(value)
  94. # * Message#[:field_name]=(value)
  95. #
  96. # Examples:
  97. #
  98. # mail = Mail.new
  99. # mail['from'] = 'mikel@test.lindsaar.net'
  100. # mail[:to] = 'you@test.lindsaar.net'
  101. # mail.subject 'This is a test email'
  102. # mail.body = 'This is a body'
  103. #
  104. # mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@...
  105. #
  106. 1 def initialize(*args, &block)
  107. @body = nil
  108. @body_raw = nil
  109. @separate_parts = false
  110. @text_part = nil
  111. @html_part = nil
  112. @errors = nil
  113. @header = nil
  114. @charset = self.class.default_charset
  115. @defaulted_charset = true
  116. @smtp_envelope_from = nil
  117. @smtp_envelope_to = nil
  118. @perform_deliveries = true
  119. @raise_delivery_errors = true
  120. @delivery_handler = nil
  121. @delivery_method = Mail.delivery_method.dup
  122. @transport_encoding = Mail::Encodings.get_encoding('7bit')
  123. @mark_for_delete = false
  124. if args.flatten.first.respond_to?(:each_pair)
  125. init_with_hash(args.flatten.first)
  126. else
  127. init_with_string(args.flatten[0].to_s)
  128. end
  129. # Support both builder styles:
  130. #
  131. # Mail.new do
  132. # to 'recipient@example.com'
  133. # end
  134. #
  135. # and
  136. #
  137. # Mail.new do |m|
  138. # m.to 'recipient@example.com'
  139. # end
  140. if block_given?
  141. if block.arity.zero? || (RUBY_VERSION < '1.9' && block.arity < 1)
  142. instance_eval(&block)
  143. else
  144. yield self
  145. end
  146. end
  147. self
  148. end
  149. # If you assign a delivery handler, mail will call :deliver_mail on the
  150. # object you assign to delivery_handler, it will pass itself as the
  151. # single argument.
  152. #
  153. # If you define a delivery_handler, then you are responsible for the
  154. # following actions in the delivery cycle:
  155. #
  156. # * Appending the mail object to Mail.deliveries as you see fit.
  157. # * Checking the mail.perform_deliveries flag to decide if you should
  158. # actually call :deliver! the mail object or not.
  159. # * Checking the mail.raise_delivery_errors flag to decide if you
  160. # should raise delivery errors if they occur.
  161. # * Actually calling :deliver! (with the bang) on the mail object to
  162. # get it to deliver itself.
  163. #
  164. # A simplest implementation of a delivery_handler would be
  165. #
  166. # class MyObject
  167. #
  168. # def initialize
  169. # @mail = Mail.new('To: mikel@test.lindsaar.net')
  170. # @mail.delivery_handler = self
  171. # end
  172. #
  173. # attr_accessor :mail
  174. #
  175. # def deliver_mail(mail)
  176. # yield
  177. # end
  178. # end
  179. #
  180. # Then doing:
  181. #
  182. # obj = MyObject.new
  183. # obj.mail.deliver
  184. #
  185. # Would cause Mail to call obj.deliver_mail passing itself as a parameter,
  186. # which then can just yield and let Mail do its own private do_delivery
  187. # method.
  188. 1 attr_accessor :delivery_handler
  189. # If set to false, mail will go through the motions of doing a delivery,
  190. # but not actually call the delivery method or append the mail object to
  191. # the Mail.deliveries collection. Useful for testing.
  192. #
  193. # Mail.deliveries.size #=> 0
  194. # mail.delivery_method :smtp
  195. # mail.perform_deliveries = false
  196. # mail.deliver # Mail::SMTP not called here
  197. # Mail.deliveries.size #=> 0
  198. #
  199. # If you want to test and query the Mail.deliveries collection to see what
  200. # mail you sent, you should set perform_deliveries to true and use
  201. # the :test mail delivery_method:
  202. #
  203. # Mail.deliveries.size #=> 0
  204. # mail.delivery_method :test
  205. # mail.perform_deliveries = true
  206. # mail.deliver
  207. # Mail.deliveries.size #=> 1
  208. #
  209. # This setting is ignored by mail (though still available as a flag) if you
  210. # define a delivery_handler
  211. 1 attr_accessor :perform_deliveries
  212. # If set to false, mail will silently catch and ignore any exceptions
  213. # raised through attempting to deliver an email.
  214. #
  215. # This setting is ignored by mail (though still available as a flag) if you
  216. # define a delivery_handler
  217. 1 attr_accessor :raise_delivery_errors
  218. 1 def self.default_charset; @@default_charset; end
  219. 2 def self.default_charset=(charset); @@default_charset = charset; end
  220. 1 self.default_charset = 'UTF-8'
  221. 1 def register_for_delivery_notification(observer)
  222. warn("Message#register_for_delivery_notification is deprecated, please call Mail.register_observer instead")
  223. Mail.register_observer(observer)
  224. end
  225. 1 def inform_observers
  226. Mail.inform_observers(self)
  227. end
  228. 1 def inform_interceptors
  229. Mail.inform_interceptors(self)
  230. end
  231. # Delivers a mail object.
  232. #
  233. # Examples:
  234. #
  235. # mail = Mail.read('file.eml')
  236. # mail.deliver
  237. 1 def deliver
  238. inform_interceptors
  239. if delivery_handler
  240. delivery_handler.deliver_mail(self) { do_delivery }
  241. else
  242. do_delivery
  243. end
  244. inform_observers
  245. self
  246. end
  247. # This method bypasses checking perform_deliveries and raise_delivery_errors,
  248. # so use with caution.
  249. #
  250. # It still however fires off the interceptors and calls the observers callbacks if they are defined.
  251. #
  252. # Returns self
  253. 1 def deliver!
  254. inform_interceptors
  255. response = delivery_method.deliver!(self)
  256. inform_observers
  257. delivery_method.settings[:return_response] ? response : self
  258. end
  259. 1 def delivery_method(method = nil, settings = {})
  260. unless method
  261. @delivery_method
  262. else
  263. @delivery_method = Configuration.instance.lookup_delivery_method(method).new(settings)
  264. end
  265. end
  266. 1 def reply(*args, &block)
  267. self.class.new.tap do |reply|
  268. if message_id
  269. bracketed_message_id = "<#{message_id}>"
  270. reply.in_reply_to = bracketed_message_id
  271. if !references.nil?
  272. refs = [references].flatten.map { |r| "<#{r}>" }
  273. refs << bracketed_message_id
  274. reply.references = refs.join(' ')
  275. elsif !in_reply_to.nil? && !in_reply_to.kind_of?(Array)
  276. reply.references = "<#{in_reply_to}> #{bracketed_message_id}"
  277. end
  278. reply.references ||= bracketed_message_id
  279. end
  280. if subject
  281. reply.subject = subject =~ /^Re:/i ? subject : "RE: #{subject}"
  282. end
  283. if reply_to || from
  284. reply.to = self[reply_to ? :reply_to : :from].to_s
  285. end
  286. if to
  287. reply.from = self[:to].formatted.first.to_s
  288. end
  289. unless args.empty?
  290. if args.flatten.first.respond_to?(:each_pair)
  291. reply.send(:init_with_hash, args.flatten.first)
  292. else
  293. reply.send(:init_with_string, args.flatten[0].to_s.strip)
  294. end
  295. end
  296. if block_given?
  297. reply.instance_eval(&block)
  298. end
  299. end
  300. end
  301. # Provides the operator needed for sort et al.
  302. #
  303. # Compares this mail object with another mail object, this is done by date, so an
  304. # email that is older than another will appear first.
  305. #
  306. # Example:
  307. #
  308. # mail1 = Mail.new do
  309. # date(Time.now)
  310. # end
  311. # mail2 = Mail.new do
  312. # date(Time.now - 86400) # 1 day older
  313. # end
  314. # [mail2, mail1].sort #=> [mail2, mail1]
  315. 1 def <=>(other)
  316. if other.nil?
  317. 1
  318. else
  319. self.date <=> other.date
  320. end
  321. end
  322. # Two emails are the same if they have the same fields and body contents. One
  323. # gotcha here is that Mail will insert Message-IDs when calling encoded, so doing
  324. # mail1.encoded == mail2.encoded is most probably not going to return what you think
  325. # as the assigned Message-IDs by Mail (if not already defined as the same) will ensure
  326. # that the two objects are unique, and this comparison will ALWAYS return false.
  327. #
  328. # So the == operator has been defined like so: Two messages are the same if they have
  329. # the same content, ignoring the Message-ID field, unless BOTH emails have a defined and
  330. # different Message-ID value, then they are false.
  331. #
  332. # So, in practice the == operator works like this:
  333. #
  334. # m1 = Mail.new("Subject: Hello\r\n\r\nHello")
  335. # m2 = Mail.new("Subject: Hello\r\n\r\nHello")
  336. # m1 == m2 #=> true
  337. #
  338. # m1 = Mail.new("Subject: Hello\r\n\r\nHello")
  339. # m2 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello")
  340. # m1 == m2 #=> true
  341. #
  342. # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello")
  343. # m2 = Mail.new("Subject: Hello\r\n\r\nHello")
  344. # m1 == m2 #=> true
  345. #
  346. # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello")
  347. # m2 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello")
  348. # m1 == m2 #=> true
  349. #
  350. # m1 = Mail.new("Message-ID: <1234@test>\r\nSubject: Hello\r\n\r\nHello")
  351. # m2 = Mail.new("Message-ID: <DIFFERENT@test>\r\nSubject: Hello\r\n\r\nHello")
  352. # m1 == m2 #=> false
  353. 1 def ==(other)
  354. return false unless other.respond_to?(:encoded)
  355. if self.message_id && other.message_id
  356. self.encoded == other.encoded
  357. else
  358. dup.tap { |m| m.message_id = '<temp@test>' }.encoded ==
  359. other.dup.tap { |m| m.message_id = '<temp@test>' }.encoded
  360. end
  361. end
  362. 1 def initialize_copy(original)
  363. super
  364. @header = @header.dup
  365. end
  366. # Provides access to the raw source of the message as it was when it
  367. # was instantiated. This is set at initialization and so is untouched
  368. # by the parsers or decoder / encoders
  369. #
  370. # Example:
  371. #
  372. # mail = Mail.new('This is an invalid email message')
  373. # mail.raw_source #=> "This is an invalid email message"
  374. 1 def raw_source
  375. @raw_source
  376. end
  377. # Sets the envelope from for the email
  378. 1 def set_envelope( val )
  379. @raw_envelope = val
  380. @envelope = Mail::Envelope.new( val )
  381. end
  382. # The raw_envelope is the From mikel@test.lindsaar.net Mon May 2 16:07:05 2009
  383. # type field that you can see at the top of any email that has come
  384. # from a mailbox
  385. 1 def raw_envelope
  386. @raw_envelope
  387. end
  388. 1 def envelope_from
  389. @envelope ? @envelope.from : nil
  390. end
  391. 1 def envelope_date
  392. @envelope ? @envelope.date : nil
  393. end
  394. # Sets the header of the message object.
  395. #
  396. # Example:
  397. #
  398. # mail.header = 'To: mikel@test.lindsaar.net\r\nFrom: Bob@bob.com'
  399. # mail.header #=> <#Mail::Header
  400. 1 def header=(value)
  401. @header = Mail::Header.new(value, charset)
  402. end
  403. # Returns the header object of the message object. Or, if passed
  404. # a parameter sets the value.
  405. #
  406. # Example:
  407. #
  408. # mail = Mail::Message.new('To: mikel\r\nFrom: you')
  409. # mail.header #=> #<Mail::Header:0x13ce14 @raw_source="To: mikel\r\nFr...
  410. #
  411. # mail.header #=> nil
  412. # mail.header 'To: mikel\r\nFrom: you'
  413. # mail.header #=> #<Mail::Header:0x13ce14 @raw_source="To: mikel\r\nFr...
  414. 1 def header(value = nil)
  415. value ? self.header = value : @header
  416. end
  417. # Provides a way to set custom headers, by passing in a hash
  418. 1 def headers(hash = {})
  419. hash.each_pair do |k,v|
  420. header[k] = v
  421. end
  422. end
  423. # Returns a list of parser errors on the header, each field that had an error
  424. # will be reparsed as an unstructured field to preserve the data inside, but
  425. # will not be used for further processing.
  426. #
  427. # It returns a nested array of [field_name, value, original_error_message]
  428. # per error found.
  429. #
  430. # Example:
  431. #
  432. # message = Mail.new("Content-Transfer-Encoding: weirdo\r\n")
  433. # message.errors.size #=> 1
  434. # message.errors.first[0] #=> "Content-Transfer-Encoding"
  435. # message.errors.first[1] #=> "weirdo"
  436. # message.errors.first[3] #=> <The original error message exception>
  437. #
  438. # This is a good first defence on detecting spam by the way. Some spammers send
  439. # invalid emails to try and get email parsers to give up parsing them.
  440. 1 def errors
  441. header.errors
  442. end
  443. # Returns the Bcc value of the mail object as an array of strings of
  444. # address specs.
  445. #
  446. # Example:
  447. #
  448. # mail.bcc = 'Mikel <mikel@test.lindsaar.net>'
  449. # mail.bcc #=> ['mikel@test.lindsaar.net']
  450. # mail.bcc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  451. # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  452. #
  453. # Also allows you to set the value by passing a value as a parameter
  454. #
  455. # Example:
  456. #
  457. # mail.bcc 'Mikel <mikel@test.lindsaar.net>'
  458. # mail.bcc #=> ['mikel@test.lindsaar.net']
  459. #
  460. # Additionally, you can append new addresses to the returned Array like
  461. # object.
  462. #
  463. # Example:
  464. #
  465. # mail.bcc 'Mikel <mikel@test.lindsaar.net>'
  466. # mail.bcc << 'ada@test.lindsaar.net'
  467. # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  468. 1 def bcc( val = nil )
  469. default :bcc, val
  470. end
  471. # Sets the Bcc value of the mail object, pass in a string of the field
  472. #
  473. # Example:
  474. #
  475. # mail.bcc = 'Mikel <mikel@test.lindsaar.net>'
  476. # mail.bcc #=> ['mikel@test.lindsaar.net']
  477. # mail.bcc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  478. # mail.bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  479. 1 def bcc=( val )
  480. header[:bcc] = val
  481. end
  482. # Returns the Cc value of the mail object as an array of strings of
  483. # address specs.
  484. #
  485. # Example:
  486. #
  487. # mail.cc = 'Mikel <mikel@test.lindsaar.net>'
  488. # mail.cc #=> ['mikel@test.lindsaar.net']
  489. # mail.cc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  490. # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  491. #
  492. # Also allows you to set the value by passing a value as a parameter
  493. #
  494. # Example:
  495. #
  496. # mail.cc 'Mikel <mikel@test.lindsaar.net>'
  497. # mail.cc #=> ['mikel@test.lindsaar.net']
  498. #
  499. # Additionally, you can append new addresses to the returned Array like
  500. # object.
  501. #
  502. # Example:
  503. #
  504. # mail.cc 'Mikel <mikel@test.lindsaar.net>'
  505. # mail.cc << 'ada@test.lindsaar.net'
  506. # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  507. 1 def cc( val = nil )
  508. default :cc, val
  509. end
  510. # Sets the Cc value of the mail object, pass in a string of the field
  511. #
  512. # Example:
  513. #
  514. # mail.cc = 'Mikel <mikel@test.lindsaar.net>'
  515. # mail.cc #=> ['mikel@test.lindsaar.net']
  516. # mail.cc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  517. # mail.cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  518. 1 def cc=( val )
  519. header[:cc] = val
  520. end
  521. 1 def comments( val = nil )
  522. default :comments, val
  523. end
  524. 1 def comments=( val )
  525. header[:comments] = val
  526. end
  527. 1 def content_description( val = nil )
  528. default :content_description, val
  529. end
  530. 1 def content_description=( val )
  531. header[:content_description] = val
  532. end
  533. 1 def content_disposition( val = nil )
  534. default :content_disposition, val
  535. end
  536. 1 def content_disposition=( val )
  537. header[:content_disposition] = val
  538. end
  539. 1 def content_id( val = nil )
  540. default :content_id, val
  541. end
  542. 1 def content_id=( val )
  543. header[:content_id] = val
  544. end
  545. 1 def content_location( val = nil )
  546. default :content_location, val
  547. end
  548. 1 def content_location=( val )
  549. header[:content_location] = val
  550. end
  551. 1 def content_transfer_encoding( val = nil )
  552. default :content_transfer_encoding, val
  553. end
  554. 1 def content_transfer_encoding=( val )
  555. header[:content_transfer_encoding] = val
  556. end
  557. 1 def content_type( val = nil )
  558. default :content_type, val
  559. end
  560. 1 def content_type=( val )
  561. header[:content_type] = val
  562. end
  563. 1 def date( val = nil )
  564. default :date, val
  565. end
  566. 1 def date=( val )
  567. header[:date] = val
  568. end
  569. 1 def transport_encoding( val = nil)
  570. if val
  571. self.transport_encoding = val
  572. else
  573. @transport_encoding
  574. end
  575. end
  576. 1 def transport_encoding=( val )
  577. @transport_encoding = Mail::Encodings.get_encoding(val)
  578. end
  579. # Returns the From value of the mail object as an array of strings of
  580. # address specs.
  581. #
  582. # Example:
  583. #
  584. # mail.from = 'Mikel <mikel@test.lindsaar.net>'
  585. # mail.from #=> ['mikel@test.lindsaar.net']
  586. # mail.from = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  587. # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  588. #
  589. # Also allows you to set the value by passing a value as a parameter
  590. #
  591. # Example:
  592. #
  593. # mail.from 'Mikel <mikel@test.lindsaar.net>'
  594. # mail.from #=> ['mikel@test.lindsaar.net']
  595. #
  596. # Additionally, you can append new addresses to the returned Array like
  597. # object.
  598. #
  599. # Example:
  600. #
  601. # mail.from 'Mikel <mikel@test.lindsaar.net>'
  602. # mail.from << 'ada@test.lindsaar.net'
  603. # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  604. 1 def from( val = nil )
  605. default :from, val
  606. end
  607. # Sets the From value of the mail object, pass in a string of the field
  608. #
  609. # Example:
  610. #
  611. # mail.from = 'Mikel <mikel@test.lindsaar.net>'
  612. # mail.from #=> ['mikel@test.lindsaar.net']
  613. # mail.from = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  614. # mail.from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  615. 1 def from=( val )
  616. header[:from] = val
  617. end
  618. 1 def in_reply_to( val = nil )
  619. default :in_reply_to, val
  620. end
  621. 1 def in_reply_to=( val )
  622. header[:in_reply_to] = val
  623. end
  624. 1 def keywords( val = nil )
  625. default :keywords, val
  626. end
  627. 1 def keywords=( val )
  628. header[:keywords] = val
  629. end
  630. # Returns the Message-ID of the mail object. Note, per RFC 2822 the Message ID
  631. # consists of what is INSIDE the < > usually seen in the mail header, so this method
  632. # will return only what is inside.
  633. #
  634. # Example:
  635. #
  636. # mail.message_id = '<1234@message.id>'
  637. # mail.message_id #=> '1234@message.id'
  638. #
  639. # Also allows you to set the Message-ID by passing a string as a parameter
  640. #
  641. # mail.message_id '<1234@message.id>'
  642. # mail.message_id #=> '1234@message.id'
  643. 1 def message_id( val = nil )
  644. default :message_id, val
  645. end
  646. # Sets the Message-ID. Note, per RFC 2822 the Message ID consists of what is INSIDE
  647. # the < > usually seen in the mail header, so this method will return only what is inside.
  648. #
  649. # mail.message_id = '<1234@message.id>'
  650. # mail.message_id #=> '1234@message.id'
  651. 1 def message_id=( val )
  652. header[:message_id] = val
  653. end
  654. # Returns the MIME version of the email as a string
  655. #
  656. # Example:
  657. #
  658. # mail.mime_version = '1.0'
  659. # mail.mime_version #=> '1.0'
  660. #
  661. # Also allows you to set the MIME version by passing a string as a parameter.
  662. #
  663. # Example:
  664. #
  665. # mail.mime_version '1.0'
  666. # mail.mime_version #=> '1.0'
  667. 1 def mime_version( val = nil )
  668. default :mime_version, val
  669. end
  670. # Sets the MIME version of the email by accepting a string
  671. #
  672. # Example:
  673. #
  674. # mail.mime_version = '1.0'
  675. # mail.mime_version #=> '1.0'
  676. 1 def mime_version=( val )
  677. header[:mime_version] = val
  678. end
  679. 1 def received( val = nil )
  680. if val
  681. header[:received] = val
  682. else
  683. header[:received]
  684. end
  685. end
  686. 1 def received=( val )
  687. header[:received] = val
  688. end
  689. 1 def references( val = nil )
  690. default :references, val
  691. end
  692. 1 def references=( val )
  693. header[:references] = val
  694. end
  695. # Returns the Reply-To value of the mail object as an array of strings of
  696. # address specs.
  697. #
  698. # Example:
  699. #
  700. # mail.reply_to = 'Mikel <mikel@test.lindsaar.net>'
  701. # mail.reply_to #=> ['mikel@test.lindsaar.net']
  702. # mail.reply_to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  703. # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  704. #
  705. # Also allows you to set the value by passing a value as a parameter
  706. #
  707. # Example:
  708. #
  709. # mail.reply_to 'Mikel <mikel@test.lindsaar.net>'
  710. # mail.reply_to #=> ['mikel@test.lindsaar.net']
  711. #
  712. # Additionally, you can append new addresses to the returned Array like
  713. # object.
  714. #
  715. # Example:
  716. #
  717. # mail.reply_to 'Mikel <mikel@test.lindsaar.net>'
  718. # mail.reply_to << 'ada@test.lindsaar.net'
  719. # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  720. 1 def reply_to( val = nil )
  721. default :reply_to, val
  722. end
  723. # Sets the Reply-To value of the mail object, pass in a string of the field
  724. #
  725. # Example:
  726. #
  727. # mail.reply_to = 'Mikel <mikel@test.lindsaar.net>'
  728. # mail.reply_to #=> ['mikel@test.lindsaar.net']
  729. # mail.reply_to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  730. # mail.reply_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  731. 1 def reply_to=( val )
  732. header[:reply_to] = val
  733. end
  734. # Returns the Resent-Bcc value of the mail object as an array of strings of
  735. # address specs.
  736. #
  737. # Example:
  738. #
  739. # mail.resent_bcc = 'Mikel <mikel@test.lindsaar.net>'
  740. # mail.resent_bcc #=> ['mikel@test.lindsaar.net']
  741. # mail.resent_bcc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  742. # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  743. #
  744. # Also allows you to set the value by passing a value as a parameter
  745. #
  746. # Example:
  747. #
  748. # mail.resent_bcc 'Mikel <mikel@test.lindsaar.net>'
  749. # mail.resent_bcc #=> ['mikel@test.lindsaar.net']
  750. #
  751. # Additionally, you can append new addresses to the returned Array like
  752. # object.
  753. #
  754. # Example:
  755. #
  756. # mail.resent_bcc 'Mikel <mikel@test.lindsaar.net>'
  757. # mail.resent_bcc << 'ada@test.lindsaar.net'
  758. # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  759. 1 def resent_bcc( val = nil )
  760. default :resent_bcc, val
  761. end
  762. # Sets the Resent-Bcc value of the mail object, pass in a string of the field
  763. #
  764. # Example:
  765. #
  766. # mail.resent_bcc = 'Mikel <mikel@test.lindsaar.net>'
  767. # mail.resent_bcc #=> ['mikel@test.lindsaar.net']
  768. # mail.resent_bcc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  769. # mail.resent_bcc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  770. 1 def resent_bcc=( val )
  771. header[:resent_bcc] = val
  772. end
  773. # Returns the Resent-Cc value of the mail object as an array of strings of
  774. # address specs.
  775. #
  776. # Example:
  777. #
  778. # mail.resent_cc = 'Mikel <mikel@test.lindsaar.net>'
  779. # mail.resent_cc #=> ['mikel@test.lindsaar.net']
  780. # mail.resent_cc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  781. # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  782. #
  783. # Also allows you to set the value by passing a value as a parameter
  784. #
  785. # Example:
  786. #
  787. # mail.resent_cc 'Mikel <mikel@test.lindsaar.net>'
  788. # mail.resent_cc #=> ['mikel@test.lindsaar.net']
  789. #
  790. # Additionally, you can append new addresses to the returned Array like
  791. # object.
  792. #
  793. # Example:
  794. #
  795. # mail.resent_cc 'Mikel <mikel@test.lindsaar.net>'
  796. # mail.resent_cc << 'ada@test.lindsaar.net'
  797. # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  798. 1 def resent_cc( val = nil )
  799. default :resent_cc, val
  800. end
  801. # Sets the Resent-Cc value of the mail object, pass in a string of the field
  802. #
  803. # Example:
  804. #
  805. # mail.resent_cc = 'Mikel <mikel@test.lindsaar.net>'
  806. # mail.resent_cc #=> ['mikel@test.lindsaar.net']
  807. # mail.resent_cc = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  808. # mail.resent_cc #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  809. 1 def resent_cc=( val )
  810. header[:resent_cc] = val
  811. end
  812. 1 def resent_date( val = nil )
  813. default :resent_date, val
  814. end
  815. 1 def resent_date=( val )
  816. header[:resent_date] = val
  817. end
  818. # Returns the Resent-From value of the mail object as an array of strings of
  819. # address specs.
  820. #
  821. # Example:
  822. #
  823. # mail.resent_from = 'Mikel <mikel@test.lindsaar.net>'
  824. # mail.resent_from #=> ['mikel@test.lindsaar.net']
  825. # mail.resent_from = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  826. # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  827. #
  828. # Also allows you to set the value by passing a value as a parameter
  829. #
  830. # Example:
  831. #
  832. # mail.resent_from ['Mikel <mikel@test.lindsaar.net>']
  833. # mail.resent_from #=> 'mikel@test.lindsaar.net'
  834. #
  835. # Additionally, you can append new addresses to the returned Array like
  836. # object.
  837. #
  838. # Example:
  839. #
  840. # mail.resent_from 'Mikel <mikel@test.lindsaar.net>'
  841. # mail.resent_from << 'ada@test.lindsaar.net'
  842. # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  843. 1 def resent_from( val = nil )
  844. default :resent_from, val
  845. end
  846. # Sets the Resent-From value of the mail object, pass in a string of the field
  847. #
  848. # Example:
  849. #
  850. # mail.resent_from = 'Mikel <mikel@test.lindsaar.net>'
  851. # mail.resent_from #=> ['mikel@test.lindsaar.net']
  852. # mail.resent_from = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  853. # mail.resent_from #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  854. 1 def resent_from=( val )
  855. header[:resent_from] = val
  856. end
  857. 1 def resent_message_id( val = nil )
  858. default :resent_message_id, val
  859. end
  860. 1 def resent_message_id=( val )
  861. header[:resent_message_id] = val
  862. end
  863. # Returns the Resent-Sender value of the mail object, as a single string of an address
  864. # spec. A sender per RFC 2822 must be a single address, so you can not append to
  865. # this address.
  866. #
  867. # Example:
  868. #
  869. # mail.resent_sender = 'Mikel <mikel@test.lindsaar.net>'
  870. # mail.resent_sender #=> 'mikel@test.lindsaar.net'
  871. #
  872. # Also allows you to set the value by passing a value as a parameter
  873. #
  874. # Example:
  875. #
  876. # mail.resent_sender 'Mikel <mikel@test.lindsaar.net>'
  877. # mail.resent_sender #=> 'mikel@test.lindsaar.net'
  878. 1 def resent_sender( val = nil )
  879. default :resent_sender, val
  880. end
  881. # Sets the Resent-Sender value of the mail object, pass in a string of the field
  882. #
  883. # Example:
  884. #
  885. # mail.resent_sender = 'Mikel <mikel@test.lindsaar.net>'
  886. # mail.resent_sender #=> 'mikel@test.lindsaar.net'
  887. 1 def resent_sender=( val )
  888. header[:resent_sender] = val
  889. end
  890. # Returns the Resent-To value of the mail object as an array of strings of
  891. # address specs.
  892. #
  893. # Example:
  894. #
  895. # mail.resent_to = 'Mikel <mikel@test.lindsaar.net>'
  896. # mail.resent_to #=> ['mikel@test.lindsaar.net']
  897. # mail.resent_to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  898. # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  899. #
  900. # Also allows you to set the value by passing a value as a parameter
  901. #
  902. # Example:
  903. #
  904. # mail.resent_to 'Mikel <mikel@test.lindsaar.net>'
  905. # mail.resent_to #=> ['mikel@test.lindsaar.net']
  906. #
  907. # Additionally, you can append new addresses to the returned Array like
  908. # object.
  909. #
  910. # Example:
  911. #
  912. # mail.resent_to 'Mikel <mikel@test.lindsaar.net>'
  913. # mail.resent_to << 'ada@test.lindsaar.net'
  914. # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  915. 1 def resent_to( val = nil )
  916. default :resent_to, val
  917. end
  918. # Sets the Resent-To value of the mail object, pass in a string of the field
  919. #
  920. # Example:
  921. #
  922. # mail.resent_to = 'Mikel <mikel@test.lindsaar.net>'
  923. # mail.resent_to #=> ['mikel@test.lindsaar.net']
  924. # mail.resent_to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  925. # mail.resent_to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  926. 1 def resent_to=( val )
  927. header[:resent_to] = val
  928. end
  929. # Returns the return path of the mail object, or sets it if you pass a string
  930. 1 def return_path( val = nil )
  931. default :return_path, val
  932. end
  933. # Sets the return path of the object
  934. 1 def return_path=( val )
  935. header[:return_path] = val
  936. end
  937. # Returns the Sender value of the mail object, as a single string of an address
  938. # spec. A sender per RFC 2822 must be a single address.
  939. #
  940. # Example:
  941. #
  942. # mail.sender = 'Mikel <mikel@test.lindsaar.net>'
  943. # mail.sender #=> 'mikel@test.lindsaar.net'
  944. #
  945. # Also allows you to set the value by passing a value as a parameter
  946. #
  947. # Example:
  948. #
  949. # mail.sender 'Mikel <mikel@test.lindsaar.net>'
  950. # mail.sender #=> 'mikel@test.lindsaar.net'
  951. 1 def sender( val = nil )
  952. default :sender, val
  953. end
  954. # Sets the Sender value of the mail object, pass in a string of the field
  955. #
  956. # Example:
  957. #
  958. # mail.sender = 'Mikel <mikel@test.lindsaar.net>'
  959. # mail.sender #=> 'mikel@test.lindsaar.net'
  960. 1 def sender=( val )
  961. header[:sender] = val
  962. end
  963. # Returns the SMTP Envelope From value of the mail object, as a single
  964. # string of an address spec.
  965. #
  966. # Defaults to Return-Path, Sender, or the first From address.
  967. #
  968. # Example:
  969. #
  970. # mail.smtp_envelope_from = 'Mikel <mikel@test.lindsaar.net>'
  971. # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'
  972. #
  973. # Also allows you to set the value by passing a value as a parameter
  974. #
  975. # Example:
  976. #
  977. # mail.smtp_envelope_from 'Mikel <mikel@test.lindsaar.net>'
  978. # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'
  979. 1 def smtp_envelope_from( val = nil )
  980. if val
  981. self.smtp_envelope_from = val
  982. else
  983. @smtp_envelope_from || return_path || sender || from_addrs.first
  984. end
  985. end
  986. # Sets the From address on the SMTP Envelope.
  987. #
  988. # Example:
  989. #
  990. # mail.smtp_envelope_from = 'Mikel <mikel@test.lindsaar.net>'
  991. # mail.smtp_envelope_from #=> 'mikel@test.lindsaar.net'
  992. 1 def smtp_envelope_from=( val )
  993. @smtp_envelope_from = val
  994. end
  995. # Returns the SMTP Envelope To value of the mail object.
  996. #
  997. # Defaults to #destinations: To, Cc, and Bcc addresses.
  998. #
  999. # Example:
  1000. #
  1001. # mail.smtp_envelope_to = 'Mikel <mikel@test.lindsaar.net>'
  1002. # mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net'
  1003. #
  1004. # Also allows you to set the value by passing a value as a parameter
  1005. #
  1006. # Example:
  1007. #
  1008. # mail.smtp_envelope_to ['Mikel <mikel@test.lindsaar.net>', 'Lindsaar <lindsaar@test.lindsaar.net>']
  1009. # mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', 'lindsaar@test.lindsaar.net']
  1010. 1 def smtp_envelope_to( val = nil )
  1011. if val
  1012. self.smtp_envelope_to = val
  1013. else
  1014. @smtp_envelope_to || destinations
  1015. end
  1016. end
  1017. # Sets the To addresses on the SMTP Envelope.
  1018. #
  1019. # Example:
  1020. #
  1021. # mail.smtp_envelope_to = 'Mikel <mikel@test.lindsaar.net>'
  1022. # mail.smtp_envelope_to #=> 'mikel@test.lindsaar.net'
  1023. #
  1024. # mail.smtp_envelope_to = ['Mikel <mikel@test.lindsaar.net>', 'Lindsaar <lindsaar@test.lindsaar.net>']
  1025. # mail.smtp_envelope_to #=> ['mikel@test.lindsaar.net', 'lindsaar@test.lindsaar.net']
  1026. 1 def smtp_envelope_to=( val )
  1027. @smtp_envelope_to =
  1028. case val
  1029. when Array, NilClass
  1030. val
  1031. else
  1032. [val]
  1033. end
  1034. end
  1035. # Returns the decoded value of the subject field, as a single string.
  1036. #
  1037. # Example:
  1038. #
  1039. # mail.subject = "G'Day mate"
  1040. # mail.subject #=> "G'Day mate"
  1041. # mail.subject = '=?UTF-8?Q?This_is_=E3=81=82_string?='
  1042. # mail.subject #=> "This is ��� string"
  1043. #
  1044. # Also allows you to set the value by passing a value as a parameter
  1045. #
  1046. # Example:
  1047. #
  1048. # mail.subject "G'Day mate"
  1049. # mail.subject #=> "G'Day mate"
  1050. 1 def subject( val = nil )
  1051. default :subject, val
  1052. end
  1053. # Sets the Subject value of the mail object, pass in a string of the field
  1054. #
  1055. # Example:
  1056. #
  1057. # mail.subject = '=?UTF-8?Q?This_is_=E3=81=82_string?='
  1058. # mail.subject #=> "This is ��� string"
  1059. 1 def subject=( val )
  1060. header[:subject] = val
  1061. end
  1062. # Returns the To value of the mail object as an array of strings of
  1063. # address specs.
  1064. #
  1065. # Example:
  1066. #
  1067. # mail.to = 'Mikel <mikel@test.lindsaar.net>'
  1068. # mail.to #=> ['mikel@test.lindsaar.net']
  1069. # mail.to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  1070. # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  1071. #
  1072. # Also allows you to set the value by passing a value as a parameter
  1073. #
  1074. # Example:
  1075. #
  1076. # mail.to 'Mikel <mikel@test.lindsaar.net>'
  1077. # mail.to #=> ['mikel@test.lindsaar.net']
  1078. #
  1079. # Additionally, you can append new addresses to the returned Array like
  1080. # object.
  1081. #
  1082. # Example:
  1083. #
  1084. # mail.to 'Mikel <mikel@test.lindsaar.net>'
  1085. # mail.to << 'ada@test.lindsaar.net'
  1086. # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  1087. 1 def to( val = nil )
  1088. default :to, val
  1089. end
  1090. # Sets the To value of the mail object, pass in a string of the field
  1091. #
  1092. # Example:
  1093. #
  1094. # mail.to = 'Mikel <mikel@test.lindsaar.net>'
  1095. # mail.to #=> ['mikel@test.lindsaar.net']
  1096. # mail.to = 'Mikel <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
  1097. # mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
  1098. 1 def to=( val )
  1099. header[:to] = val
  1100. end
  1101. # Returns the default value of the field requested as a symbol.
  1102. #
  1103. # Each header field has a :default method which returns the most common use case for
  1104. # that field, for example, the date field types will return a DateTime object when
  1105. # sent :default, the subject, or unstructured fields will return a decoded string of
  1106. # their value, the address field types will return a single addr_spec or an array of
  1107. # addr_specs if there is more than one.
  1108. 1 def default( sym, val = nil )
  1109. if val
  1110. header[sym] = val
  1111. elsif field = header[sym]
  1112. field.default
  1113. end
  1114. end
  1115. # Sets the body object of the message object.
  1116. #
  1117. # Example:
  1118. #
  1119. # mail.body = 'This is the body'
  1120. # mail.body #=> #<Mail::Body:0x13919c @raw_source="This is the bo...
  1121. #
  1122. # You can also reset the body of an Message object by setting body to nil
  1123. #
  1124. # Example:
  1125. #
  1126. # mail.body = 'this is the body'
  1127. # mail.body.encoded #=> 'this is the body'
  1128. # mail.body = nil
  1129. # mail.body.encoded #=> ''
  1130. #
  1131. # If you try and set the body of an email that is a multipart email, then instead
  1132. # of deleting all the parts of your email, mail will add a text/plain part to
  1133. # your email:
  1134. #
  1135. # mail.add_file 'somefilename.png'
  1136. # mail.parts.length #=> 1
  1137. # mail.body = "This is a body"
  1138. # mail.parts.length #=> 2
  1139. # mail.parts.last.content_type.content_type #=> 'This is a body'
  1140. 1 def body=(value)
  1141. body_lazy(value)
  1142. end
  1143. # Returns the body of the message object. Or, if passed
  1144. # a parameter sets the value.
  1145. #
  1146. # Example:
  1147. #
  1148. # mail = Mail::Message.new('To: mikel\r\n\r\nThis is the body')
  1149. # mail.body #=> #<Mail::Body:0x13919c @raw_source="This is the bo...
  1150. #
  1151. # mail.body 'This is another body'
  1152. # mail.body #=> #<Mail::Body:0x13919c @raw_source="This is anothe...
  1153. 1 def body(value = nil)
  1154. if value
  1155. self.body = value
  1156. else
  1157. process_body_raw if @body_raw
  1158. @body
  1159. end
  1160. end
  1161. 1 def body_encoding(value = nil)
  1162. if value.nil?
  1163. body.encoding
  1164. else
  1165. body.encoding = value
  1166. end
  1167. end
  1168. 1 def body_encoding=(value)
  1169. body.encoding = value
  1170. end
  1171. # Returns the list of addresses this message should be sent to by
  1172. # collecting the addresses off the to, cc and bcc fields.
  1173. #
  1174. # Example:
  1175. #
  1176. # mail.to = 'mikel@test.lindsaar.net'
  1177. # mail.cc = 'sam@test.lindsaar.net'
  1178. # mail.bcc = 'bob@test.lindsaar.net'
  1179. # mail.destinations.length #=> 3
  1180. # mail.destinations.first #=> 'mikel@test.lindsaar.net'
  1181. 1 def destinations
  1182. [to_addrs, cc_addrs, bcc_addrs].compact.flatten
  1183. end
  1184. # Returns an array of addresses (the encoded value) in the From field,
  1185. # if no From field, returns an empty array
  1186. 1 def from_addrs
  1187. from ? [from].flatten : []
  1188. end
  1189. # Returns an array of addresses (the encoded value) in the To field,
  1190. # if no To field, returns an empty array
  1191. 1 def to_addrs
  1192. to ? [to].flatten : []
  1193. end
  1194. # Returns an array of addresses (the encoded value) in the Cc field,
  1195. # if no Cc field, returns an empty array
  1196. 1 def cc_addrs
  1197. cc ? [cc].flatten : []
  1198. end
  1199. # Returns an array of addresses (the encoded value) in the Bcc field,
  1200. # if no Bcc field, returns an empty array
  1201. 1 def bcc_addrs
  1202. bcc ? [bcc].flatten : []
  1203. end
  1204. # Allows you to add an arbitrary header
  1205. #
  1206. # Example:
  1207. #
  1208. # mail['foo'] = '1234'
  1209. # mail['foo'].to_s #=> '1234'
  1210. 1 def []=(name, value)
  1211. if name.to_s == 'body'
  1212. self.body = value
  1213. elsif name.to_s =~ /content[-_]type/i
  1214. header[name] = value
  1215. elsif name.to_s == 'charset'
  1216. self.charset = value
  1217. else
  1218. header[name] = value
  1219. end
  1220. end
  1221. # Allows you to read an arbitrary header
  1222. #
  1223. # Example:
  1224. #
  1225. # mail['foo'] = '1234'
  1226. # mail['foo'].to_s #=> '1234'
  1227. 1 def [](name)
  1228. header[underscoreize(name)]
  1229. end
  1230. # Method Missing in this implementation allows you to set any of the
  1231. # standard fields directly as you would the "to", "subject" etc.
  1232. #
  1233. # Those fields used most often (to, subject et al) are given their
  1234. # own method for ease of documentation and also to avoid the hook
  1235. # call to method missing.
  1236. #
  1237. # This will only catch the known fields listed in:
  1238. #
  1239. # Mail::Field::KNOWN_FIELDS
  1240. #
  1241. # as per RFC 2822, any ruby string or method name could pretty much
  1242. # be a field name, so we don't want to just catch ANYTHING sent to
  1243. # a message object and interpret it as a header.
  1244. #
  1245. # This method provides all three types of header call to set, read
  1246. # and explicitly set with the = operator
  1247. #
  1248. # Examples:
  1249. #
  1250. # mail.comments = 'These are some comments'
  1251. # mail.comments #=> 'These are some comments'
  1252. #
  1253. # mail.comments 'These are other comments'
  1254. # mail.comments #=> 'These are other comments'
  1255. #
  1256. #
  1257. # mail.date = 'Tue, 1 Jul 2003 10:52:37 +0200'
  1258. # mail.date.to_s #=> 'Tue, 1 Jul 2003 10:52:37 +0200'
  1259. #
  1260. # mail.date 'Tue, 1 Jul 2003 10:52:37 +0200'
  1261. # mail.date.to_s #=> 'Tue, 1 Jul 2003 10:52:37 +0200'
  1262. #
  1263. #
  1264. # mail.resent_msg_id = '<1234@resent_msg_id.lindsaar.net>'
  1265. # mail.resent_msg_id #=> '<1234@resent_msg_id.lindsaar.net>'
  1266. #
  1267. # mail.resent_msg_id '<4567@resent_msg_id.lindsaar.net>'
  1268. # mail.resent_msg_id #=> '<4567@resent_msg_id.lindsaar.net>'
  1269. 1 def method_missing(name, *args, &block)
  1270. #:nodoc:
  1271. # Only take the structured fields, as we could take _anything_ really
  1272. # as it could become an optional field... "but therin lies the dark side"
  1273. field_name = underscoreize(name).chomp("=")
  1274. if Mail::Field::KNOWN_FIELDS.include?(field_name)
  1275. if args.empty?
  1276. header[field_name]
  1277. else
  1278. header[field_name] = args.first
  1279. end
  1280. else
  1281. super # otherwise pass it on
  1282. end
  1283. #:startdoc:
  1284. end
  1285. # Returns an FieldList of all the fields in the header in the order that
  1286. # they appear in the header
  1287. 1 def header_fields
  1288. header.fields
  1289. end
  1290. # Returns true if the message has a message ID field, the field may or may
  1291. # not have a value, but the field exists or not.
  1292. 1 def has_message_id?
  1293. header.has_message_id?
  1294. end
  1295. # Returns true if the message has a Date field, the field may or may
  1296. # not have a value, but the field exists or not.
  1297. 1 def has_date?
  1298. header.has_date?
  1299. end
  1300. # Returns true if the message has a Mime-Version field, the field may or may
  1301. # not have a value, but the field exists or not.
  1302. 1 def has_mime_version?
  1303. header.has_mime_version?
  1304. end
  1305. 1 def has_content_type?
  1306. tmp = header[:content_type].main_type rescue nil
  1307. !!tmp
  1308. end
  1309. 1 def has_charset?
  1310. tmp = header[:content_type].parameters rescue nil
  1311. !!(has_content_type? && tmp && tmp['charset'])
  1312. end
  1313. 1 def has_content_transfer_encoding?
  1314. header[:content_transfer_encoding] && Utilities.blank?(header[:content_transfer_encoding].errors)
  1315. end
  1316. 1 def has_transfer_encoding? # :nodoc:
  1317. warn(":has_transfer_encoding? is deprecated in Mail 1.4.3. Please use has_content_transfer_encoding?\n#{caller}")
  1318. has_content_transfer_encoding?
  1319. end
  1320. # Creates a new empty Message-ID field and inserts it in the correct order
  1321. # into the Header. The MessageIdField object will automatically generate
  1322. # a unique message ID if you try and encode it or output it to_s without
  1323. # specifying a message id.
  1324. #
  1325. # It will preserve the message ID you specify if you do.
  1326. 1 def add_message_id(msg_id_val = '')
  1327. header['message-id'] = msg_id_val
  1328. end
  1329. # Creates a new empty Date field and inserts it in the correct order
  1330. # into the Header. The DateField object will automatically generate
  1331. # DateTime.now's date if you try and encode it or output it to_s without
  1332. # specifying a date yourself.
  1333. #
  1334. # It will preserve any date you specify if you do.
  1335. 1 def add_date(date_val = '')
  1336. header['date'] = date_val
  1337. end
  1338. # Creates a new empty Mime Version field and inserts it in the correct order
  1339. # into the Header. The MimeVersion object will automatically generate
  1340. # set itself to '1.0' if you try and encode it or output it to_s without
  1341. # specifying a version yourself.
  1342. #
  1343. # It will preserve any date you specify if you do.
  1344. 1 def add_mime_version(ver_val = '')
  1345. header['mime-version'] = ver_val
  1346. end
  1347. # Adds a content type and charset if the body is US-ASCII
  1348. #
  1349. # Otherwise raises a warning
  1350. 1 def add_content_type
  1351. header[:content_type] = 'text/plain'
  1352. end
  1353. # Adds a content type and charset if the body is US-ASCII
  1354. #
  1355. # Otherwise raises a warning
  1356. 1 def add_charset
  1357. if !body.empty?
  1358. # Only give a warning if this isn't an attachment, has non US-ASCII and the user
  1359. # has not specified an encoding explicitly.
  1360. if @defaulted_charset && !body.raw_source.ascii_only? && !self.attachment?
  1361. warning = "Non US-ASCII detected and no charset defined.\nDefaulting to UTF-8, set your own if this is incorrect.\n"
  1362. warn(warning)
  1363. end
  1364. header[:content_type].parameters['charset'] = @charset
  1365. end
  1366. end
  1367. # Adds a content transfer encoding
  1368. 1 def add_content_transfer_encoding
  1369. header[:content_transfer_encoding] ||= body.default_encoding
  1370. end
  1371. 1 def add_transfer_encoding # :nodoc:
  1372. warn(":add_transfer_encoding is deprecated in Mail 1.4.3. Please use add_content_transfer_encoding\n#{caller}")
  1373. add_content_transfer_encoding
  1374. end
  1375. 1 def transfer_encoding # :nodoc:
  1376. warn(":transfer_encoding is deprecated in Mail 1.4.3. Please use content_transfer_encoding\n#{caller}")
  1377. content_transfer_encoding
  1378. end
  1379. # Returns the MIME media type of part we are on, this is taken from the content-type header
  1380. 1 def mime_type
  1381. has_content_type? ? header[:content_type].string : nil rescue nil
  1382. end
  1383. 1 def message_content_type
  1384. warn(":message_content_type is deprecated in Mail 1.4.3. Please use mime_type\n#{caller}")
  1385. mime_type
  1386. end
  1387. # Returns the character set defined in the content type field
  1388. 1 def charset
  1389. if @header
  1390. has_content_type? ? content_type_parameters['charset'] : @charset
  1391. else
  1392. @charset
  1393. end
  1394. end
  1395. # Sets the charset to the supplied value.
  1396. 1 def charset=(value)
  1397. @defaulted_charset = false
  1398. @charset = value
  1399. @header.charset = value
  1400. end
  1401. # Returns the main content type
  1402. 1 def main_type
  1403. has_content_type? ? header[:content_type].main_type : nil rescue nil
  1404. end
  1405. # Returns the sub content type
  1406. 1 def sub_type
  1407. has_content_type? ? header[:content_type].sub_type : nil rescue nil
  1408. end
  1409. # Returns the content type parameters
  1410. 1 def mime_parameters
  1411. warn(':mime_parameters is deprecated in Mail 1.4.3, please use :content_type_parameters instead')
  1412. content_type_parameters
  1413. end
  1414. # Returns the content type parameters
  1415. 1 def content_type_parameters
  1416. has_content_type? ? header[:content_type].parameters : nil rescue nil
  1417. end
  1418. # Returns true if the message is multipart
  1419. 1 def multipart?
  1420. has_content_type? ? !!(main_type =~ /^multipart$/i) : false
  1421. end
  1422. # Returns true if the message is a multipart/report
  1423. 1 def multipart_report?
  1424. multipart? && sub_type =~ /^report$/i
  1425. end
  1426. # Returns true if the message is a multipart/report; report-type=delivery-status;
  1427. 1 def delivery_status_report?
  1428. multipart_report? && content_type_parameters['report-type'] =~ /^delivery-status$/i
  1429. end
  1430. # returns the part in a multipart/report email that has the content-type delivery-status
  1431. 1 def delivery_status_part
  1432. unless defined? @delivery_status_part
  1433. @delivery_status_part =
  1434. if delivery_status_report?
  1435. parts.detect(&:delivery_status_report_part?)
  1436. end
  1437. end
  1438. @delivery_status_part
  1439. end
  1440. 1 def bounced?
  1441. delivery_status_part and delivery_status_part.bounced?
  1442. end
  1443. 1 def action
  1444. delivery_status_part and delivery_status_part.action
  1445. end
  1446. 1 def final_recipient
  1447. delivery_status_part and delivery_status_part.final_recipient
  1448. end
  1449. 1 def error_status
  1450. delivery_status_part and delivery_status_part.error_status
  1451. end
  1452. 1 def diagnostic_code
  1453. delivery_status_part and delivery_status_part.diagnostic_code
  1454. end
  1455. 1 def remote_mta
  1456. delivery_status_part and delivery_status_part.remote_mta
  1457. end
  1458. 1 def retryable?
  1459. delivery_status_part and delivery_status_part.retryable?
  1460. end
  1461. # Returns the current boundary for this message part
  1462. 1 def boundary
  1463. content_type_parameters ? content_type_parameters['boundary'] : nil
  1464. end
  1465. # Returns a parts list object of all the parts in the message
  1466. 1 def parts
  1467. body.parts
  1468. end
  1469. # Returns an AttachmentsList object, which holds all of the attachments in
  1470. # the receiver object (either the entire email or a part within) and all
  1471. # of its descendants.
  1472. #
  1473. # It also allows you to add attachments to the mail object directly, like so:
  1474. #
  1475. # mail.attachments['filename.jpg'] = File.read('/path/to/filename.jpg')
  1476. #
  1477. # If you do this, then Mail will take the file name and work out the MIME media type
  1478. # set the Content-Type, Content-Disposition, Content-Transfer-Encoding and
  1479. # base64 encode the contents of the attachment all for you.
  1480. #
  1481. # You can also specify overrides if you want by passing a hash instead of a string:
  1482. #
  1483. # mail.attachments['filename.jpg'] = {:mime_type => 'application/x-gzip',
  1484. # :content => File.read('/path/to/filename.jpg')}
  1485. #
  1486. # If you want to use a different encoding than Base64, you can pass an encoding in,
  1487. # but then it is up to you to pass in the content pre-encoded, and don't expect
  1488. # Mail to know how to decode this data:
  1489. #
  1490. # file_content = SpecialEncode(File.read('/path/to/filename.jpg'))
  1491. # mail.attachments['filename.jpg'] = {:mime_type => 'application/x-gzip',
  1492. # :encoding => 'SpecialEncoding',
  1493. # :content => file_content }
  1494. #
  1495. # You can also search for specific attachments:
  1496. #
  1497. # # By Filename
  1498. # mail.attachments['filename.jpg'] #=> Mail::Part object or nil
  1499. #
  1500. # # or by index
  1501. # mail.attachments[0] #=> Mail::Part (first attachment)
  1502. #
  1503. 1 def attachments
  1504. parts.attachments
  1505. end
  1506. 1 def has_attachments?
  1507. !attachments.empty?
  1508. end
  1509. # Accessor for html_part
  1510. 1 def html_part(&block)
  1511. if block_given?
  1512. self.html_part = Mail::Part.new(:content_type => 'text/html', &block)
  1513. else
  1514. @html_part || find_first_mime_type('text/html')
  1515. end
  1516. end
  1517. # Accessor for text_part
  1518. 1 def text_part(&block)
  1519. if block_given?
  1520. self.text_part = Mail::Part.new(:content_type => 'text/plain', &block)
  1521. else
  1522. @text_part || find_first_mime_type('text/plain')
  1523. end
  1524. end
  1525. # Helper to add a html part to a multipart/alternative email. If this and
  1526. # text_part are both defined in a message, then it will be a multipart/alternative
  1527. # message and set itself that way.
  1528. 1 def html_part=(msg)
  1529. # Assign the html part and set multipart/alternative if there's a text part.
  1530. if msg
  1531. msg = Mail::Part.new(:body => msg) unless msg.kind_of?(Mail::Message)
  1532. @html_part = msg
  1533. @html_part.content_type = 'text/html' unless @html_part.has_content_type?
  1534. add_multipart_alternate_header if text_part
  1535. add_part @html_part
  1536. # If nil, delete the html part and back out of multipart/alternative.
  1537. elsif @html_part
  1538. parts.delete_if { |p| p.object_id == @html_part.object_id }
  1539. @html_part = nil
  1540. if text_part
  1541. self.content_type = nil
  1542. body.boundary = nil
  1543. end
  1544. end
  1545. end
  1546. # Helper to add a text part to a multipart/alternative email. If this and
  1547. # html_part are both defined in a message, then it will be a multipart/alternative
  1548. # message and set itself that way.
  1549. 1 def text_part=(msg)
  1550. # Assign the text part and set multipart/alternative if there's an html part.
  1551. if msg
  1552. msg = Mail::Part.new(:body => msg) unless msg.kind_of?(Mail::Message)
  1553. @text_part = msg
  1554. @text_part.content_type = 'text/plain' unless @text_part.has_content_type?
  1555. add_multipart_alternate_header if html_part
  1556. add_part @text_part
  1557. # If nil, delete the text part and back out of multipart/alternative.
  1558. elsif @text_part
  1559. parts.delete_if { |p| p.object_id == @text_part.object_id }
  1560. @text_part = nil
  1561. if html_part
  1562. self.content_type = nil
  1563. body.boundary = nil
  1564. end
  1565. end
  1566. end
  1567. # Adds a part to the parts list or creates the part list
  1568. 1 def add_part(part)
  1569. if !body.multipart? && !Utilities.blank?(self.body.decoded)
  1570. @text_part = Mail::Part.new('Content-Type: text/plain;')
  1571. @text_part.body = body.decoded
  1572. self.body << @text_part
  1573. add_multipart_alternate_header
  1574. end
  1575. add_boundary
  1576. self.body << part
  1577. end
  1578. # Allows you to add a part in block form to an existing mail message object
  1579. #
  1580. # Example:
  1581. #
  1582. # mail = Mail.new do
  1583. # part :content_type => "multipart/alternative", :content_disposition => "inline" do |p|
  1584. # p.part :content_type => "text/plain", :body => "test text\nline #2"
  1585. # p.part :content_type => "text/html", :body => "<b>test</b> HTML<br/>\nline #2"
  1586. # end
  1587. # end
  1588. 1 def part(params = {})
  1589. new_part = Part.new(params)
  1590. yield new_part if block_given?
  1591. add_part(new_part)
  1592. end
  1593. # Adds a file to the message. You have two options with this method, you can
  1594. # just pass in the absolute path to the file you want and Mail will read the file,
  1595. # get the filename from the path you pass in and guess the MIME media type, or you
  1596. # can pass in the filename as a string, and pass in the file content as a blob.
  1597. #
  1598. # Example:
  1599. #
  1600. # m = Mail.new
  1601. # m.add_file('/path/to/filename.png')
  1602. #
  1603. # m = Mail.new
  1604. # m.add_file(:filename => 'filename.png', :content => File.read('/path/to/file.jpg'))
  1605. #
  1606. # Note also that if you add a file to an existing message, Mail will convert that message
  1607. # to a MIME multipart email, moving whatever plain text body you had into its own text
  1608. # plain part.
  1609. #
  1610. # Example:
  1611. #
  1612. # m = Mail.new do
  1613. # body 'this is some text'
  1614. # end
  1615. # m.multipart? #=> false
  1616. # m.add_file('/path/to/filename.png')
  1617. # m.multipart? #=> true
  1618. # m.parts.first.content_type.content_type #=> 'text/plain'
  1619. # m.parts.last.content_type.content_type #=> 'image/png'
  1620. #
  1621. # See also #attachments
  1622. 1 def add_file(values)
  1623. convert_to_multipart unless self.multipart? || Utilities.blank?(self.body.decoded)
  1624. add_multipart_mixed_header
  1625. if values.is_a?(String)
  1626. basename = File.basename(values)
  1627. filedata = File.open(values, 'rb') { |f| f.read }
  1628. else
  1629. basename = values[:filename]
  1630. filedata = values
  1631. end
  1632. self.attachments[basename] = filedata
  1633. end
  1634. 1 def convert_to_multipart
  1635. text = body.decoded
  1636. self.body = ''
  1637. text_part = Mail::Part.new({:content_type => 'text/plain;',
  1638. :body => text})
  1639. text_part.charset = charset unless @defaulted_charset
  1640. self.body << text_part
  1641. end
  1642. # Encodes the message, calls encode on all its parts, gets an email message
  1643. # ready to send
  1644. 1 def ready_to_send!
  1645. identify_and_set_transfer_encoding
  1646. parts.each do |part|
  1647. part.transport_encoding = transport_encoding
  1648. part.ready_to_send!
  1649. end
  1650. add_required_fields
  1651. end
  1652. 1 def encode!
  1653. warn("Deprecated in 1.1.0 in favour of :ready_to_send! as it is less confusing with encoding and decoding.")
  1654. ready_to_send!
  1655. end
  1656. # Outputs an encoded string representation of the mail message including
  1657. # all headers, attachments, etc. This is an encoded email in US-ASCII,
  1658. # so it is able to be directly sent to an email server.
  1659. 1 def encoded
  1660. ready_to_send!
  1661. buffer = header.encoded
  1662. buffer << "\r\n"
  1663. buffer << body.encoded(content_transfer_encoding)
  1664. buffer
  1665. end
  1666. 1 def without_attachments!
  1667. if has_attachments?
  1668. parts.delete_if { |p| p.attachment? }
  1669. reencoded = parts.empty? ? '' : body.encoded(content_transfer_encoding)
  1670. @body = nil # So the new parts won't be added to the existing body
  1671. self.body = reencoded
  1672. end
  1673. self
  1674. end
  1675. 1 def to_yaml(opts = {})
  1676. hash = {}
  1677. hash['headers'] = {}
  1678. header.fields.each do |field|
  1679. hash['headers'][field.name] = field.value
  1680. end
  1681. hash['delivery_handler'] = delivery_handler.to_s if delivery_handler
  1682. hash['transport_encoding'] = transport_encoding.to_s
  1683. special_variables = [:@header, :@delivery_handler, :@transport_encoding]
  1684. if multipart?
  1685. hash['multipart_body'] = []
  1686. body.parts.map { |part| hash['multipart_body'] << part.to_yaml }
  1687. special_variables.push(:@body, :@text_part, :@html_part)
  1688. end
  1689. (instance_variables.map(&:to_sym) - special_variables).each do |var|
  1690. hash[var.to_s] = instance_variable_get(var)
  1691. end
  1692. hash.to_yaml(opts)
  1693. end
  1694. 1 def self.from_yaml(str)
  1695. hash = YAML.load(str)
  1696. m = self.new(:headers => hash['headers'])
  1697. hash.delete('headers')
  1698. hash.each do |k,v|
  1699. case
  1700. when k == 'delivery_handler'
  1701. begin
  1702. m.delivery_handler = Object.const_get(v) unless Utilities.blank?(v)
  1703. rescue NameError
  1704. end
  1705. when k == 'transport_encoding'
  1706. m.transport_encoding(v)
  1707. when k == 'multipart_body'
  1708. v.map {|part| m.add_part Mail::Part.from_yaml(part) }
  1709. when k =~ /^@/
  1710. m.instance_variable_set(k.to_sym, v)
  1711. end
  1712. end
  1713. m
  1714. end
  1715. 1 def self.from_hash(hash)
  1716. Mail::Message.new(hash)
  1717. end
  1718. 1 def to_s
  1719. encoded
  1720. end
  1721. 1 def inspect
  1722. "#<#{self.class}:#{self.object_id}, Multipart: #{multipart?}, Headers: #{header.field_summary}>"
  1723. end
  1724. 1 def decoded
  1725. case
  1726. when self.text?
  1727. decode_body_as_text
  1728. when self.attachment?
  1729. decode_body
  1730. when !self.multipart?
  1731. body.decoded
  1732. else
  1733. raise NoMethodError, 'Can not decode an entire message, try calling #decoded on the various fields and body or parts if it is a multipart message.'
  1734. end
  1735. end
  1736. 1 def read
  1737. if self.attachment?
  1738. decode_body
  1739. else
  1740. raise NoMethodError, 'Can not call read on a part unless it is an attachment.'
  1741. end
  1742. end
  1743. 1 def decode_body
  1744. body.decoded
  1745. end
  1746. # Returns true if this part is an attachment,
  1747. # false otherwise.
  1748. 1 def attachment?
  1749. !!find_attachment
  1750. end
  1751. # Returns the attachment data if there is any
  1752. 1 def attachment
  1753. @attachment
  1754. end
  1755. # Returns the filename of the attachment
  1756. 1 def filename
  1757. find_attachment
  1758. end
  1759. 1 def all_parts
  1760. parts.map { |p| [p, p.all_parts] }.flatten
  1761. end
  1762. 1 def find_first_mime_type(mt)
  1763. all_parts.detect { |p| p.mime_type == mt && !p.attachment? }
  1764. end
  1765. # Skips the deletion of this message. All other messages
  1766. # flagged for delete still will be deleted at session close (i.e. when
  1767. # #find exits). Only has an effect if you're using #find_and_delete
  1768. # or #find with :delete_after_find set to true.
  1769. 1 def skip_deletion
  1770. @mark_for_delete = false
  1771. end
  1772. # Sets whether this message should be deleted at session close (i.e.
  1773. # after #find). Message will only be deleted if messages are retrieved
  1774. # using the #find_and_delete method, or by calling #find with
  1775. # :delete_after_find set to true.
  1776. 1 def mark_for_delete=(value = true)
  1777. @mark_for_delete = value
  1778. end
  1779. # Returns whether message will be marked for deletion.
  1780. # If so, the message will be deleted at session close (i.e. after #find
  1781. # exits), but only if also using the #find_and_delete method, or by
  1782. # calling #find with :delete_after_find set to true.
  1783. #
  1784. # Side-note: Just to be clear, this method will return true even if
  1785. # the message hasn't yet been marked for delete on the mail server.
  1786. # However, if this method returns true, it *will be* marked on the
  1787. # server after each block yields back to #find or #find_and_delete.
  1788. 1 def is_marked_for_delete?
  1789. return @mark_for_delete
  1790. end
  1791. 1 def text?
  1792. has_content_type? ? !!(main_type =~ /^text$/i) : false
  1793. end
  1794. 1 private
  1795. 1 HEADER_SEPARATOR = /#{Constants::CRLF}#{Constants::CRLF}/
  1796. # 2.1. General Description
  1797. # A message consists of header fields (collectively called "the header
  1798. # of the message") followed, optionally, by a body. The header is a
  1799. # sequence of lines of characters with special syntax as defined in
  1800. # this standard. The body is simply a sequence of characters that
  1801. # follows the header and is separated from the header by an empty line
  1802. # (i.e., a line with nothing preceding the CRLF).
  1803. 1 def parse_message
  1804. header_part, body_part = raw_source.lstrip.split(HEADER_SEPARATOR, 2)
  1805. self.header = header_part
  1806. self.body = body_part
  1807. end
  1808. 1 def raw_source=(value)
  1809. @raw_source = value
  1810. end
  1811. # see comments to body=. We take data and process it lazily
  1812. 1 def body_lazy(value)
  1813. process_body_raw if @body_raw && value
  1814. case
  1815. when value == nil || value.length<=0
  1816. @body = Mail::Body.new('')
  1817. @body_raw = nil
  1818. add_encoding_to_body
  1819. when @body && @body.multipart?
  1820. self.text_part = value
  1821. else
  1822. @body_raw = value
  1823. end
  1824. end
  1825. 1 def process_body_raw
  1826. @body = Mail::Body.new(@body_raw)
  1827. @body_raw = nil
  1828. separate_parts if @separate_parts
  1829. add_encoding_to_body
  1830. end
  1831. 1 def set_envelope_header
  1832. raw_string = raw_source.to_s
  1833. if match_data = raw_string.match(/\AFrom\s(#{TEXT}+)#{Constants::CRLF}/m)
  1834. set_envelope(match_data[1])
  1835. self.raw_source = raw_string.sub(match_data[0], "")
  1836. end
  1837. end
  1838. 1 def separate_parts
  1839. body.split!(boundary)
  1840. end
  1841. 1 def allowed_encodings
  1842. case mime_type
  1843. when 'message/rfc822'
  1844. [Encodings::SevenBit, Encodings::EightBit, Encodings::Binary]
  1845. end
  1846. end
  1847. 1 def add_encoding_to_body
  1848. if has_content_transfer_encoding?
  1849. @body.encoding = content_transfer_encoding
  1850. end
  1851. end
  1852. 1 def identify_and_set_transfer_encoding
  1853. if body && body.multipart?
  1854. self.content_transfer_encoding = @transport_encoding
  1855. else
  1856. self.content_transfer_encoding = body.negotiate_best_encoding(@transport_encoding, allowed_encodings).to_s
  1857. end
  1858. end
  1859. 1 def add_required_fields
  1860. add_required_message_fields
  1861. add_multipart_mixed_header if body.multipart?
  1862. add_content_type unless has_content_type?
  1863. add_charset if text? && !has_charset?
  1864. add_content_transfer_encoding unless has_content_transfer_encoding?
  1865. end
  1866. 1 def add_required_message_fields
  1867. add_date unless has_date?
  1868. add_mime_version unless has_mime_version?
  1869. add_message_id unless has_message_id?
  1870. end
  1871. 1 def add_multipart_alternate_header
  1872. header['content-type'] = ContentTypeField.with_boundary('multipart/alternative').value
  1873. header['content_type'].parameters[:charset] = @charset
  1874. body.boundary = boundary
  1875. end
  1876. 1 def add_boundary
  1877. unless body.boundary && boundary
  1878. header['content-type'] = 'multipart/mixed' unless header['content-type']
  1879. header['content-type'].parameters[:boundary] = ContentTypeField.generate_boundary
  1880. header['content_type'].parameters[:charset] = @charset
  1881. body.boundary = boundary
  1882. end
  1883. end
  1884. 1 def add_multipart_mixed_header
  1885. unless header['content-type']
  1886. header['content-type'] = ContentTypeField.with_boundary('multipart/mixed').value
  1887. header['content_type'].parameters[:charset] = @charset
  1888. body.boundary = boundary
  1889. end
  1890. end
  1891. 1 def init_with_hash(hash)
  1892. passed_in_options = IndifferentHash.new(hash)
  1893. self.raw_source = ''
  1894. @header = Mail::Header.new
  1895. @body = Mail::Body.new
  1896. @body_raw = nil
  1897. # We need to store the body until last, as we need all headers added first
  1898. body_content = nil
  1899. passed_in_options.each_pair do |k,v|
  1900. k = underscoreize(k).to_sym if k.class == String
  1901. if k == :headers
  1902. self.headers(v)
  1903. elsif k == :body
  1904. body_content = v
  1905. else
  1906. self[k] = v
  1907. end
  1908. end
  1909. if body_content
  1910. self.body = body_content
  1911. if has_content_transfer_encoding?
  1912. body.encoding = content_transfer_encoding
  1913. end
  1914. end
  1915. end
  1916. 1 def init_with_string(string)
  1917. self.raw_source = string
  1918. set_envelope_header
  1919. parse_message
  1920. @separate_parts = multipart?
  1921. end
  1922. # Returns the filename of the attachment (if it exists) or returns nil
  1923. 1 def find_attachment
  1924. content_type_name = header[:content_type].filename rescue nil
  1925. content_disp_name = header[:content_disposition].filename rescue nil
  1926. content_loc_name = header[:content_location].location rescue nil
  1927. case
  1928. when content_disposition && content_disp_name
  1929. filename = content_disp_name
  1930. when content_type && content_type_name
  1931. filename = content_type_name
  1932. when content_location && content_loc_name
  1933. filename = content_loc_name
  1934. else
  1935. filename = nil
  1936. end
  1937. filename = Mail::Encodings.decode_encode(filename, :decode) if filename rescue filename
  1938. filename
  1939. end
  1940. 1 def do_delivery
  1941. begin
  1942. if perform_deliveries
  1943. delivery_method.deliver!(self)
  1944. end
  1945. rescue => e # Net::SMTP errors or sendmail pipe errors
  1946. raise e if raise_delivery_errors
  1947. end
  1948. end
  1949. 1 def decode_body_as_text
  1950. Encodings.transcode_charset decode_body, charset, 'UTF-8'
  1951. end
  1952. end
  1953. end

target/rubygems/gems/mail-2.7.1/lib/mail/multibyte.rb

61.11% lines covered

18 relevant lines. 11 lines covered and 7 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/multibyte/chars'
  4. 1 module Mail #:nodoc:
  5. 1 module Multibyte
  6. # Raised when a problem with the encoding was found.
  7. 1 class EncodingError < StandardError; end
  8. 1 class << self
  9. # The proxy class returned when calling mb_chars. You can use this accessor to configure your own proxy
  10. # class so you can support other encodings. See the Mail::Multibyte::Chars implementation for
  11. # an example how to do this.
  12. #
  13. # Example:
  14. # Mail::Multibyte.proxy_class = CharsForUTF32
  15. 1 attr_accessor :proxy_class
  16. end
  17. 1 self.proxy_class = Mail::Multibyte::Chars
  18. 1 if RUBY_VERSION >= "1.9"
  19. # == Multibyte proxy
  20. #
  21. # +mb_chars+ is a multibyte safe proxy for string methods.
  22. #
  23. # In Ruby 1.8 and older it creates and returns an instance of the Mail::Multibyte::Chars class which
  24. # encapsulates the original string. A Unicode safe version of all the String methods are defined on this proxy
  25. # class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsuled string.
  26. #
  27. # name = 'Claus M��ller'
  28. # name.reverse # => "rell??M sualC"
  29. # name.length # => 13
  30. #
  31. # name.mb_chars.reverse.to_s # => "rell��M sualC"
  32. # name.mb_chars.length # => 12
  33. #
  34. # In Ruby 1.9 and newer +mb_chars+ returns +self+ because String is (mostly) encoding aware. This means that
  35. # it becomes easy to run one version of your code on multiple Ruby versions.
  36. #
  37. # == Method chaining
  38. #
  39. # All the methods on the Chars proxy which normally return a string will return a Chars object. This allows
  40. # method chaining on the result of any of these methods.
  41. #
  42. # name.mb_chars.reverse.length # => 12
  43. #
  44. # == Interoperability and configuration
  45. #
  46. # The Chars object tries to be as interchangeable with String objects as possible: sorting and comparing between
  47. # String and Char work like expected. The bang! methods change the internal string representation in the Chars
  48. # object. Interoperability problems can be resolved easily with a +to_s+ call.
  49. #
  50. # For more information about the methods defined on the Chars proxy see Mail::Multibyte::Chars. For
  51. # information about how to change the default Multibyte behaviour see Mail::Multibyte.
  52. 1 def self.mb_chars(str)
  53. if proxy_class.consumes?(str)
  54. proxy_class.new(str)
  55. else
  56. str
  57. end
  58. end
  59. else
  60. def self.mb_chars(str)
  61. if proxy_class.wants?(str)
  62. proxy_class.new(str)
  63. else
  64. str
  65. end
  66. end
  67. end
  68. # Regular expressions that describe valid byte sequences for a character
  69. 1 VALID_CHARACTER = {
  70. # Borrowed from the Kconv library by Shinji KONO - (also as seen on the W3C site)
  71. 'UTF-8' => /\A(?:
  72. [\x00-\x7f] |
  73. [\xc2-\xdf] [\x80-\xbf] |
  74. \xe0 [\xa0-\xbf] [\x80-\xbf] |
  75. [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] |
  76. \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] |
  77. [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] |
  78. \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf])\z /xn,
  79. # Quick check for valid Shift-JIS characters, disregards the odd-even pairing
  80. 'Shift_JIS' => /\A(?:
  81. [\x00-\x7e\xa1-\xdf] |
  82. [\x81-\x9f\xe0-\xef] [\x40-\x7e\x80-\x9e\x9f-\xfc])\z /xn
  83. }
  84. end
  85. end
  86. 1 require 'mail/multibyte/utils'

target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/chars.rb

24.85% lines covered

165 relevant lines. 41 lines covered and 124 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/multibyte/unicode'
  4. 1 module Mail #:nodoc:
  5. 1 module Multibyte #:nodoc:
  6. # Chars enables you to work transparently with UTF-8 encoding in the Ruby String class without having extensive
  7. # knowledge about the encoding. A Chars object accepts a string upon initialization and proxies String methods in an
  8. # encoding safe manner. All the normal String methods are also implemented on the proxy.
  9. #
  10. # String methods are proxied through the Chars object, and can be accessed through the +mb_chars+ method. Methods
  11. # which would normally return a String object now return a Chars object so methods can be chained.
  12. #
  13. # "The Perfect String ".mb_chars.downcase.strip.normalize # => "the perfect string"
  14. #
  15. # Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made.
  16. # If certain methods do explicitly check the class, call +to_s+ before you pass chars objects to them.
  17. #
  18. # bad.explicit_checking_method "T".mb_chars.downcase.to_s
  19. #
  20. # The default Chars implementation assumes that the encoding of the string is UTF-8, if you want to handle different
  21. # encodings you can write your own multibyte string handler and configure it through
  22. # Mail::Multibyte.proxy_class.
  23. #
  24. # class CharsForUTF32
  25. # def size
  26. # @wrapped_string.size / 4
  27. # end
  28. #
  29. # def self.accepts?(string)
  30. # string.length % 4 == 0
  31. # end
  32. # end
  33. #
  34. # Mail::Multibyte.proxy_class = CharsForUTF32
  35. 1 class Chars
  36. 1 attr_reader :wrapped_string
  37. 1 alias to_s wrapped_string
  38. 1 alias to_str wrapped_string
  39. 1 if RUBY_VERSION >= "1.9"
  40. # Creates a new Chars instance by wrapping _string_.
  41. 1 def initialize(string)
  42. @wrapped_string = string.dup
  43. @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen?
  44. end
  45. else
  46. def initialize(string) #:nodoc:
  47. @wrapped_string = string
  48. end
  49. end
  50. # Forward all undefined methods to the wrapped string.
  51. 1 def method_missing(method, *args, &block)
  52. if method.to_s =~ /!$/
  53. @wrapped_string.__send__(method, *args, &block)
  54. self
  55. else
  56. result = @wrapped_string.__send__(method, *args, &block)
  57. result.kind_of?(String) ? chars(result) : result
  58. end
  59. end
  60. # Returns +true+ if _obj_ responds to the given method. Private methods are included in the search
  61. # only if the optional second parameter evaluates to +true+.
  62. 1 def respond_to?(method, include_private=false)
  63. super || @wrapped_string.respond_to?(method, include_private) || false
  64. end
  65. # Enable more predictable duck-typing on String-like classes. See Object#acts_like?.
  66. 1 def acts_like_string?
  67. true
  68. end
  69. # Returns +true+ when the proxy class can handle the string. Returns +false+ otherwise.
  70. 1 def self.consumes?(string)
  71. # Unpack is a little bit faster than regular expressions.
  72. string.unpack('U*')
  73. true
  74. rescue ArgumentError
  75. false
  76. end
  77. 1 include Comparable
  78. # Returns -1, 0, or 1, depending on whether the Chars object is to be sorted before,
  79. # equal or after the object on the right side of the operation. It accepts any object
  80. # that implements +to_s+:
  81. #
  82. # '��'.mb_chars <=> '��'.mb_chars # => -1
  83. #
  84. # See <tt>String#<=></tt> for more details.
  85. 1 def <=>(other)
  86. @wrapped_string <=> other.to_s
  87. end
  88. 1 if RUBY_VERSION < "1.9"
  89. # Returns +true+ if the Chars class can and should act as a proxy for the string _string_. Returns
  90. # +false+ otherwise.
  91. def self.wants?(string)
  92. $KCODE == 'UTF8' && consumes?(string)
  93. end
  94. # Returns a new Chars object containing the _other_ object concatenated to the string.
  95. #
  96. # Example:
  97. # (Mail::Multibyte.mb_chars('Caf��') + ' p��rifer��l').to_s # => "Caf�� p��rifer��l"
  98. def +(other)
  99. chars(@wrapped_string + other)
  100. end
  101. # Like <tt>String#=~</tt> only it returns the character offset (in codepoints) instead of the byte offset.
  102. #
  103. # Example:
  104. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l') =~ /��/ # => 12
  105. def =~(other)
  106. translate_offset(@wrapped_string =~ other)
  107. end
  108. # Inserts the passed string at specified codepoint offsets.
  109. #
  110. # Example:
  111. # Mail::Multibyte.mb_chars('Caf��').insert(4, ' p��rifer��l').to_s # => "Caf�� p��rifer��l"
  112. def insert(offset, fragment)
  113. unpacked = Unicode.u_unpack(@wrapped_string)
  114. unless offset > unpacked.length
  115. @wrapped_string.replace(
  116. Unicode.u_unpack(@wrapped_string).insert(offset, *Unicode.u_unpack(fragment)).pack('U*')
  117. )
  118. else
  119. raise IndexError, "index #{offset} out of string"
  120. end
  121. self
  122. end
  123. # Returns +true+ if contained string contains _other_. Returns +false+ otherwise.
  124. #
  125. # Example:
  126. # Mail::Multibyte.mb_chars('Caf��').include?('��') # => true
  127. def include?(other)
  128. # We have to redefine this method because Enumerable defines it.
  129. @wrapped_string.include?(other)
  130. end
  131. # Returns the position _needle_ in the string, counting in codepoints. Returns +nil+ if _needle_ isn't found.
  132. #
  133. # Example:
  134. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l').index('��') # => 12
  135. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l').index(/\w/u) # => 0
  136. def index(needle, offset=0)
  137. wrapped_offset = first(offset).wrapped_string.length
  138. index = @wrapped_string.index(needle, wrapped_offset)
  139. index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil
  140. end
  141. # Returns the position _needle_ in the string, counting in
  142. # codepoints, searching backward from _offset_ or the end of the
  143. # string. Returns +nil+ if _needle_ isn't found.
  144. #
  145. # Example:
  146. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l').rindex('��') # => 6
  147. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l').rindex(/\w/u) # => 13
  148. def rindex(needle, offset=nil)
  149. offset ||= length
  150. wrapped_offset = first(offset).wrapped_string.length
  151. index = @wrapped_string.rindex(needle, wrapped_offset)
  152. index ? (Unicode.u_unpack(@wrapped_string.slice(0...index)).size) : nil
  153. end
  154. # Returns the number of codepoints in the string
  155. def size
  156. Unicode.u_unpack(@wrapped_string).size
  157. end
  158. alias_method :length, :size
  159. # Strips entire range of Unicode whitespace from the right of the string.
  160. def rstrip
  161. chars(@wrapped_string.gsub(Unicode::TRAILERS_PAT, ''))
  162. end
  163. # Strips entire range of Unicode whitespace from the left of the string.
  164. def lstrip
  165. chars(@wrapped_string.gsub(Unicode::LEADERS_PAT, ''))
  166. end
  167. # Strips entire range of Unicode whitespace from the right and left of the string.
  168. def strip
  169. rstrip.lstrip
  170. end
  171. # Returns the codepoint of the first character in the string.
  172. #
  173. # Example:
  174. # Mail::Multibyte.mb_chars('���������������').ord # => 12371
  175. def ord
  176. Unicode.u_unpack(@wrapped_string)[0]
  177. end
  178. # Works just like <tt>String#rjust</tt>, only integer specifies characters instead of bytes.
  179. #
  180. # Example:
  181. #
  182. # Mail::Multibyte.mb_chars("�� cup").rjust(8).to_s
  183. # # => " �� cup"
  184. #
  185. # Mail::Multibyte.mb_chars("�� cup").rjust(8, "��").to_s # Use non-breaking whitespace
  186. # # => "�������� cup"
  187. def rjust(integer, padstr=' ')
  188. justify(integer, :right, padstr)
  189. end
  190. # Works just like <tt>String#ljust</tt>, only integer specifies characters instead of bytes.
  191. #
  192. # Example:
  193. #
  194. # Mail::Multibyte.mb_chars("�� cup").rjust(8).to_s
  195. # # => "�� cup "
  196. #
  197. # Mail::Multibyte.mb_chars("�� cup").rjust(8, "��").to_s # Use non-breaking whitespace
  198. # # => "�� cup������"
  199. def ljust(integer, padstr=' ')
  200. justify(integer, :left, padstr)
  201. end
  202. # Works just like <tt>String#center</tt>, only integer specifies characters instead of bytes.
  203. #
  204. # Example:
  205. #
  206. # Mail::Multibyte.mb_chars("�� cup").center(8).to_s
  207. # # => " �� cup "
  208. #
  209. # Mail::Multibyte.mb_chars("�� cup").center(8, "��").to_s # Use non-breaking whitespace
  210. # # => "���� cup����"
  211. def center(integer, padstr=' ')
  212. justify(integer, :center, padstr)
  213. end
  214. else
  215. 1 def =~(other)
  216. @wrapped_string =~ other
  217. end
  218. end
  219. # Works just like <tt>String#split</tt>, with the exception that the items in the resulting list are Chars
  220. # instances instead of String. This makes chaining methods easier.
  221. #
  222. # Example:
  223. # Mail::Multibyte.mb_chars('Caf�� p��rifer��l').split(/��/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFER��L"]
  224. 1 def split(*args)
  225. @wrapped_string.split(*args).map { |i| i.mb_chars }
  226. end
  227. # Like <tt>String#[]=</tt>, except instead of byte offsets you specify character offsets.
  228. #
  229. # Example:
  230. #
  231. # s = "M��ller"
  232. # s.mb_chars[2] = "e" # Replace character with offset 2
  233. # s
  234. # # => "M��eler"
  235. #
  236. # s = "M��ller"
  237. # s.mb_chars[1, 2] = "��" # Replace 2 characters at character offset 1
  238. # s
  239. # # => "M��ler"
  240. 1 def []=(*args)
  241. replace_by = args.pop
  242. # Indexed replace with regular expressions already works
  243. if args.first.is_a?(Regexp)
  244. @wrapped_string[*args] = replace_by
  245. else
  246. result = Unicode.u_unpack(@wrapped_string)
  247. if args[0].is_a?(Integer)
  248. raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length
  249. min = args[0]
  250. max = args[1].nil? ? min : (min + args[1] - 1)
  251. range = Range.new(min, max)
  252. replace_by = [replace_by].pack('U') if replace_by.is_a?(Integer)
  253. elsif args.first.is_a?(Range)
  254. raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length
  255. range = args[0]
  256. else
  257. needle = args[0].to_s
  258. min = index(needle)
  259. max = min + Unicode.u_unpack(needle).length - 1
  260. range = Range.new(min, max)
  261. end
  262. result[range] = Unicode.u_unpack(replace_by)
  263. @wrapped_string.replace(result.pack('U*'))
  264. end
  265. end
  266. # Reverses all characters in the string.
  267. #
  268. # Example:
  269. # Mail::Multibyte.mb_chars('Caf��').reverse.to_s # => '��faC'
  270. 1 def reverse
  271. chars(Unicode.g_unpack(@wrapped_string).reverse.flatten.pack('U*'))
  272. end
  273. # Implements Unicode-aware slice with codepoints. Slicing on one point returns the codepoints for that
  274. # character.
  275. #
  276. # Example:
  277. # Mail::Multibyte.mb_chars('���������������').slice(2..3).to_s # => "������"
  278. 1 def slice(*args)
  279. if args.size > 2
  280. raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native
  281. elsif (args.size == 2 && !(args.first.is_a?(Numeric) || args.first.is_a?(Regexp)))
  282. raise TypeError, "cannot convert #{args.first.class} into Integer" # Do as if we were native
  283. elsif (args.size == 2 && !args[1].is_a?(Numeric))
  284. raise TypeError, "cannot convert #{args[1].class} into Integer" # Do as if we were native
  285. elsif args[0].kind_of? Range
  286. cps = Unicode.u_unpack(@wrapped_string).slice(*args)
  287. result = cps.nil? ? nil : cps.pack('U*')
  288. elsif args[0].kind_of? Regexp
  289. result = @wrapped_string.slice(*args)
  290. elsif args.size == 1 && args[0].kind_of?(Numeric)
  291. character = Unicode.u_unpack(@wrapped_string)[args[0]]
  292. result = character && [character].pack('U')
  293. else
  294. cps = Unicode.u_unpack(@wrapped_string).slice(*args)
  295. result = cps && cps.pack('U*')
  296. end
  297. result && chars(result)
  298. end
  299. 1 alias_method :[], :slice
  300. # Limit the byte size of the string to a number of bytes without breaking characters. Usable
  301. # when the storage for a string is limited for some reason.
  302. #
  303. # Example:
  304. # s = '���������������'
  305. # s.mb_chars.limit(7) # => "������"
  306. 1 def limit(limit)
  307. slice(0...translate_offset(limit))
  308. end
  309. # Convert characters in the string to uppercase.
  310. #
  311. # Example:
  312. # Mail::Multibyte.mb_chars('Laurent, o�� sont les tests ?').upcase.to_s # => "LAURENT, O�� SONT LES TESTS ?"
  313. 1 def upcase
  314. chars(Unicode.apply_mapping(@wrapped_string, :uppercase_mapping))
  315. end
  316. # Convert characters in the string to lowercase.
  317. #
  318. # Example:
  319. # Mail::Multibyte.mb_chars('V��DA A V��ZKUM').downcase.to_s # => "v��da a v��zkum"
  320. 1 def downcase
  321. chars(Unicode.apply_mapping(@wrapped_string, :lowercase_mapping))
  322. end
  323. # Converts the first character to uppercase and the remainder to lowercase.
  324. #
  325. # Example:
  326. # Mail::Multibyte.mb_chars('��ber').capitalize.to_s # => "��ber"
  327. 1 def capitalize
  328. (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase
  329. end
  330. # Capitalizes the first letter of every word, when possible.
  331. #
  332. # Example:
  333. # Mail::Multibyte.mb_chars("��L QUE SE ENTER��").titleize # => "��l Que Se Enter��"
  334. # Mail::Multibyte.mb_chars("���������").titleize # => "���������"
  335. 1 def titleize
  336. chars(downcase.to_s.gsub(/\b('?\S)/u) { Unicode.apply_mapping $1, :uppercase_mapping })
  337. end
  338. 1 alias_method :titlecase, :titleize
  339. # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for
  340. # passing strings to databases and validations.
  341. #
  342. # * <tt>form</tt> - The form you want to normalize in. Should be one of the following:
  343. # <tt>:c</tt>, <tt>:kc</tt>, <tt>:d</tt>, or <tt>:kd</tt>. Default is
  344. # Mail::Multibyte::Unicode.default_normalization_form
  345. 1 def normalize(form = nil)
  346. chars(Unicode.normalize(@wrapped_string, form))
  347. end
  348. # Performs canonical decomposition on all the characters.
  349. #
  350. # Example:
  351. # '��'.length # => 2
  352. # Mail::Multibyte.mb_chars('��').decompose.to_s.length # => 3
  353. 1 def decompose
  354. chars(Unicode.decompose_codepoints(:canonical, Unicode.u_unpack(@wrapped_string)).pack('U*'))
  355. end
  356. # Performs composition on all the characters.
  357. #
  358. # Example:
  359. # '��'.length # => 3
  360. # Mail::Multibyte.mb_chars('��').compose.to_s.length # => 2
  361. 1 def compose
  362. chars(Unicode.compose_codepoints(Unicode.u_unpack(@wrapped_string)).pack('U*'))
  363. end
  364. # Returns the number of grapheme clusters in the string.
  365. #
  366. # Example:
  367. # Mail::Multibyte.mb_chars('������������').length # => 4
  368. # Mail::Multibyte.mb_chars('������������').g_length # => 3
  369. 1 def g_length
  370. Unicode.g_unpack(@wrapped_string).length
  371. end
  372. # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string.
  373. #
  374. # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1.
  375. 1 def tidy_bytes(force = false)
  376. chars(Unicode.tidy_bytes(@wrapped_string, force))
  377. end
  378. 1 %w(capitalize downcase lstrip reverse rstrip slice strip tidy_bytes upcase).each do |method|
  379. # Only define a corresponding bang method for methods defined in the proxy; On 1.9 the proxy will
  380. # exclude lstrip!, rstrip! and strip! because they are already work as expected on multibyte strings.
  381. 9 if public_method_defined?(method)
  382. 6 define_method("#{method}!") do |*args|
  383. @wrapped_string = send(args.nil? ? method : method, *args).to_s
  384. self
  385. end
  386. end
  387. end
  388. 1 protected
  389. 1 def translate_offset(byte_offset) #:nodoc:
  390. return nil if byte_offset.nil?
  391. return 0 if @wrapped_string == ''
  392. if @wrapped_string.respond_to?(:force_encoding)
  393. @wrapped_string = @wrapped_string.dup.force_encoding(Encoding::ASCII_8BIT)
  394. end
  395. begin
  396. @wrapped_string[0...byte_offset].unpack('U*').length
  397. rescue ArgumentError
  398. byte_offset -= 1
  399. retry
  400. end
  401. end
  402. 1 def justify(integer, way, padstr=' ') #:nodoc:
  403. raise ArgumentError, "zero width padding" if padstr.length == 0
  404. padsize = integer - size
  405. padsize = padsize > 0 ? padsize : 0
  406. case way
  407. when :right
  408. result = @wrapped_string.dup.insert(0, padding(padsize, padstr))
  409. when :left
  410. result = @wrapped_string.dup.insert(-1, padding(padsize, padstr))
  411. when :center
  412. lpad = padding((padsize / 2.0).floor, padstr)
  413. rpad = padding((padsize / 2.0).ceil, padstr)
  414. result = @wrapped_string.dup.insert(0, lpad).insert(-1, rpad)
  415. end
  416. chars(result)
  417. end
  418. 1 def padding(padsize, padstr=' ') #:nodoc:
  419. if padsize != 0
  420. chars(padstr * ((padsize / Unicode.u_unpack(padstr).size) + 1)).slice(0, padsize)
  421. else
  422. ''
  423. end
  424. end
  425. 1 def chars(string) #:nodoc:
  426. self.class.new(string)
  427. end
  428. end
  429. end
  430. end

target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/unicode.rb

27.23% lines covered

202 relevant lines. 55 lines covered and 147 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module Multibyte
  4. 1 module Unicode
  5. # Adapted from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/multibyte/unicode.rb
  6. # under the MIT license
  7. # The Unicode version that is supported by the implementation
  8. 1 UNICODE_VERSION = '7.0.0'
  9. # Holds data about a codepoint in the Unicode database.
  10. 1 class Codepoint
  11. 1 attr_accessor :code, :combining_class, :decomp_type, :decomp_mapping, :uppercase_mapping, :lowercase_mapping
  12. # Initializing Codepoint object with default values
  13. 1 def initialize
  14. @combining_class = 0
  15. @uppercase_mapping = 0
  16. @lowercase_mapping = 0
  17. end
  18. 1 def swapcase_mapping
  19. uppercase_mapping > 0 ? uppercase_mapping : lowercase_mapping
  20. end
  21. end
  22. 1 extend self
  23. # A list of all available normalization forms. See http://www.unicode.org/reports/tr15/tr15-29.html for more
  24. # information about normalization.
  25. 1 NORMALIZATION_FORMS = [:c, :kc, :d, :kd]
  26. # The default normalization used for operations that require normalization. It can be set to any of the
  27. # normalizations in NORMALIZATION_FORMS.
  28. #
  29. # Example:
  30. # Mail::Multibyte::Unicode.default_normalization_form = :c
  31. 1 attr_accessor :default_normalization_form
  32. 1 @default_normalization_form = :kc
  33. # Hangul character boundaries and properties
  34. 1 HANGUL_SBASE = 0xAC00
  35. 1 HANGUL_LBASE = 0x1100
  36. 1 HANGUL_VBASE = 0x1161
  37. 1 HANGUL_TBASE = 0x11A7
  38. 1 HANGUL_LCOUNT = 19
  39. 1 HANGUL_VCOUNT = 21
  40. 1 HANGUL_TCOUNT = 28
  41. 1 HANGUL_NCOUNT = HANGUL_VCOUNT * HANGUL_TCOUNT
  42. 1 HANGUL_SCOUNT = 11172
  43. 1 HANGUL_SLAST = HANGUL_SBASE + HANGUL_SCOUNT
  44. 1 HANGUL_JAMO_FIRST = 0x1100
  45. 1 HANGUL_JAMO_LAST = 0x11FF
  46. # All the unicode whitespace
  47. WHITESPACE = [
  48. 2 (0x0009..0x000D).to_a, # White_Space # Cc [5] <control-0009>..<control-000D>
  49. 0x0020, # White_Space # Zs SPACE
  50. 0x0085, # White_Space # Cc <control-0085>
  51. 0x00A0, # White_Space # Zs NO-BREAK SPACE
  52. 0x1680, # White_Space # Zs OGHAM SPACE MARK
  53. 0x180E, # White_Space # Zs MONGOLIAN VOWEL SEPARATOR
  54. 1 (0x2000..0x200A).to_a, # White_Space # Zs [11] EN QUAD..HAIR SPACE
  55. 0x2028, # White_Space # Zl LINE SEPARATOR
  56. 0x2029, # White_Space # Zp PARAGRAPH SEPARATOR
  57. 0x202F, # White_Space # Zs NARROW NO-BREAK SPACE
  58. 0x205F, # White_Space # Zs MEDIUM MATHEMATICAL SPACE
  59. 0x3000, # White_Space # Zs IDEOGRAPHIC SPACE
  60. ].flatten.freeze
  61. # BOM (byte order mark) can also be seen as whitespace, it's a non-rendering character used to distinguish
  62. # between little and big endian. This is not an issue in utf-8, so it must be ignored.
  63. 1 LEADERS_AND_TRAILERS = WHITESPACE + [65279] # ZERO-WIDTH NO-BREAK SPACE aka BOM
  64. # Returns a regular expression pattern that matches the passed Unicode codepoints
  65. 1 def self.codepoints_to_pattern(array_of_codepoints) #:nodoc:
  66. 56 array_of_codepoints.collect{ |e| [e].pack 'U*' }.join('|')
  67. end
  68. 1 TRAILERS_PAT = /(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+\Z/u
  69. 1 LEADERS_PAT = /\A(#{codepoints_to_pattern(LEADERS_AND_TRAILERS)})+/u
  70. # Unpack the string at codepoints boundaries. Raises an EncodingError when the encoding of the string isn't
  71. # valid UTF-8.
  72. #
  73. # Example:
  74. # Unicode.u_unpack('Caf��') # => [67, 97, 102, 233]
  75. 1 def u_unpack(string)
  76. begin
  77. string.unpack 'U*'
  78. rescue ArgumentError
  79. raise EncodingError, 'malformed UTF-8 character'
  80. end
  81. end
  82. # Detect whether the codepoint is in a certain character class. Returns +true+ when it's in the specified
  83. # character class and +false+ otherwise. Valid character classes are: <tt>:cr</tt>, <tt>:lf</tt>, <tt>:l</tt>,
  84. # <tt>:v</tt>, <tt>:lv</tt>, <tt>:lvt</tt> and <tt>:t</tt>.
  85. #
  86. # Primarily used by the grapheme cluster support.
  87. 1 def in_char_class?(codepoint, classes)
  88. classes.detect { |c| database.boundary[c] === codepoint } ? true : false
  89. end
  90. # Unpack the string at grapheme boundaries. Returns a list of character lists.
  91. #
  92. # Example:
  93. # Unicode.g_unpack('������������') # => [[2325, 2381], [2359], [2367]]
  94. # Unicode.g_unpack('Caf��') # => [[67], [97], [102], [233]]
  95. 1 def g_unpack(string)
  96. codepoints = u_unpack(string)
  97. unpacked = []
  98. pos = 0
  99. marker = 0
  100. eoc = codepoints.length
  101. while(pos < eoc)
  102. pos += 1
  103. previous = codepoints[pos-1]
  104. current = codepoints[pos]
  105. if (
  106. # CR X LF
  107. ( previous == database.boundary[:cr] and current == database.boundary[:lf] ) or
  108. # L X (L|V|LV|LVT)
  109. ( database.boundary[:l] === previous and in_char_class?(current, [:l,:v,:lv,:lvt]) ) or
  110. # (LV|V) X (V|T)
  111. ( in_char_class?(previous, [:lv,:v]) and in_char_class?(current, [:v,:t]) ) or
  112. # (LVT|T) X (T)
  113. ( in_char_class?(previous, [:lvt,:t]) and database.boundary[:t] === current ) or
  114. # X Extend
  115. (database.boundary[:extend] === current)
  116. )
  117. else
  118. unpacked << codepoints[marker..pos-1]
  119. marker = pos
  120. end
  121. end
  122. unpacked
  123. end
  124. # Reverse operation of g_unpack.
  125. #
  126. # Example:
  127. # Unicode.g_pack(Unicode.g_unpack('������������')) # => '������������'
  128. 1 def g_pack(unpacked)
  129. (unpacked.flatten).pack('U*')
  130. end
  131. # Re-order codepoints so the string becomes canonical.
  132. 1 def reorder_characters(codepoints)
  133. length = codepoints.length- 1
  134. pos = 0
  135. while pos < length do
  136. cp1, cp2 = database.codepoints[codepoints[pos]], database.codepoints[codepoints[pos+1]]
  137. if (cp1.combining_class > cp2.combining_class) && (cp2.combining_class > 0)
  138. codepoints[pos..pos+1] = cp2.code, cp1.code
  139. pos += (pos > 0 ? -1 : 1)
  140. else
  141. pos += 1
  142. end
  143. end
  144. codepoints
  145. end
  146. # Decompose composed characters to the decomposed form.
  147. 1 def decompose_codepoints(type, codepoints)
  148. codepoints.inject([]) do |decomposed, cp|
  149. # if it's a hangul syllable starter character
  150. if HANGUL_SBASE <= cp and cp < HANGUL_SLAST
  151. sindex = cp - HANGUL_SBASE
  152. ncp = [] # new codepoints
  153. ncp << HANGUL_LBASE + sindex / HANGUL_NCOUNT
  154. ncp << HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT
  155. tindex = sindex % HANGUL_TCOUNT
  156. ncp << (HANGUL_TBASE + tindex) unless tindex == 0
  157. decomposed.concat ncp
  158. # if the codepoint is decomposable in with the current decomposition type
  159. elsif (ncp = database.codepoints[cp].decomp_mapping) and (!database.codepoints[cp].decomp_type || type == :compatability)
  160. decomposed.concat decompose_codepoints(type, ncp.dup)
  161. else
  162. decomposed << cp
  163. end
  164. end
  165. end
  166. # Compose decomposed characters to the composed form.
  167. 1 def compose_codepoints(codepoints)
  168. pos = 0
  169. eoa = codepoints.length - 1
  170. starter_pos = 0
  171. starter_char = codepoints[0]
  172. previous_combining_class = -1
  173. while pos < eoa
  174. pos += 1
  175. lindex = starter_char - HANGUL_LBASE
  176. # -- Hangul
  177. if 0 <= lindex and lindex < HANGUL_LCOUNT
  178. vindex = codepoints[starter_pos+1] - HANGUL_VBASE rescue vindex = -1
  179. if 0 <= vindex and vindex < HANGUL_VCOUNT
  180. tindex = codepoints[starter_pos+2] - HANGUL_TBASE rescue tindex = -1
  181. if 0 <= tindex and tindex < HANGUL_TCOUNT
  182. j = starter_pos + 2
  183. eoa -= 2
  184. else
  185. tindex = 0
  186. j = starter_pos + 1
  187. eoa -= 1
  188. end
  189. codepoints[starter_pos..j] = (lindex * HANGUL_VCOUNT + vindex) * HANGUL_TCOUNT + tindex + HANGUL_SBASE
  190. end
  191. starter_pos += 1
  192. starter_char = codepoints[starter_pos]
  193. # -- Other characters
  194. else
  195. current_char = codepoints[pos]
  196. current = database.codepoints[current_char]
  197. if current.combining_class > previous_combining_class
  198. if ref = database.composition_map[starter_char]
  199. composition = ref[current_char]
  200. else
  201. composition = nil
  202. end
  203. unless composition.nil?
  204. codepoints[starter_pos] = composition
  205. starter_char = composition
  206. codepoints.delete_at pos
  207. eoa -= 1
  208. pos -= 1
  209. previous_combining_class = -1
  210. else
  211. previous_combining_class = current.combining_class
  212. end
  213. else
  214. previous_combining_class = current.combining_class
  215. end
  216. if current.combining_class == 0
  217. starter_pos = pos
  218. starter_char = codepoints[pos]
  219. end
  220. end
  221. end
  222. codepoints
  223. end
  224. # Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string.
  225. #
  226. # Passing +true+ will forcibly tidy all bytes, assuming that the string's encoding is entirely CP1252 or ISO-8859-1.
  227. 1 def tidy_bytes(string, force = false)
  228. if force
  229. return string.unpack("C*").map do |b|
  230. tidy_byte(b)
  231. end.flatten.compact.pack("C*").unpack("U*").pack("U*")
  232. end
  233. bytes = string.unpack("C*")
  234. conts_expected = 0
  235. last_lead = 0
  236. bytes.each_index do |i|
  237. byte = bytes[i]
  238. is_cont = byte > 127 && byte < 192
  239. is_lead = byte > 191 && byte < 245
  240. is_unused = byte > 240
  241. is_restricted = byte > 244
  242. # Impossible or highly unlikely byte? Clean it.
  243. if is_unused || is_restricted
  244. bytes[i] = tidy_byte(byte)
  245. elsif is_cont
  246. # Not expecting contination byte? Clean up. Otherwise, now expect one less.
  247. conts_expected == 0 ? bytes[i] = tidy_byte(byte) : conts_expected -= 1
  248. else
  249. if conts_expected > 0
  250. # Expected continuation, but got ASCII or leading? Clean backwards up to
  251. # the leading byte.
  252. (1..(i - last_lead)).each {|j| bytes[i - j] = tidy_byte(bytes[i - j])}
  253. conts_expected = 0
  254. end
  255. if is_lead
  256. # Final byte is leading? Clean it.
  257. if i == bytes.length - 1
  258. bytes[i] = tidy_byte(bytes.last)
  259. else
  260. # Valid leading byte? Expect continuations determined by position of
  261. # first zero bit, with max of 3.
  262. conts_expected = byte < 224 ? 1 : byte < 240 ? 2 : 3
  263. last_lead = i
  264. end
  265. end
  266. end
  267. end
  268. bytes.empty? ? "" : bytes.flatten.compact.pack("C*").unpack("U*").pack("U*")
  269. end
  270. # Returns the KC normalization of the string by default. NFKC is considered the best normalization form for
  271. # passing strings to databases and validations.
  272. #
  273. # * <tt>string</tt> - The string to perform normalization on.
  274. # * <tt>form</tt> - The form you want to normalize in. Should be one of the following:
  275. # <tt>:c</tt>, <tt>:kc</tt>, <tt>:d</tt>, or <tt>:kd</tt>. Default is
  276. # Mail::Multibyte.default_normalization_form
  277. 1 def normalize(string, form=nil)
  278. form ||= @default_normalization_form
  279. # See http://www.unicode.org/reports/tr15, Table 1
  280. codepoints = u_unpack(string)
  281. case form
  282. when :d
  283. reorder_characters(decompose_codepoints(:canonical, codepoints))
  284. when :c
  285. compose_codepoints(reorder_characters(decompose_codepoints(:canonical, codepoints)))
  286. when :kd
  287. reorder_characters(decompose_codepoints(:compatability, codepoints))
  288. when :kc
  289. compose_codepoints(reorder_characters(decompose_codepoints(:compatability, codepoints)))
  290. else
  291. raise ArgumentError, "#{form} is not a valid normalization variant", caller
  292. end.pack('U*')
  293. end
  294. 1 def apply_mapping(string, mapping) #:nodoc:
  295. u_unpack(string).map do |codepoint|
  296. cp = database.codepoints[codepoint]
  297. if cp and (ncp = cp.send(mapping)) and ncp > 0
  298. ncp
  299. else
  300. codepoint
  301. end
  302. end.pack('U*')
  303. end
  304. # Holds static data from the Unicode database
  305. 1 class UnicodeDatabase
  306. 1 ATTRIBUTES = :codepoints, :composition_exclusion, :composition_map, :boundary, :cp1252
  307. 1 attr_writer(*ATTRIBUTES)
  308. 1 def initialize
  309. @codepoints = Hash.new(Codepoint.new)
  310. @composition_exclusion = []
  311. @composition_map = {}
  312. @boundary = {}
  313. @cp1252 = {}
  314. end
  315. # Lazy load the Unicode database so it's only loaded when it's actually used
  316. 1 ATTRIBUTES.each do |attr_name|
  317. 5 class_eval(<<-EOS, __FILE__, __LINE__ + 1)
  318. 5 def #{attr_name} # def codepoints
  319. load # load
  320. 5 @#{attr_name} # @codepoints
  321. end # end
  322. EOS
  323. end
  324. # Loads the Unicode database and returns all the internal objects of UnicodeDatabase.
  325. 1 def load
  326. begin
  327. @codepoints, @composition_exclusion, @composition_map, @boundary, @cp1252 = File.open(self.class.filename, 'rb') { |f| Marshal.load f.read }
  328. rescue => e
  329. raise IOError.new("Couldn't load the Unicode tables for UTF8Handler (#{e.message}), Mail::Multibyte is unusable")
  330. end
  331. # Redefine the === method so we can write shorter rules for grapheme cluster breaks
  332. @boundary.each do |k,_|
  333. @boundary[k].instance_eval do
  334. def ===(other)
  335. detect { |i| i === other } ? true : false
  336. end
  337. end if @boundary[k].kind_of?(Array)
  338. end
  339. # define attr_reader methods for the instance variables
  340. class << self
  341. attr_reader(*ATTRIBUTES)
  342. end
  343. end
  344. # Returns the directory in which the data files are stored
  345. 1 def self.dirname
  346. File.dirname(__FILE__) + '/../values/'
  347. end
  348. # Returns the filename for the data file for this version
  349. 1 def self.filename
  350. File.expand_path File.join(dirname, "unicode_tables.dat")
  351. end
  352. end
  353. 1 private
  354. 1 def tidy_byte(byte)
  355. if byte < 160
  356. [database.cp1252[byte] || byte].pack("U").unpack("C*")
  357. elsif byte < 192
  358. [194, byte]
  359. else
  360. [195, byte - 64]
  361. end
  362. end
  363. 1 def database
  364. @database ||= UnicodeDatabase.new
  365. end
  366. end
  367. end
  368. end

target/rubygems/gems/mail-2.7.1/lib/mail/multibyte/utils.rb

36.0% lines covered

25 relevant lines. 9 lines covered and 16 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail #:nodoc:
  4. 1 module Multibyte #:nodoc:
  5. 1 if RUBY_VERSION >= "1.9"
  6. # Returns a regular expression that matches valid characters in the current encoding
  7. 1 def self.valid_character
  8. VALID_CHARACTER[Encoding.default_external.to_s]
  9. end
  10. else
  11. def self.valid_character
  12. case $KCODE
  13. when 'UTF8'
  14. VALID_CHARACTER['UTF-8']
  15. when 'SJIS'
  16. VALID_CHARACTER['Shift_JIS']
  17. end
  18. end
  19. end
  20. 1 if 'string'.respond_to?(:valid_encoding?)
  21. # Verifies the encoding of a string
  22. 1 def self.verify(string)
  23. string.valid_encoding?
  24. end
  25. else
  26. def self.verify(string)
  27. if expression = valid_character
  28. # Splits the string on character boundaries, which are determined based on $KCODE.
  29. string.split(//).all? { |c| expression =~ c }
  30. else
  31. true
  32. end
  33. end
  34. end
  35. # Verifies the encoding of the string and raises an exception when it's not valid
  36. 1 def self.verify!(string)
  37. raise EncodingError.new("Found characters with invalid encoding") unless verify(string)
  38. end
  39. 1 if 'string'.respond_to?(:force_encoding)
  40. # Removes all invalid characters from the string.
  41. #
  42. # Note: this method is a no-op in Ruby 1.9
  43. 1 def self.clean(string)
  44. string
  45. end
  46. else
  47. def self.clean(string)
  48. if expression = valid_character
  49. # Splits the string on character boundaries, which are determined based on $KCODE.
  50. string.split(//).grep(expression).join
  51. else
  52. string
  53. end
  54. end
  55. end
  56. end
  57. end

target/rubygems/gems/mail-2.7.1/lib/mail/network.rb

100.0% lines covered

12 relevant lines. 12 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/network/retriever_methods/base'
  3. 1 module Mail
  4. 1 register_autoload :SMTP, 'mail/network/delivery_methods/smtp'
  5. 1 register_autoload :FileDelivery, 'mail/network/delivery_methods/file_delivery'
  6. 1 register_autoload :LoggerDelivery, 'mail/network/delivery_methods/logger_delivery'
  7. 1 register_autoload :Sendmail, 'mail/network/delivery_methods/sendmail'
  8. 1 register_autoload :Exim, 'mail/network/delivery_methods/exim'
  9. 1 register_autoload :SMTPConnection, 'mail/network/delivery_methods/smtp_connection'
  10. 1 register_autoload :TestMailer, 'mail/network/delivery_methods/test_mailer'
  11. 1 register_autoload :POP3, 'mail/network/retriever_methods/pop3'
  12. 1 register_autoload :IMAP, 'mail/network/retriever_methods/imap'
  13. 1 register_autoload :TestRetriever, 'mail/network/retriever_methods/test_retriever'
  14. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/exim.rb

80.0% lines covered

5 relevant lines. 4 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. # A delivery method implementation which sends via exim.
  4. #
  5. # To use this, first find out where the exim binary is on your computer,
  6. # if you are on a mac or unix box, it is usually in /usr/sbin/exim, this will
  7. # be your exim location.
  8. #
  9. # Mail.defaults do
  10. # delivery_method :exim
  11. # end
  12. #
  13. # Or if your exim binary is not at '/usr/sbin/exim'
  14. #
  15. # Mail.defaults do
  16. # delivery_method :exim, :location => '/absolute/path/to/your/exim'
  17. # end
  18. #
  19. # Then just deliver the email as normal:
  20. #
  21. # Mail.deliver do
  22. # to 'mikel@test.lindsaar.net'
  23. # from 'ada@test.lindsaar.net'
  24. # subject 'testing exim'
  25. # body 'testing exim'
  26. # end
  27. #
  28. # Or by calling deliver on a Mail message
  29. #
  30. # mail = Mail.new do
  31. # to 'mikel@test.lindsaar.net'
  32. # from 'ada@test.lindsaar.net'
  33. # subject 'testing exim'
  34. # body 'testing exim'
  35. # end
  36. #
  37. # mail.deliver!
  38. 1 class Exim < Sendmail
  39. 1 DEFAULTS = {
  40. :location => '/usr/sbin/exim',
  41. :arguments => '-i -t'
  42. }
  43. 1 def self.call(path, arguments, destinations, encoded_message)
  44. super path, arguments, nil, encoded_message
  45. end
  46. end
  47. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/file_delivery.rb

50.0% lines covered

16 relevant lines. 8 lines covered and 8 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/check_delivery_params'
  3. 1 module Mail
  4. # FileDelivery class delivers emails into multiple files based on the destination
  5. # address. Each file is appended to if it already exists.
  6. #
  7. # So if you have an email going to fred@test, bob@test, joe@anothertest, and you
  8. # set your location path to /path/to/mails then FileDelivery will create the directory
  9. # if it does not exist, and put one copy of the email in three files, called
  10. # by their message id
  11. #
  12. # Make sure the path you specify with :location is writable by the Ruby process
  13. # running Mail.
  14. 1 class FileDelivery
  15. 1 if RUBY_VERSION >= '1.9.1'
  16. 1 require 'fileutils'
  17. else
  18. require 'ftools'
  19. end
  20. 1 attr_accessor :settings
  21. 1 def initialize(values)
  22. self.settings = { :location => './mails' }.merge!(values)
  23. end
  24. 1 def deliver!(mail)
  25. Mail::CheckDeliveryParams.check(mail)
  26. if ::File.respond_to?(:makedirs)
  27. ::File.makedirs settings[:location]
  28. else
  29. ::FileUtils.mkdir_p settings[:location]
  30. end
  31. mail.destinations.uniq.each do |to|
  32. ::File.open(::File.join(settings[:location], File.basename(to.to_s)), 'a') { |f| "#{f.write(mail.encoded)}\r\n\r\n" }
  33. end
  34. end
  35. end
  36. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/logger_delivery.rb

47.62% lines covered

21 relevant lines. 10 lines covered and 11 lines missed.
    
  1. 1 require 'mail/check_delivery_params'
  2. 1 module Mail
  3. 1 class LoggerDelivery
  4. 1 include Mail::CheckDeliveryParams
  5. 1 attr_reader :logger, :severity, :settings
  6. 1 def initialize(settings)
  7. @settings = settings
  8. @logger = settings.fetch(:logger) { default_logger }
  9. @severity = derive_severity(settings[:severity])
  10. end
  11. 1 def deliver!(mail)
  12. Mail::CheckDeliveryParams.check(mail)
  13. logger.log(severity) { mail.encoded }
  14. end
  15. 1 private
  16. 1 def default_logger
  17. require 'logger'
  18. ::Logger.new($stdout)
  19. end
  20. 1 def derive_severity(severity)
  21. case severity
  22. when nil
  23. Logger::INFO
  24. when Integer
  25. severity
  26. else
  27. Logger.const_get(severity.to_s.upcase)
  28. end
  29. end
  30. end
  31. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/sendmail.rb

44.0% lines covered

25 relevant lines. 11 lines covered and 14 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/check_delivery_params'
  3. 1 module Mail
  4. # A delivery method implementation which sends via sendmail.
  5. #
  6. # To use this, first find out where the sendmail binary is on your computer,
  7. # if you are on a mac or unix box, it is usually in /usr/sbin/sendmail, this will
  8. # be your sendmail location.
  9. #
  10. # Mail.defaults do
  11. # delivery_method :sendmail
  12. # end
  13. #
  14. # Or if your sendmail binary is not at '/usr/sbin/sendmail'
  15. #
  16. # Mail.defaults do
  17. # delivery_method :sendmail, :location => '/absolute/path/to/your/sendmail'
  18. # end
  19. #
  20. # Then just deliver the email as normal:
  21. #
  22. # Mail.deliver do
  23. # to 'mikel@test.lindsaar.net'
  24. # from 'ada@test.lindsaar.net'
  25. # subject 'testing sendmail'
  26. # body 'testing sendmail'
  27. # end
  28. #
  29. # Or by calling deliver on a Mail message
  30. #
  31. # mail = Mail.new do
  32. # to 'mikel@test.lindsaar.net'
  33. # from 'ada@test.lindsaar.net'
  34. # subject 'testing sendmail'
  35. # body 'testing sendmail'
  36. # end
  37. #
  38. # mail.deliver!
  39. 1 class Sendmail
  40. 1 DEFAULTS = {
  41. :location => '/usr/sbin/sendmail',
  42. :arguments => '-i'
  43. }
  44. 1 attr_accessor :settings
  45. 1 def initialize(values)
  46. self.settings = self.class::DEFAULTS.merge(values)
  47. end
  48. 1 def deliver!(mail)
  49. smtp_from, smtp_to, message = Mail::CheckDeliveryParams.check(mail)
  50. from = "-f #{self.class.shellquote(smtp_from)}" if smtp_from
  51. to = smtp_to.map { |_to| self.class.shellquote(_to) }.join(' ')
  52. arguments = "#{settings[:arguments]} #{from} --"
  53. self.class.call(settings[:location], arguments, to, message)
  54. end
  55. 1 def self.call(path, arguments, destinations, encoded_message)
  56. popen "#{path} #{arguments} #{destinations}" do |io|
  57. io.puts ::Mail::Utilities.binary_unsafe_to_lf(encoded_message)
  58. io.flush
  59. end
  60. end
  61. 1 if RUBY_VERSION < '1.9.0'
  62. def self.popen(command, &block)
  63. IO.popen "#{command} 2>&1", 'w+', &block
  64. end
  65. else
  66. 1 def self.popen(command, &block)
  67. IO.popen command, 'w+', :err => :out, &block
  68. end
  69. end
  70. # The following is an adaptation of ruby 1.9.2's shellwords.rb file,
  71. # with the following modifications:
  72. #
  73. # - Wraps in double quotes
  74. # - Allows '+' to accept email addresses with them
  75. # - Allows '~' as it is not unescaped in double quotes
  76. 1 def self.shellquote(address)
  77. # Process as a single byte sequence because not all shell
  78. # implementations are multibyte aware.
  79. #
  80. # A LF cannot be escaped with a backslash because a backslash + LF
  81. # combo is regarded as line continuation and simply ignored. Strip it.
  82. escaped = address.gsub(/([^A-Za-z0-9_\s\+\-.,:\/@~])/n, "\\\\\\1").gsub("\n", '')
  83. %("#{escaped}")
  84. end
  85. end
  86. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp.rb

32.35% lines covered

34 relevant lines. 11 lines covered and 23 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/check_delivery_params'
  3. 1 module Mail
  4. # == Sending Email with SMTP
  5. #
  6. # Mail allows you to send emails using SMTP. This is done by wrapping Net::SMTP in
  7. # an easy to use manner.
  8. #
  9. # === Sending via SMTP server on Localhost
  10. #
  11. # Sending locally (to a postfix or sendmail server running on localhost) requires
  12. # no special setup. Just to Mail.deliver &block or message.deliver! and it will
  13. # be sent in this method.
  14. #
  15. # === Sending via MobileMe
  16. #
  17. # Mail.defaults do
  18. # delivery_method :smtp, { :address => "smtp.me.com",
  19. # :port => 587,
  20. # :domain => 'your.host.name',
  21. # :user_name => '<username>',
  22. # :password => '<password>',
  23. # :authentication => 'plain',
  24. # :enable_starttls_auto => true }
  25. # end
  26. #
  27. # === Sending via GMail
  28. #
  29. # Mail.defaults do
  30. # delivery_method :smtp, { :address => "smtp.gmail.com",
  31. # :port => 587,
  32. # :domain => 'your.host.name',
  33. # :user_name => '<username>',
  34. # :password => '<password>',
  35. # :authentication => 'plain',
  36. # :enable_starttls_auto => true }
  37. # end
  38. #
  39. # === Certificate verification
  40. #
  41. # When using TLS, some mail servers provide certificates that are self-signed
  42. # or whose names do not exactly match the hostname given in the address.
  43. # OpenSSL will reject these by default. The best remedy is to use the correct
  44. # hostname or update the certificate authorities trusted by your ruby. If
  45. # that isn't possible, you can control this behavior with
  46. # an :openssl_verify_mode setting. Its value may be either an OpenSSL
  47. # verify mode constant (OpenSSL::SSL::VERIFY_NONE, OpenSSL::SSL::VERIFY_PEER),
  48. # or a string containing the name of an OpenSSL verify mode (none, peer).
  49. #
  50. # === Others
  51. #
  52. # Feel free to send me other examples that were tricky
  53. #
  54. # === Delivering the email
  55. #
  56. # Once you have the settings right, sending the email is done by:
  57. #
  58. # Mail.deliver do
  59. # to 'mikel@test.lindsaar.net'
  60. # from 'ada@test.lindsaar.net'
  61. # subject 'testing sendmail'
  62. # body 'testing sendmail'
  63. # end
  64. #
  65. # Or by calling deliver on a Mail message
  66. #
  67. # mail = Mail.new do
  68. # to 'mikel@test.lindsaar.net'
  69. # from 'ada@test.lindsaar.net'
  70. # subject 'testing sendmail'
  71. # body 'testing sendmail'
  72. # end
  73. #
  74. # mail.deliver!
  75. 1 class SMTP
  76. 1 attr_accessor :settings
  77. 1 DEFAULTS = {
  78. :address => 'localhost',
  79. :port => 25,
  80. :domain => 'localhost.localdomain',
  81. :user_name => nil,
  82. :password => nil,
  83. :authentication => nil,
  84. :enable_starttls => nil,
  85. :enable_starttls_auto => true,
  86. :openssl_verify_mode => nil,
  87. :ssl => nil,
  88. :tls => nil,
  89. :open_timeout => nil,
  90. :read_timeout => nil
  91. }
  92. 1 def initialize(values)
  93. self.settings = DEFAULTS.merge(values)
  94. end
  95. 1 def deliver!(mail)
  96. response = start_smtp_session do |smtp|
  97. Mail::SMTPConnection.new(:connection => smtp, :return_response => true).deliver!(mail)
  98. end
  99. settings[:return_response] ? response : self
  100. end
  101. 1 private
  102. 1 def start_smtp_session(&block)
  103. build_smtp_session.start(settings[:domain], settings[:user_name], settings[:password], settings[:authentication], &block)
  104. end
  105. 1 def build_smtp_session
  106. Net::SMTP.new(settings[:address], settings[:port]).tap do |smtp|
  107. if settings[:tls] || settings[:ssl]
  108. if smtp.respond_to?(:enable_tls)
  109. smtp.enable_tls(ssl_context)
  110. end
  111. elsif settings[:enable_starttls]
  112. if smtp.respond_to?(:enable_starttls)
  113. smtp.enable_starttls(ssl_context)
  114. end
  115. elsif settings[:enable_starttls_auto]
  116. if smtp.respond_to?(:enable_starttls_auto)
  117. smtp.enable_starttls_auto(ssl_context)
  118. end
  119. end
  120. smtp.open_timeout = settings[:open_timeout] if settings[:open_timeout]
  121. smtp.read_timeout = settings[:read_timeout] if settings[:read_timeout]
  122. end
  123. end
  124. # Allow SSL context to be configured via settings, for Ruby >= 1.9
  125. # Just returns openssl verify mode for Ruby 1.8.x
  126. 1 def ssl_context
  127. openssl_verify_mode = settings[:openssl_verify_mode]
  128. if openssl_verify_mode.kind_of?(String)
  129. openssl_verify_mode = OpenSSL::SSL.const_get("VERIFY_#{openssl_verify_mode.upcase}")
  130. end
  131. context = Net::SMTP.default_ssl_context
  132. context.verify_mode = openssl_verify_mode if openssl_verify_mode
  133. context.ca_path = settings[:ca_path] if settings[:ca_path]
  134. context.ca_file = settings[:ca_file] if settings[:ca_file]
  135. context
  136. end
  137. end
  138. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/smtp_connection.rb

53.33% lines covered

15 relevant lines. 8 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/check_delivery_params'
  3. 1 module Mail
  4. # == Sending Email with SMTP
  5. #
  6. # Mail allows you to send emails using an open SMTP connection. This is done by
  7. # passing a created Net::SMTP object. This way we can get better performance to
  8. # our local mail server by reducing the number of connections at any one time.
  9. #
  10. # === Sending via SMTP server on Localhost
  11. #
  12. # To send mail open a connection with Net::Smtp using any options you like
  13. # === Delivering the email
  14. #
  15. # Once you have the settings right, sending the email is done by:
  16. #
  17. # smtp_conn = Net::SMTP.start(settings[:address], settings[:port])
  18. # Mail.defaults do
  19. # delivery_method :smtp_connection, { :connection => smtp_conn }
  20. # end
  21. #
  22. # Mail.deliver do
  23. # to 'mikel@test.lindsaar.net'
  24. # from 'ada@test.lindsaar.net'
  25. # subject 'testing sendmail'
  26. # body 'testing sendmail'
  27. # end
  28. #
  29. # Or by calling deliver on a Mail message
  30. #
  31. # mail = Mail.new do
  32. # to 'mikel@test.lindsaar.net'
  33. # from 'ada@test.lindsaar.net'
  34. # subject 'testing sendmail'
  35. # body 'testing sendmail'
  36. # end
  37. #
  38. # mail.deliver!
  39. 1 class SMTPConnection
  40. 1 attr_accessor :smtp, :settings
  41. 1 def initialize(values)
  42. raise ArgumentError.new('A Net::SMTP object is required for this delivery method') if values[:connection].nil?
  43. self.smtp = values[:connection]
  44. self.settings = values
  45. end
  46. # Send the message via SMTP.
  47. # The from and to attributes are optional. If not set, they are retrieve from the Message.
  48. 1 def deliver!(mail)
  49. smtp_from, smtp_to, message = Mail::CheckDeliveryParams.check(mail)
  50. response = smtp.sendmail(dot_stuff(message), smtp_from, smtp_to)
  51. settings[:return_response] ? response : self
  52. end
  53. 1 private
  54. # This is Net::SMTP's job, but before Ruby 2.x it does not dot-stuff
  55. # an unterminated last line: https://bugs.ruby-lang.org/issues/9627
  56. 1 def dot_stuff(message)
  57. message.gsub(/(\r\n\.)(\r\n|$)/, '\1.\2')
  58. end
  59. end
  60. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/delivery_methods/test_mailer.rb

69.23% lines covered

13 relevant lines. 9 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'mail/check_delivery_params'
  3. 1 module Mail
  4. # The TestMailer is a bare bones mailer that does nothing. It is useful
  5. # when you are testing.
  6. #
  7. # It also provides a template of the minimum methods you require to implement
  8. # if you want to make a custom mailer for Mail
  9. 1 class TestMailer
  10. # Provides a store of all the emails sent with the TestMailer so you can check them.
  11. 1 def self.deliveries
  12. 6 @@deliveries ||= []
  13. end
  14. # Allows you to over write the default deliveries store from an array to some
  15. # other object. If you just want to clear the store,
  16. # call TestMailer.deliveries.clear.
  17. #
  18. # If you place another object here, please make sure it responds to:
  19. #
  20. # * << (message)
  21. # * clear
  22. # * length
  23. # * size
  24. # * and other common Array methods
  25. 1 def self.deliveries=(val)
  26. @@deliveries = val
  27. end
  28. 1 attr_accessor :settings
  29. 1 def initialize(values)
  30. @settings = values.dup
  31. end
  32. 1 def deliver!(mail)
  33. Mail::CheckDeliveryParams.check(mail)
  34. Mail::TestMailer.deliveries << mail
  35. end
  36. end
  37. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/base.rb

30.0% lines covered

20 relevant lines. 6 lines covered and 14 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 class Retriever
  5. # Get the oldest received email(s)
  6. #
  7. # Possible options:
  8. # count: number of emails to retrieve. The default value is 1.
  9. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  10. #
  11. 1 def first(options = {}, &block)
  12. options ||= {}
  13. options[:what] = :first
  14. options[:count] ||= 1
  15. find(options, &block)
  16. end
  17. # Get the most recent received email(s)
  18. #
  19. # Possible options:
  20. # count: number of emails to retrieve. The default value is 1.
  21. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  22. #
  23. 1 def last(options = {}, &block)
  24. options ||= {}
  25. options[:what] = :last
  26. options[:count] ||= 1
  27. find(options, &block)
  28. end
  29. # Get all emails.
  30. #
  31. # Possible options:
  32. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  33. #
  34. 1 def all(options = {}, &block)
  35. options ||= {}
  36. options[:count] = :all
  37. find(options, &block)
  38. end
  39. # Find emails in the mailbox, and then deletes them. Without any options, the
  40. # five last received emails are returned.
  41. #
  42. # Possible options:
  43. # what: last or first emails. The default is :first.
  44. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  45. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an
  46. # instance of Message, not an array of Message instances.
  47. # delete_after_find: flag for whether to delete each retreived email after find. Default
  48. # is true. Call #find if you would like this to default to false.
  49. #
  50. 1 def find_and_delete(options = {}, &block)
  51. options ||= {}
  52. options[:delete_after_find] ||= true
  53. find(options, &block)
  54. end
  55. end
  56. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/imap.rb

14.86% lines covered

74 relevant lines. 11 lines covered and 63 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # The IMAP retriever allows to get the last, first or all emails from a IMAP server.
  5. # Each email retrieved (RFC2822) is given as an instance of +Message+.
  6. #
  7. # While being retrieved, emails can be yielded if a block is given.
  8. #
  9. # === Example of retrieving Emails from GMail:
  10. #
  11. # Mail.defaults do
  12. # retriever_method :imap, { :address => "imap.googlemail.com",
  13. # :port => 993,
  14. # :user_name => '<username>',
  15. # :password => '<password>',
  16. # :enable_ssl => true }
  17. # end
  18. #
  19. # Mail.all #=> Returns an array of all emails
  20. # Mail.first #=> Returns the first unread email
  21. # Mail.last #=> Returns the last unread email
  22. #
  23. # You can also pass options into Mail.find to locate an email in your imap mailbox
  24. # with the following options:
  25. #
  26. # mailbox: name of the mailbox used for email retrieval. The default is 'INBOX'.
  27. # what: last or first emails. The default is :first.
  28. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  29. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an
  30. # instance of Message, not an array of Message instances.
  31. # keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
  32. # or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list
  33. # The default is 'ALL'
  34. #
  35. # Mail.find(:what => :first, :count => 10, :order => :asc, :keys=>'ALL')
  36. # #=> Returns the first 10 emails in ascending order
  37. #
  38. 1 class IMAP < Retriever
  39. 1 require 'net/imap' unless defined?(Net::IMAP)
  40. 1 def initialize(values)
  41. self.settings = { :address => "localhost",
  42. :port => 143,
  43. :user_name => nil,
  44. :password => nil,
  45. :authentication => nil,
  46. :enable_ssl => false,
  47. :enable_starttls => false }.merge!(values)
  48. end
  49. 1 attr_accessor :settings
  50. # Find emails in a IMAP mailbox. Without any options, the 10 last received emails are returned.
  51. #
  52. # Possible options:
  53. # mailbox: mailbox to search the email(s) in. The default is 'INBOX'.
  54. # what: last or first emails. The default is :first.
  55. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  56. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an
  57. # instance of Message, not an array of Message instances.
  58. # read_only: will ensure that no writes are made to the inbox during the session. Specifically, if this is
  59. # set to true, the code will use the EXAMINE command to retrieve the mail. If set to false, which
  60. # is the default, a SELECT command will be used to retrieve the mail
  61. # This is helpful when you don't want your messages to be set to read automatically. Default is false.
  62. # delete_after_find: flag for whether to delete each retreived email after find. Default
  63. # is false. Use #find_and_delete if you would like this to default to true.
  64. # keys: are passed as criteria to the SEARCH command. They can either be a string holding the entire search string,
  65. # or a single-dimension array of search keywords and arguments. Refer to [IMAP] section 6.4.4 for a full list
  66. # The default is 'ALL'
  67. # search_charset: charset to pass to IMAP server search. Omitted by default. Example: 'UTF-8' or 'ASCII'.
  68. #
  69. 1 def find(options={}, &block)
  70. options = validate_options(options)
  71. start do |imap|
  72. options[:read_only] ? imap.examine(options[:mailbox]) : imap.select(options[:mailbox])
  73. uids = imap.uid_search(options[:keys], options[:search_charset])
  74. uids.reverse! if options[:what].to_sym == :last
  75. uids = uids.first(options[:count]) if options[:count].is_a?(Integer)
  76. uids.reverse! if (options[:what].to_sym == :last && options[:order].to_sym == :asc) ||
  77. (options[:what].to_sym != :last && options[:order].to_sym == :desc)
  78. if block_given?
  79. uids.each do |uid|
  80. uid = options[:uid].to_i unless options[:uid].nil?
  81. fetchdata = imap.uid_fetch(uid, ['RFC822', 'FLAGS'])[0]
  82. new_message = Mail.new(fetchdata.attr['RFC822'])
  83. new_message.mark_for_delete = true if options[:delete_after_find]
  84. if block.arity == 4
  85. yield new_message, imap, uid, fetchdata.attr['FLAGS']
  86. elsif block.arity == 3
  87. yield new_message, imap, uid
  88. else
  89. yield new_message
  90. end
  91. imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED]) if options[:delete_after_find] && new_message.is_marked_for_delete?
  92. break unless options[:uid].nil?
  93. end
  94. imap.expunge if options[:delete_after_find]
  95. else
  96. emails = []
  97. uids.each do |uid|
  98. uid = options[:uid].to_i unless options[:uid].nil?
  99. fetchdata = imap.uid_fetch(uid, ['RFC822'])[0]
  100. emails << Mail.new(fetchdata.attr['RFC822'])
  101. imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED]) if options[:delete_after_find]
  102. break unless options[:uid].nil?
  103. end
  104. imap.expunge if options[:delete_after_find]
  105. emails.size == 1 && options[:count] == 1 ? emails.first : emails
  106. end
  107. end
  108. end
  109. # Delete all emails from a IMAP mailbox
  110. 1 def delete_all(mailbox='INBOX')
  111. mailbox ||= 'INBOX'
  112. mailbox = Net::IMAP.encode_utf7(mailbox)
  113. start do |imap|
  114. imap.select(mailbox)
  115. imap.uid_search(['ALL']).each do |uid|
  116. imap.uid_store(uid, "+FLAGS", [Net::IMAP::DELETED])
  117. end
  118. imap.expunge
  119. end
  120. end
  121. # Returns the connection object of the retrievable (IMAP or POP3)
  122. 1 def connection(&block)
  123. raise ArgumentError.new('Mail::Retrievable#connection takes a block') unless block_given?
  124. start do |imap|
  125. yield imap
  126. end
  127. end
  128. 1 private
  129. # Set default options
  130. 1 def validate_options(options)
  131. options ||= {}
  132. options[:mailbox] ||= 'INBOX'
  133. options[:count] ||= 10
  134. options[:order] ||= :asc
  135. options[:what] ||= :first
  136. options[:keys] ||= 'ALL'
  137. options[:uid] ||= nil
  138. options[:delete_after_find] ||= false
  139. options[:mailbox] = Net::IMAP.encode_utf7(options[:mailbox])
  140. options[:read_only] ||= false
  141. options
  142. end
  143. # Start an IMAP session and ensures that it will be closed in any case.
  144. 1 def start(config=Mail::Configuration.instance, &block)
  145. raise ArgumentError.new("Mail::Retrievable#imap_start takes a block") unless block_given?
  146. if settings[:enable_starttls] && settings[:enable_ssl]
  147. raise ArgumentError, ":enable_starttls and :enable_ssl are mutually exclusive. Set :enable_ssl if you're on an IMAPS connection. Set :enable_starttls if you're on an IMAP connection and using STARTTLS for secure TLS upgrade."
  148. end
  149. imap = Net::IMAP.new(settings[:address], settings[:port], settings[:enable_ssl], nil, false)
  150. imap.starttls if settings[:enable_starttls]
  151. if settings[:authentication].nil?
  152. imap.login(settings[:user_name], settings[:password])
  153. else
  154. # Note that Net::IMAP#authenticate('LOGIN', ...) is not equal with Net::IMAP#login(...)!
  155. # (see also http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/imap/rdoc/classes/Net/IMAP.html#M000718)
  156. imap.authenticate(settings[:authentication], settings[:user_name], settings[:password])
  157. end
  158. yield imap
  159. ensure
  160. if defined?(imap) && imap && !imap.disconnected?
  161. imap.disconnect
  162. end
  163. end
  164. end
  165. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/pop3.rb

21.57% lines covered

51 relevant lines. 11 lines covered and 40 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. # The Pop3 retriever allows to get the last, first or all emails from a POP3 server.
  5. # Each email retrieved (RFC2822) is given as an instance of +Message+.
  6. #
  7. # While being retrieved, emails can be yielded if a block is given.
  8. #
  9. # === Example of retrieving Emails from GMail:
  10. #
  11. # Mail.defaults do
  12. # retriever_method :pop3, { :address => "pop.gmail.com",
  13. # :port => 995,
  14. # :user_name => '<username>',
  15. # :password => '<password>',
  16. # :enable_ssl => true }
  17. # end
  18. #
  19. # Mail.all #=> Returns an array of all emails
  20. # Mail.first #=> Returns the first unread email
  21. # Mail.last #=> Returns the last unread email
  22. #
  23. # You can also pass options into Mail.find to locate an email in your pop mailbox
  24. # with the following options:
  25. #
  26. # what: last or first emails. The default is :first.
  27. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  28. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an
  29. # instance of Message, not an array of Message instances.
  30. #
  31. # Mail.find(:what => :first, :count => 10, :order => :asc)
  32. # #=> Returns the first 10 emails in ascending order
  33. #
  34. 1 class POP3 < Retriever
  35. 1 require 'net/pop' unless defined?(Net::POP)
  36. 1 def initialize(values)
  37. self.settings = { :address => "localhost",
  38. :port => 110,
  39. :user_name => nil,
  40. :password => nil,
  41. :authentication => nil,
  42. :enable_ssl => false,
  43. :read_timeout => nil }.merge!(values)
  44. end
  45. 1 attr_accessor :settings
  46. # Find emails in a POP3 mailbox. Without any options, the 5 last received emails are returned.
  47. #
  48. # Possible options:
  49. # what: last or first emails. The default is :first.
  50. # order: order of emails returned. Possible values are :asc or :desc. Default value is :asc.
  51. # count: number of emails to retrieve. The default value is 10. A value of 1 returns an
  52. # instance of Message, not an array of Message instances.
  53. # delete_after_find: flag for whether to delete each retreived email after find. Default
  54. # is false. Use #find_and_delete if you would like this to default to true.
  55. #
  56. 1 def find(options = {}, &block)
  57. options = validate_options(options)
  58. start do |pop3|
  59. mails = pop3.mails
  60. pop3.reset # Clears all "deleted" marks. This prevents non-explicit/accidental deletions due to server settings.
  61. mails.sort! { |m1, m2| m2.number <=> m1.number } if options[:what] == :last
  62. mails = mails.first(options[:count]) if options[:count].is_a? Integer
  63. if options[:what].to_sym == :last && options[:order].to_sym == :desc ||
  64. options[:what].to_sym == :first && options[:order].to_sym == :asc ||
  65. mails.reverse!
  66. end
  67. if block_given?
  68. mails.each do |mail|
  69. new_message = Mail.new(mail.pop)
  70. new_message.mark_for_delete = true if options[:delete_after_find]
  71. yield new_message
  72. mail.delete if options[:delete_after_find] && new_message.is_marked_for_delete? # Delete if still marked for delete
  73. end
  74. else
  75. emails = []
  76. mails.each do |mail|
  77. emails << Mail.new(mail.pop)
  78. mail.delete if options[:delete_after_find]
  79. end
  80. emails.size == 1 && options[:count] == 1 ? emails.first : emails
  81. end
  82. end
  83. end
  84. # Delete all emails from a POP3 server
  85. 1 def delete_all
  86. start do |pop3|
  87. unless pop3.mails.empty?
  88. pop3.delete_all
  89. pop3.finish
  90. end
  91. end
  92. end
  93. # Returns the connection object of the retrievable (IMAP or POP3)
  94. 1 def connection(&block)
  95. raise ArgumentError.new('Mail::Retrievable#connection takes a block') unless block_given?
  96. start do |pop3|
  97. yield pop3
  98. end
  99. end
  100. 1 private
  101. # Set default options
  102. 1 def validate_options(options)
  103. options ||= {}
  104. options[:count] ||= 10
  105. options[:order] ||= :asc
  106. options[:what] ||= :first
  107. options[:delete_after_find] ||= false
  108. options
  109. end
  110. # Start a POP3 session and ensure that it will be closed in any case. Any messages
  111. # marked for deletion via #find_and_delete or with the :delete_after_find option
  112. # will be deleted when the session is closed.
  113. 1 def start(config = Configuration.instance, &block)
  114. raise ArgumentError.new("Mail::Retrievable#pop3_start takes a block") unless block_given?
  115. pop3 = Net::POP3.new(settings[:address], settings[:port], false)
  116. pop3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if settings[:enable_ssl]
  117. pop3.read_timeout = settings[:read_timeout] if settings[:read_timeout]
  118. pop3.start(settings[:user_name], settings[:password])
  119. yield pop3
  120. ensure
  121. if defined?(pop3) && pop3 && pop3.started?
  122. pop3.finish
  123. end
  124. end
  125. end
  126. end

target/rubygems/gems/mail-2.7.1/lib/mail/network/retriever_methods/test_retriever.rb

24.0% lines covered

25 relevant lines. 6 lines covered and 19 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 class TestRetriever < Retriever
  5. 1 def self.emails
  6. @@emails
  7. end
  8. 1 def self.emails=(val)
  9. @@emails = val
  10. end
  11. 1 def initialize(values)
  12. @@emails = []
  13. end
  14. 1 def find(options = {}, &block)
  15. options[:count] ||= :all
  16. options[:order] ||= :asc
  17. options[:what] ||= :first
  18. emails_index = (0...@@emails.size).to_a
  19. emails_index.reverse! if options[:what] == :last
  20. emails_index = case count = options[:count]
  21. when :all then emails_index
  22. when Integer then emails_index[0, count]
  23. else
  24. raise 'Invalid count option value: ' + count.inspect
  25. end
  26. if options[:what] == :last && options[:order] == :asc || options[:what] == :first && options[:order] == :desc
  27. emails_index.reverse!
  28. end
  29. emails_index.each { |idx| @@emails[idx].mark_for_delete = true } if options[:delete_after_find]
  30. emails = emails_index.map { |idx| @@emails[idx] }
  31. emails.each { |email| yield email } if block_given?
  32. @@emails.reject!(&:is_marked_for_delete?) if options[:delete_after_find]
  33. emails.size == 1 && options[:count] == 1 ? emails.first : emails
  34. end
  35. end
  36. end

target/rubygems/gems/mail-2.7.1/lib/mail/parser_tools.rb

57.14% lines covered

7 relevant lines. 4 lines covered and 3 lines missed.
    
  1. 1 module Mail
  2. # Extends each field parser with utility methods.
  3. 1 module ParserTools #:nodoc:
  4. # Slice bytes from ASCII-8BIT data and mark as UTF-8.
  5. 1 if 'string'.respond_to?(:force_encoding)
  6. 1 def chars(data, from_bytes, to_bytes)
  7. data.slice(from_bytes..to_bytes).force_encoding(Encoding::UTF_8)
  8. end
  9. else
  10. def chars(data, from_bytes, to_bytes)
  11. data.slice(from_bytes..to_bytes)
  12. end
  13. end
  14. end
  15. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers.rb

100.0% lines covered

14 relevant lines. 14 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. # Ragel-generated parsers are full of known warnings. Suppress them.
  3. 1 begin
  4. 1 orig, $VERBOSE = $VERBOSE, nil
  5. 1 require 'mail/parsers/address_lists_parser'
  6. 1 require 'mail/parsers/content_disposition_parser'
  7. 1 require 'mail/parsers/content_location_parser'
  8. 1 require 'mail/parsers/content_transfer_encoding_parser'
  9. 1 require 'mail/parsers/content_type_parser'
  10. 1 require 'mail/parsers/date_time_parser'
  11. 1 require 'mail/parsers/envelope_from_parser'
  12. 1 require 'mail/parsers/message_ids_parser'
  13. 1 require 'mail/parsers/mime_version_parser'
  14. 1 require 'mail/parsers/phrase_lists_parser'
  15. 1 require 'mail/parsers/received_parser'
  16. ensure
  17. 1 $VERBOSE = orig
  18. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/address_lists_parser.rb

6.05% lines covered

843 relevant lines. 51 lines covered and 792 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module AddressListsParser
  6. 1 extend Mail::ParserTools
  7. 1 AddressListStruct = Struct.new(:addresses, :group_names, :error)
  8. 1 AddressStruct = Struct.new(:raw, :domain, :comments, :local,
  9. :obs_domain_list, :display_name, :group, :error)
  10. 1 class << self
  11. 1 attr_accessor :_trans_keys
  12. 1 private :_trans_keys, :_trans_keys=
  13. end
  14. 1 self._trans_keys = [
  15. 0, 0, 9, 244, 10, 10,
  16. 9, 32, 10, 10, 9,
  17. 32, 9, 244, 10, 10,
  18. 9, 32, 1, 244, 1, 244,
  19. 10, 10, 9, 32, 0,
  20. 244, 128, 191, 160, 191,
  21. 128, 191, 128, 159, 144, 191,
  22. 128, 191, 128, 143, 9,
  23. 244, 9, 244, 9, 244,
  24. 10, 10, 9, 32, 9, 244,
  25. 9, 244, 9, 244, 10,
  26. 10, 9, 32, 9, 244,
  27. 9, 64, 10, 10, 9, 32,
  28. 9, 64, 9, 244, 10,
  29. 10, 9, 32, 9, 244,
  30. 9, 64, 10, 10, 9, 32,
  31. 9, 64, 10, 10, 9,
  32. 32, 10, 10, 9, 32,
  33. 10, 10, 9, 32, 9, 244,
  34. 9, 244, 10, 10, 9,
  35. 32, 10, 10, 9, 32,
  36. 9, 244, 9, 244, 10, 10,
  37. 9, 32, 9, 244, 9,
  38. 244, 10, 10, 9, 32,
  39. 9, 244, 10, 10, 9, 32,
  40. 1, 244, 1, 244, 10,
  41. 10, 9, 32, 0, 244,
  42. 128, 191, 160, 191, 128, 191,
  43. 128, 159, 144, 191, 128,
  44. 191, 128, 143, 9, 244,
  45. 9, 244, 9, 244, 10, 10,
  46. 9, 32, 9, 244, 9,
  47. 244, 9, 244, 10, 10,
  48. 9, 32, 9, 244, 9, 64,
  49. 10, 10, 9, 32, 9,
  50. 64, 9, 244, 10, 10,
  51. 9, 32, 9, 244, 9, 64,
  52. 10, 10, 9, 32, 9,
  53. 64, 9, 59, 10, 10,
  54. 9, 32, 9, 59, 9, 244,
  55. 9, 244, 10, 10, 9,
  56. 32, 1, 244, 1, 244,
  57. 10, 10, 9, 32, 9, 244,
  58. 9, 244, 10, 10, 9,
  59. 32, 9, 244, 9, 244,
  60. 9, 244, 10, 10, 9, 32,
  61. 9, 244, 9, 244, 10,
  62. 10, 9, 32, 9, 244,
  63. 10, 10, 9, 32, 9, 244,
  64. 9, 244, 10, 10, 9,
  65. 32, 9, 244, 10, 10,
  66. 9, 32, 1, 244, 1, 244,
  67. 10, 10, 9, 32, 0,
  68. 244, 128, 191, 160, 191,
  69. 128, 191, 128, 159, 144, 191,
  70. 128, 191, 128, 143, 9,
  71. 244, 9, 244, 9, 244,
  72. 10, 10, 9, 32, 9, 244,
  73. 9, 244, 9, 244, 10,
  74. 10, 9, 32, 9, 244,
  75. 9, 64, 10, 10, 9, 32,
  76. 9, 64, 9, 244, 10,
  77. 10, 9, 32, 9, 244,
  78. 9, 64, 10, 10, 9, 32,
  79. 9, 64, 9, 59, 10,
  80. 10, 9, 32, 9, 59,
  81. 9, 244, 9, 244, 10, 10,
  82. 9, 32, 1, 244, 1,
  83. 244, 10, 10, 9, 32,
  84. 9, 244, 9, 244, 10, 10,
  85. 9, 32, 9, 244, 9,
  86. 244, 9, 244, 10, 10,
  87. 9, 32, 9, 244, 9, 244,
  88. 10, 10, 9, 32, 9,
  89. 244, 9, 244, 9, 244,
  90. 10, 10, 9, 32, 9, 244,
  91. 9, 244, 10, 10, 9,
  92. 32, 9, 244, 9, 244,
  93. 9, 244, 10, 10, 9, 32,
  94. 9, 244, 128, 191, 160,
  95. 191, 128, 191, 128, 159,
  96. 144, 191, 128, 191, 128, 143,
  97. 9, 244, 128, 191, 160,
  98. 191, 128, 191, 128, 159,
  99. 144, 191, 128, 191, 128, 143,
  100. 1, 244, 1, 244, 10,
  101. 10, 9, 32, 9, 244,
  102. 9, 244, 10, 10, 9, 32,
  103. 9, 244, 9, 244, 128,
  104. 191, 160, 191, 128, 191,
  105. 128, 159, 144, 191, 128, 191,
  106. 128, 143, 0, 244, 128,
  107. 191, 160, 191, 128, 191,
  108. 128, 159, 144, 191, 128, 191,
  109. 128, 143, 1, 244, 10,
  110. 10, 9, 32, 9, 244,
  111. 128, 191, 160, 191, 128, 191,
  112. 128, 159, 144, 191, 128,
  113. 191, 128, 143, 9, 244,
  114. 33, 244, 9, 244, 9, 59,
  115. 10, 10, 9, 32, 9,
  116. 59, 1, 244, 1, 244,
  117. 10, 10, 9, 32, 0, 244,
  118. 128, 191, 160, 191, 128,
  119. 191, 128, 159, 144, 191,
  120. 128, 191, 128, 143, 10, 10,
  121. 9, 32, 128, 191, 160,
  122. 191, 128, 191, 128, 159,
  123. 144, 191, 128, 191, 128, 143,
  124. 1, 244, 10, 10, 9,
  125. 32, 0, 244, 128, 191,
  126. 160, 191, 128, 191, 128, 159,
  127. 144, 191, 128, 191, 128,
  128. 143, 128, 191, 160, 191,
  129. 128, 191, 128, 159, 144, 191,
  130. 128, 191, 128, 143, 1,
  131. 244, 1, 244, 10, 10,
  132. 9, 32, 0, 244, 128, 191,
  133. 160, 191, 128, 191, 128,
  134. 159, 144, 191, 128, 191,
  135. 128, 143, 9, 244, 9, 244,
  136. 9, 244, 10, 10, 9,
  137. 32, 9, 244, 1, 244,
  138. 1, 244, 10, 10, 9, 32,
  139. 0, 244, 128, 191, 160,
  140. 191, 128, 191, 128, 159,
  141. 144, 191, 128, 191, 128, 143,
  142. 1, 244, 10, 10, 9,
  143. 32, 9, 244, 9, 244,
  144. 10, 10, 9, 32, 9, 244,
  145. 9, 244, 9, 244, 10,
  146. 10, 9, 32, 9, 244,
  147. 9, 59, 10, 10, 9, 32,
  148. 9, 59, 9, 244, 10,
  149. 10, 9, 32, 9, 244,
  150. 128, 191, 160, 191, 128, 191,
  151. 128, 159, 144, 191, 128,
  152. 191, 128, 143, 9, 244,
  153. 9, 244, 128, 191, 160, 191,
  154. 128, 191, 128, 159, 144,
  155. 191, 128, 191, 128, 143,
  156. 9, 244, 128, 191, 160, 191,
  157. 128, 191, 128, 159, 144,
  158. 191, 128, 191, 128, 143,
  159. 9, 244, 9, 244, 10, 10,
  160. 9, 32, 9, 244, 1,
  161. 244, 1, 244, 10, 10,
  162. 9, 32, 9, 244, 9, 244,
  163. 0, 244, 128, 191, 160,
  164. 191, 128, 191, 128, 159,
  165. 144, 191, 128, 191, 128, 143,
  166. 1, 244, 10, 10, 9,
  167. 32, 128, 191, 160, 191,
  168. 128, 191, 128, 159, 144, 191,
  169. 128, 191, 128, 143, 0,
  170. 244, 128, 191, 160, 191,
  171. 128, 191, 128, 159, 144, 191,
  172. 128, 191, 128, 143, 1,
  173. 244, 10, 10, 9, 32,
  174. 9, 244, 10, 10, 9, 32,
  175. 9, 244, 9, 244, 33,
  176. 244, 9, 244, 9, 64,
  177. 10, 10, 9, 32, 9, 64,
  178. 1, 244, 1, 244, 10,
  179. 10, 9, 32, 0, 244,
  180. 128, 191, 160, 191, 128, 191,
  181. 128, 159, 144, 191, 128,
  182. 191, 128, 143, 10, 10,
  183. 9, 32, 128, 191, 160, 191,
  184. 128, 191, 128, 159, 144,
  185. 191, 128, 191, 128, 143,
  186. 9, 244, 9, 244, 9, 244,
  187. 10, 10, 9, 32, 9,
  188. 244, 9, 62, 10, 10,
  189. 9, 32, 9, 62, 9, 244,
  190. 10, 10, 9, 32, 9,
  191. 244, 128, 191, 160, 191,
  192. 128, 191, 128, 159, 144, 191,
  193. 128, 191, 128, 143, 9,
  194. 244, 1, 244, 1, 244,
  195. 10, 10, 9, 32, 9, 244,
  196. 9, 62, 10, 10, 9,
  197. 32, 9, 62, 33, 244,
  198. 128, 191, 160, 191, 128, 191,
  199. 128, 159, 144, 191, 128,
  200. 191, 128, 143, 0, 244,
  201. 128, 191, 160, 191, 128, 191,
  202. 128, 159, 144, 191, 128,
  203. 191, 128, 143, 10, 10,
  204. 9, 32, 9, 244, 128, 191,
  205. 160, 191, 128, 191, 128,
  206. 159, 144, 191, 128, 191,
  207. 128, 143, 9, 244, 1, 244,
  208. 10, 10, 9, 32, 0,
  209. 244, 128, 191, 160, 191,
  210. 128, 191, 128, 159, 144, 191,
  211. 128, 191, 128, 143, 128,
  212. 191, 160, 191, 128, 191,
  213. 128, 159, 144, 191, 128, 191,
  214. 128, 143, 1, 244, 1,
  215. 244, 10, 10, 9, 32,
  216. 0, 244, 128, 191, 160, 191,
  217. 128, 191, 128, 159, 144,
  218. 191, 128, 191, 128, 143,
  219. 9, 244, 1, 244, 1, 244,
  220. 10, 10, 9, 32, 9,
  221. 244, 9, 64, 10, 10,
  222. 9, 32, 9, 64, 128, 191,
  223. 160, 191, 128, 191, 128,
  224. 159, 144, 191, 128, 191,
  225. 128, 143, 0, 244, 128, 191,
  226. 160, 191, 128, 191, 128,
  227. 159, 144, 191, 128, 191,
  228. 128, 143, 10, 10, 9, 32,
  229. 9, 244, 9, 244, 10,
  230. 10, 9, 32, 9, 244,
  231. 1, 244, 1, 244, 10, 10,
  232. 9, 32, 9, 244, 0,
  233. 244, 128, 191, 160, 191,
  234. 128, 191, 128, 159, 144, 191,
  235. 128, 191, 128, 143, 1,
  236. 244, 10, 10, 9, 32,
  237. 128, 191, 160, 191, 128, 191,
  238. 128, 159, 144, 191, 128,
  239. 191, 128, 143, 1, 244,
  240. 1, 244, 10, 10, 9, 32,
  241. 9, 244, 9, 64, 10,
  242. 10, 9, 32, 9, 64,
  243. 0, 244, 128, 191, 160, 191,
  244. 128, 191, 128, 159, 144,
  245. 191, 128, 191, 128, 143,
  246. 1, 244, 10, 10, 9, 32,
  247. 9, 64, 10, 10, 9,
  248. 32, 9, 64, 9, 244,
  249. 9, 64, 10, 10, 9, 32,
  250. 9, 64, 9, 244, 9,
  251. 244, 10, 10, 9, 32,
  252. 9, 244, 9, 58, 10, 10,
  253. 9, 32, 9, 58, 9,
  254. 64, 10, 10, 9, 32,
  255. 9, 64, 9, 244, 9, 244,
  256. 10, 10, 9, 32, 9,
  257. 244, 33, 244, 9, 244,
  258. 10, 10, 9, 32, 9, 244,
  259. 128, 191, 160, 191, 128,
  260. 191, 128, 159, 144, 191,
  261. 128, 191, 128, 143, 9, 244,
  262. 1, 244, 1, 244, 10,
  263. 10, 9, 32, 9, 244,
  264. 9, 58, 10, 10, 9, 32,
  265. 9, 58, 33, 244, 128,
  266. 191, 160, 191, 128, 191,
  267. 128, 159, 144, 191, 128, 191,
  268. 128, 143, 0, 244, 128,
  269. 191, 160, 191, 128, 191,
  270. 128, 159, 144, 191, 128, 191,
  271. 128, 143, 10, 10, 9,
  272. 32, 9, 244, 128, 191,
  273. 160, 191, 128, 191, 128, 159,
  274. 144, 191, 128, 191, 128,
  275. 143, 9, 244, 1, 244,
  276. 10, 10, 9, 32, 0, 244,
  277. 128, 191, 160, 191, 128,
  278. 191, 128, 159, 144, 191,
  279. 128, 191, 128, 143, 9, 244,
  280. 9, 244, 10, 10, 9,
  281. 32, 9, 244, 9, 244,
  282. 10, 10, 9, 32, 9, 244,
  283. 9, 244, 9, 244, 10,
  284. 10, 9, 32, 9, 244,
  285. 128, 191, 160, 191, 128, 191,
  286. 128, 159, 144, 191, 128,
  287. 191, 128, 143, 9, 244,
  288. 128, 191, 160, 191, 128, 191,
  289. 128, 159, 144, 191, 128,
  290. 191, 128, 143, 1, 244,
  291. 1, 244, 10, 10, 9, 32,
  292. 9, 244, 9, 244, 10,
  293. 10, 9, 32, 9, 244,
  294. 9, 244, 128, 191, 160, 191,
  295. 128, 191, 128, 159, 144,
  296. 191, 128, 191, 128, 143,
  297. 0, 244, 128, 191, 160, 191,
  298. 128, 191, 128, 159, 144,
  299. 191, 128, 191, 128, 143,
  300. 1, 244, 10, 10, 9, 32,
  301. 9, 244, 128, 191, 160,
  302. 191, 128, 191, 128, 159,
  303. 144, 191, 128, 191, 128, 143,
  304. 9, 244, 33, 244, 9,
  305. 244, 9, 59, 10, 10,
  306. 9, 32, 9, 59, 1, 244,
  307. 1, 244, 10, 10, 9,
  308. 32, 0, 244, 128, 191,
  309. 160, 191, 128, 191, 128, 159,
  310. 144, 191, 128, 191, 128,
  311. 143, 10, 10, 9, 32,
  312. 128, 191, 160, 191, 128, 191,
  313. 128, 159, 144, 191, 128,
  314. 191, 128, 143, 1, 244,
  315. 10, 10, 9, 32, 0, 244,
  316. 128, 191, 160, 191, 128,
  317. 191, 128, 159, 144, 191,
  318. 128, 191, 128, 143, 128, 191,
  319. 160, 191, 128, 191, 128,
  320. 159, 144, 191, 128, 191,
  321. 128, 143, 1, 244, 1, 244,
  322. 10, 10, 9, 32, 0,
  323. 244, 128, 191, 160, 191,
  324. 128, 191, 128, 159, 144, 191,
  325. 128, 191, 128, 143, 9,
  326. 244, 9, 244, 9, 244,
  327. 10, 10, 9, 32, 9, 244,
  328. 1, 244, 1, 244, 10,
  329. 10, 9, 32, 0, 244,
  330. 128, 191, 160, 191, 128, 191,
  331. 128, 159, 144, 191, 128,
  332. 191, 128, 143, 1, 244,
  333. 10, 10, 9, 32, 9, 244,
  334. 9, 244, 10, 10, 9,
  335. 32, 9, 244, 9, 244,
  336. 9, 244, 10, 10, 9, 32,
  337. 9, 244, 9, 59, 10,
  338. 10, 9, 32, 9, 59,
  339. 9, 244, 10, 10, 9, 32,
  340. 9, 244, 128, 191, 160,
  341. 191, 128, 191, 128, 159,
  342. 144, 191, 128, 191, 128, 143,
  343. 9, 244, 9, 244, 128,
  344. 191, 160, 191, 128, 191,
  345. 128, 159, 144, 191, 128, 191,
  346. 128, 143, 9, 244, 128,
  347. 191, 160, 191, 128, 191,
  348. 128, 159, 144, 191, 128, 191,
  349. 128, 143, 9, 244, 9,
  350. 244, 10, 10, 9, 32,
  351. 9, 244, 1, 244, 1, 244,
  352. 10, 10, 9, 32, 9,
  353. 244, 9, 244, 0, 244,
  354. 128, 191, 160, 191, 128, 191,
  355. 128, 159, 144, 191, 128,
  356. 191, 128, 143, 1, 244,
  357. 10, 10, 9, 32, 128, 191,
  358. 160, 191, 128, 191, 128,
  359. 159, 144, 191, 128, 191,
  360. 128, 143, 0, 244, 128, 191,
  361. 160, 191, 128, 191, 128,
  362. 159, 144, 191, 128, 191,
  363. 128, 143, 1, 244, 10, 10,
  364. 9, 32, 9, 244, 10,
  365. 10, 9, 32, 9, 244,
  366. 9, 244, 9, 244, 9, 244,
  367. 10, 10, 9, 32, 9,
  368. 244, 9, 244, 10, 10,
  369. 9, 32, 9, 244, 10, 10,
  370. 9, 32, 1, 244, 1,
  371. 244, 10, 10, 9, 32,
  372. 0, 244, 128, 191, 160, 191,
  373. 128, 191, 128, 159, 144,
  374. 191, 128, 191, 128, 143,
  375. 9, 244, 9, 244, 9, 244,
  376. 10, 10, 9, 32, 9,
  377. 244, 9, 244, 9, 244,
  378. 10, 10, 9, 32, 9, 244,
  379. 9, 64, 10, 10, 9,
  380. 32, 9, 64, 9, 244,
  381. 10, 10, 9, 32, 9, 244,
  382. 9, 64, 10, 10, 9,
  383. 32, 9, 64, 9, 59,
  384. 10, 10, 9, 32, 9, 59,
  385. 10, 10, 9, 32, 9,
  386. 244, 9, 244, 10, 10,
  387. 9, 32, 9, 244, 9, 62,
  388. 10, 10, 9, 32, 9,
  389. 62, 9, 244, 10, 10,
  390. 9, 32, 9, 244, 128, 191,
  391. 160, 191, 128, 191, 128,
  392. 159, 144, 191, 128, 191,
  393. 128, 143, 9, 244, 1, 244,
  394. 1, 244, 10, 10, 9,
  395. 32, 9, 244, 9, 62,
  396. 10, 10, 9, 32, 9, 62,
  397. 33, 244, 128, 191, 160,
  398. 191, 128, 191, 128, 159,
  399. 144, 191, 128, 191, 128, 143,
  400. 0, 244, 128, 191, 160,
  401. 191, 128, 191, 128, 159,
  402. 144, 191, 128, 191, 128, 143,
  403. 10, 10, 9, 32, 9,
  404. 244, 128, 191, 160, 191,
  405. 128, 191, 128, 159, 144, 191,
  406. 128, 191, 128, 143, 9,
  407. 244, 1, 244, 10, 10,
  408. 9, 32, 0, 244, 128, 191,
  409. 160, 191, 128, 191, 128,
  410. 159, 144, 191, 128, 191,
  411. 128, 143, 128, 191, 160, 191,
  412. 128, 191, 128, 159, 144,
  413. 191, 128, 191, 128, 143,
  414. 1, 244, 1, 244, 10, 10,
  415. 9, 32, 0, 244, 128,
  416. 191, 160, 191, 128, 191,
  417. 128, 159, 144, 191, 128, 191,
  418. 128, 143, 9, 244, 1,
  419. 244, 1, 244, 10, 10,
  420. 9, 32, 9, 244, 9, 64,
  421. 10, 10, 9, 32, 9,
  422. 64, 128, 191, 160, 191,
  423. 128, 191, 128, 159, 144, 191,
  424. 128, 191, 128, 143, 0,
  425. 244, 128, 191, 160, 191,
  426. 128, 191, 128, 159, 144, 191,
  427. 128, 191, 128, 143, 10,
  428. 10, 9, 32, 9, 244,
  429. 9, 244, 10, 10, 9, 32,
  430. 9, 244, 1, 244, 1,
  431. 244, 10, 10, 9, 32,
  432. 9, 244, 0, 244, 128, 191,
  433. 160, 191, 128, 191, 128,
  434. 159, 144, 191, 128, 191,
  435. 128, 143, 1, 244, 10, 10,
  436. 9, 32, 128, 191, 160,
  437. 191, 128, 191, 128, 159,
  438. 144, 191, 128, 191, 128, 143,
  439. 1, 244, 1, 244, 10,
  440. 10, 9, 32, 9, 244,
  441. 9, 64, 10, 10, 9, 32,
  442. 9, 64, 0, 244, 128,
  443. 191, 160, 191, 128, 191,
  444. 128, 159, 144, 191, 128, 191,
  445. 128, 143, 1, 244, 10,
  446. 10, 9, 32, 9, 64,
  447. 10, 10, 9, 32, 9, 64,
  448. 9, 244, 9, 64, 10,
  449. 10, 9, 32, 9, 64,
  450. 9, 244, 9, 244, 10, 10,
  451. 9, 32, 9, 244, 9,
  452. 58, 10, 10, 9, 32,
  453. 9, 58, 9, 64, 10, 10,
  454. 9, 32, 9, 64, 9,
  455. 244, 9, 244, 10, 10,
  456. 9, 32, 9, 244, 33, 244,
  457. 9, 244, 10, 10, 9,
  458. 32, 9, 244, 128, 191,
  459. 160, 191, 128, 191, 128, 159,
  460. 144, 191, 128, 191, 128,
  461. 143, 9, 244, 1, 244,
  462. 1, 244, 10, 10, 9, 32,
  463. 9, 244, 9, 58, 10,
  464. 10, 9, 32, 9, 58,
  465. 33, 244, 128, 191, 160, 191,
  466. 128, 191, 128, 159, 144,
  467. 191, 128, 191, 128, 143,
  468. 0, 244, 128, 191, 160, 191,
  469. 128, 191, 128, 159, 144,
  470. 191, 128, 191, 128, 143,
  471. 10, 10, 9, 32, 9, 244,
  472. 128, 191, 160, 191, 128,
  473. 191, 128, 159, 144, 191,
  474. 128, 191, 128, 143, 9, 244,
  475. 1, 244, 10, 10, 9,
  476. 32, 0, 244, 128, 191,
  477. 160, 191, 128, 191, 128, 159,
  478. 144, 191, 128, 191, 128,
  479. 143, 128, 191, 160, 191,
  480. 128, 191, 128, 159, 144, 191,
  481. 128, 191, 128, 143, 9,
  482. 244, 9, 244, 9, 244,
  483. 10, 10, 9, 32, 9, 244,
  484. 9, 244, 10, 10, 9,
  485. 32, 9, 244, 9, 244,
  486. 9, 244, 10, 10, 9, 32,
  487. 9, 244, 9, 244, 10,
  488. 10, 9, 32, 9, 244,
  489. 9, 244, 9, 244, 10, 10,
  490. 9, 32, 9, 244, 128,
  491. 191, 160, 191, 128, 191,
  492. 128, 159, 144, 191, 128, 191,
  493. 128, 143, 9, 244, 1,
  494. 244, 1, 244, 10, 10,
  495. 9, 32, 9, 244, 9, 244,
  496. 10, 10, 9, 32, 9,
  497. 244, 9, 244, 128, 191,
  498. 160, 191, 128, 191, 128, 159,
  499. 144, 191, 128, 191, 128,
  500. 143, 0, 244, 128, 191,
  501. 160, 191, 128, 191, 128, 159,
  502. 144, 191, 128, 191, 128,
  503. 143, 1, 244, 10, 10,
  504. 9, 32, 9, 244, 128, 191,
  505. 160, 191, 128, 191, 128,
  506. 159, 144, 191, 128, 191,
  507. 128, 143, 9, 244, 33, 244,
  508. 9, 244, 9, 59, 10,
  509. 10, 9, 32, 9, 59,
  510. 1, 244, 1, 244, 10, 10,
  511. 9, 32, 0, 244, 128,
  512. 191, 160, 191, 128, 191,
  513. 128, 159, 144, 191, 128, 191,
  514. 128, 143, 10, 10, 9,
  515. 32, 128, 191, 160, 191,
  516. 128, 191, 128, 159, 144, 191,
  517. 128, 191, 128, 143, 1,
  518. 244, 10, 10, 9, 32,
  519. 0, 244, 128, 191, 160, 191,
  520. 128, 191, 128, 159, 144,
  521. 191, 128, 191, 128, 143,
  522. 128, 191, 160, 191, 128, 191,
  523. 128, 159, 144, 191, 128,
  524. 191, 128, 143, 1, 244,
  525. 1, 244, 10, 10, 9, 32,
  526. 0, 244, 128, 191, 160,
  527. 191, 128, 191, 128, 159,
  528. 144, 191, 128, 191, 128, 143,
  529. 9, 244, 1, 244, 1,
  530. 244, 10, 10, 9, 32,
  531. 9, 244, 9, 244, 10, 10,
  532. 9, 32, 9, 244, 9,
  533. 244, 9, 244, 10, 10,
  534. 9, 32, 9, 244, 9, 244,
  535. 9, 244, 10, 10, 9,
  536. 32, 9, 244, 9, 59,
  537. 10, 10, 9, 32, 9, 59,
  538. 9, 244, 10, 10, 9,
  539. 32, 9, 244, 128, 191,
  540. 160, 191, 128, 191, 128, 159,
  541. 144, 191, 128, 191, 128,
  542. 143, 9, 244, 9, 244,
  543. 128, 191, 160, 191, 128, 191,
  544. 128, 159, 144, 191, 128,
  545. 191, 128, 143, 9, 244,
  546. 128, 191, 160, 191, 128, 191,
  547. 128, 159, 144, 191, 128,
  548. 191, 128, 143, 0, 244,
  549. 128, 191, 160, 191, 128, 191,
  550. 128, 159, 144, 191, 128,
  551. 191, 128, 143, 1, 244,
  552. 10, 10, 9, 32, 9, 244,
  553. 9, 244, 10, 10, 9,
  554. 32, 9, 244, 1, 244,
  555. 1, 244, 10, 10, 9, 32,
  556. 9, 244, 0, 244, 128,
  557. 191, 160, 191, 128, 191,
  558. 128, 159, 144, 191, 128, 191,
  559. 128, 143, 1, 244, 10,
  560. 10, 9, 32, 128, 191,
  561. 160, 191, 128, 191, 128, 159,
  562. 144, 191, 128, 191, 128,
  563. 143, 1, 244, 1, 244,
  564. 10, 10, 9, 32, 9, 244,
  565. 9, 244, 10, 10, 9,
  566. 32, 9, 244, 0, 244,
  567. 128, 191, 160, 191, 128, 191,
  568. 128, 159, 144, 191, 128,
  569. 191, 128, 143, 1, 244,
  570. 10, 10, 9, 32, 9, 244,
  571. 10, 10, 9, 32, 9,
  572. 244, 9, 244, 33, 244,
  573. 9, 244, 9, 64, 10, 10,
  574. 9, 32, 9, 64, 1,
  575. 244, 1, 244, 10, 10,
  576. 9, 32, 0, 244, 128, 191,
  577. 160, 191, 128, 191, 128,
  578. 159, 144, 191, 128, 191,
  579. 128, 143, 10, 10, 9, 32,
  580. 128, 191, 160, 191, 128,
  581. 191, 128, 159, 144, 191,
  582. 128, 191, 128, 143, 9, 244,
  583. 33, 244, 9, 244, 9,
  584. 64, 10, 10, 9, 32,
  585. 9, 64, 1, 244, 1, 244,
  586. 10, 10, 9, 32, 0,
  587. 244, 128, 191, 160, 191,
  588. 128, 191, 128, 159, 144, 191,
  589. 128, 191, 128, 143, 10,
  590. 10, 9, 32, 128, 191,
  591. 160, 191, 128, 191, 128, 159,
  592. 144, 191, 128, 191, 128,
  593. 143, 9, 244, 9, 244,
  594. 9, 244, 10, 10, 9, 32,
  595. 9, 244, 9, 62, 10,
  596. 10, 9, 32, 9, 62,
  597. 9, 244, 10, 10, 9, 32,
  598. 9, 244, 128, 191, 160,
  599. 191, 128, 191, 128, 159,
  600. 144, 191, 128, 191, 128, 143,
  601. 9, 244, 1, 244, 1,
  602. 244, 10, 10, 9, 32,
  603. 9, 244, 9, 62, 10, 10,
  604. 9, 32, 9, 62, 33,
  605. 244, 128, 191, 160, 191,
  606. 128, 191, 128, 159, 144, 191,
  607. 128, 191, 128, 143, 0,
  608. 244, 128, 191, 160, 191,
  609. 128, 191, 128, 159, 144, 191,
  610. 128, 191, 128, 143, 10,
  611. 10, 9, 32, 9, 244,
  612. 128, 191, 160, 191, 128, 191,
  613. 128, 159, 144, 191, 128,
  614. 191, 128, 143, 9, 244,
  615. 1, 244, 10, 10, 9, 32,
  616. 0, 244, 128, 191, 160,
  617. 191, 128, 191, 128, 159,
  618. 144, 191, 128, 191, 128, 143,
  619. 128, 191, 160, 191, 128,
  620. 191, 128, 159, 144, 191,
  621. 128, 191, 128, 143, 1, 244,
  622. 1, 244, 10, 10, 9,
  623. 32, 0, 244, 128, 191,
  624. 160, 191, 128, 191, 128, 159,
  625. 144, 191, 128, 191, 128,
  626. 143, 9, 244, 1, 244,
  627. 1, 244, 10, 10, 9, 32,
  628. 9, 244, 9, 64, 10,
  629. 10, 9, 32, 9, 64,
  630. 128, 191, 160, 191, 128, 191,
  631. 128, 159, 144, 191, 128,
  632. 191, 128, 143, 0, 244,
  633. 128, 191, 160, 191, 128, 191,
  634. 128, 159, 144, 191, 128,
  635. 191, 128, 143, 10, 10,
  636. 9, 32, 9, 244, 9, 244,
  637. 10, 10, 9, 32, 9,
  638. 244, 1, 244, 1, 244,
  639. 10, 10, 9, 32, 9, 244,
  640. 0, 244, 128, 191, 160,
  641. 191, 128, 191, 128, 159,
  642. 144, 191, 128, 191, 128, 143,
  643. 1, 244, 10, 10, 9,
  644. 32, 128, 191, 160, 191,
  645. 128, 191, 128, 159, 144, 191,
  646. 128, 191, 128, 143, 1,
  647. 244, 1, 244, 10, 10,
  648. 9, 32, 9, 244, 9, 64,
  649. 10, 10, 9, 32, 9,
  650. 64, 0, 244, 128, 191,
  651. 160, 191, 128, 191, 128, 159,
  652. 144, 191, 128, 191, 128,
  653. 143, 1, 244, 10, 10,
  654. 9, 32, 9, 64, 10, 10,
  655. 9, 32, 9, 64, 9,
  656. 244, 9, 64, 10, 10,
  657. 9, 32, 9, 64, 9, 244,
  658. 9, 244, 10, 10, 9,
  659. 32, 9, 244, 9, 58,
  660. 10, 10, 9, 32, 9, 58,
  661. 9, 64, 10, 10, 9,
  662. 32, 9, 64, 9, 244,
  663. 9, 244, 10, 10, 9, 32,
  664. 9, 244, 33, 244, 9,
  665. 244, 10, 10, 9, 32,
  666. 9, 244, 128, 191, 160, 191,
  667. 128, 191, 128, 159, 144,
  668. 191, 128, 191, 128, 143,
  669. 9, 244, 1, 244, 1, 244,
  670. 10, 10, 9, 32, 9,
  671. 244, 9, 58, 10, 10,
  672. 9, 32, 9, 58, 33, 244,
  673. 128, 191, 160, 191, 128,
  674. 191, 128, 159, 144, 191,
  675. 128, 191, 128, 143, 0, 244,
  676. 128, 191, 160, 191, 128,
  677. 191, 128, 159, 144, 191,
  678. 128, 191, 128, 143, 10, 10,
  679. 9, 32, 9, 244, 128,
  680. 191, 160, 191, 128, 191,
  681. 128, 159, 144, 191, 128, 191,
  682. 128, 143, 9, 244, 1,
  683. 244, 10, 10, 9, 32,
  684. 0, 244, 128, 191, 160, 191,
  685. 128, 191, 128, 159, 144,
  686. 191, 128, 191, 128, 143,
  687. 9, 244, 9, 244, 9, 244,
  688. 10, 10, 9, 32, 9,
  689. 244, 9, 244, 9, 244,
  690. 10, 10, 9, 32, 10, 10,
  691. 9, 32, 9, 244, 9,
  692. 244, 10, 10, 9, 32,
  693. 128, 191, 160, 191, 128, 191,
  694. 128, 159, 144, 191, 128,
  695. 191, 128, 143, 9, 244,
  696. 128, 191, 160, 191, 128, 191,
  697. 128, 159, 144, 191, 128,
  698. 191, 128, 143, 1, 244,
  699. 1, 244, 10, 10, 9, 32,
  700. 10, 10, 9, 32, 9,
  701. 244, 128, 191, 160, 191,
  702. 128, 191, 128, 159, 144, 191,
  703. 128, 191, 128, 143, 0,
  704. 244, 128, 191, 160, 191,
  705. 128, 191, 128, 159, 144, 191,
  706. 128, 191, 128, 143, 1,
  707. 244, 10, 10, 9, 32,
  708. 9, 244, 128, 191, 160, 191,
  709. 128, 191, 128, 159, 144,
  710. 191, 128, 191, 128, 143,
  711. 9, 244, 33, 244, 10, 10,
  712. 9, 32, 1, 244, 1,
  713. 244, 10, 10, 9, 32,
  714. 0, 244, 128, 191, 160, 191,
  715. 128, 191, 128, 159, 144,
  716. 191, 128, 191, 128, 143,
  717. 10, 10, 9, 32, 128, 191,
  718. 160, 191, 128, 191, 128,
  719. 159, 144, 191, 128, 191,
  720. 128, 143, 1, 244, 10, 10,
  721. 9, 32, 0, 244, 128,
  722. 191, 160, 191, 128, 191,
  723. 128, 159, 144, 191, 128, 191,
  724. 128, 143, 128, 191, 160,
  725. 191, 128, 191, 128, 159,
  726. 144, 191, 128, 191, 128, 143,
  727. 1, 244, 1, 244, 10,
  728. 10, 9, 32, 0, 244,
  729. 128, 191, 160, 191, 128, 191,
  730. 128, 159, 144, 191, 128,
  731. 191, 128, 143, 9, 244,
  732. 1, 244, 1, 244, 10, 10,
  733. 9, 32, 10, 10, 9,
  734. 32, 10, 10, 9, 32,
  735. 9, 244, 9, 244, 10, 10,
  736. 9, 32, 10, 10, 9,
  737. 32, 9, 244, 10, 10,
  738. 9, 32, 128, 191, 160, 191,
  739. 128, 191, 128, 159, 144,
  740. 191, 128, 191, 128, 143,
  741. 9, 244, 9, 244, 128, 191,
  742. 160, 191, 128, 191, 128,
  743. 159, 144, 191, 128, 191,
  744. 128, 143, 9, 244, 128, 191,
  745. 160, 191, 128, 191, 128,
  746. 159, 144, 191, 128, 191,
  747. 128, 143, 0, 244, 128, 191,
  748. 160, 191, 128, 191, 128,
  749. 159, 144, 191, 128, 191,
  750. 128, 143, 1, 244, 10, 10,
  751. 9, 32, 10, 10, 9,
  752. 32, 1, 244, 1, 244,
  753. 10, 10, 9, 32, 0, 244,
  754. 128, 191, 160, 191, 128,
  755. 191, 128, 159, 144, 191,
  756. 128, 191, 128, 143, 1, 244,
  757. 10, 10, 9, 32, 128,
  758. 191, 160, 191, 128, 191,
  759. 128, 159, 144, 191, 128, 191,
  760. 128, 143, 1, 244, 1,
  761. 244, 10, 10, 9, 32,
  762. 10, 10, 9, 32, 0, 244,
  763. 128, 191, 160, 191, 128,
  764. 191, 128, 159, 144, 191,
  765. 128, 191, 128, 143, 1, 244,
  766. 10, 10, 9, 32, 10,
  767. 10, 9, 32, 9, 244,
  768. 9, 244, 10, 10, 9, 32,
  769. 33, 244, 10, 10, 9,
  770. 32, 1, 244, 1, 244,
  771. 10, 10, 9, 32, 0, 244,
  772. 128, 191, 160, 191, 128,
  773. 191, 128, 159, 144, 191,
  774. 128, 191, 128, 143, 10, 10,
  775. 9, 32, 128, 191, 160,
  776. 191, 128, 191, 128, 159,
  777. 144, 191, 128, 191, 128, 143,
  778. 9, 244, 9, 244, 9,
  779. 244, 10, 10, 9, 32,
  780. 9, 244, 9, 62, 10, 10,
  781. 9, 32, 9, 62, 9,
  782. 244, 10, 10, 9, 32,
  783. 9, 244, 128, 191, 160, 191,
  784. 128, 191, 128, 159, 144,
  785. 191, 128, 191, 128, 143,
  786. 9, 244, 1, 244, 1, 244,
  787. 10, 10, 9, 32, 9,
  788. 244, 9, 62, 10, 10,
  789. 9, 32, 9, 62, 33, 244,
  790. 128, 191, 160, 191, 128,
  791. 191, 128, 159, 144, 191,
  792. 128, 191, 128, 143, 0, 244,
  793. 128, 191, 160, 191, 128,
  794. 191, 128, 159, 144, 191,
  795. 128, 191, 128, 143, 10, 10,
  796. 9, 32, 9, 244, 128,
  797. 191, 160, 191, 128, 191,
  798. 128, 159, 144, 191, 128, 191,
  799. 128, 143, 9, 244, 1,
  800. 244, 10, 10, 9, 32,
  801. 0, 244, 128, 191, 160, 191,
  802. 128, 191, 128, 159, 144,
  803. 191, 128, 191, 128, 143,
  804. 128, 191, 160, 191, 128, 191,
  805. 128, 159, 144, 191, 128,
  806. 191, 128, 143, 1, 244,
  807. 1, 244, 10, 10, 9, 32,
  808. 0, 244, 128, 191, 160,
  809. 191, 128, 191, 128, 159,
  810. 144, 191, 128, 191, 128, 143,
  811. 9, 244, 1, 244, 1,
  812. 244, 10, 10, 9, 32,
  813. 9, 244, 9, 64, 10, 10,
  814. 9, 32, 9, 64, 128,
  815. 191, 160, 191, 128, 191,
  816. 128, 159, 144, 191, 128, 191,
  817. 128, 143, 0, 244, 128,
  818. 191, 160, 191, 128, 191,
  819. 128, 159, 144, 191, 128, 191,
  820. 128, 143, 10, 10, 9,
  821. 32, 9, 244, 9, 244,
  822. 10, 10, 9, 32, 9, 244,
  823. 1, 244, 1, 244, 10,
  824. 10, 9, 32, 9, 244,
  825. 0, 244, 128, 191, 160, 191,
  826. 128, 191, 128, 159, 144,
  827. 191, 128, 191, 128, 143,
  828. 1, 244, 10, 10, 9, 32,
  829. 128, 191, 160, 191, 128,
  830. 191, 128, 159, 144, 191,
  831. 128, 191, 128, 143, 1, 244,
  832. 1, 244, 10, 10, 9,
  833. 32, 9, 244, 9, 64,
  834. 10, 10, 9, 32, 9, 64,
  835. 0, 244, 128, 191, 160,
  836. 191, 128, 191, 128, 159,
  837. 144, 191, 128, 191, 128, 143,
  838. 1, 244, 10, 10, 9,
  839. 32, 9, 64, 10, 10,
  840. 9, 32, 9, 64, 9, 244,
  841. 9, 64, 10, 10, 9,
  842. 32, 9, 64, 9, 244,
  843. 9, 244, 10, 10, 9, 32,
  844. 9, 244, 9, 58, 10,
  845. 10, 9, 32, 9, 58,
  846. 9, 64, 10, 10, 9, 32,
  847. 9, 64, 9, 244, 9,
  848. 244, 10, 10, 9, 32,
  849. 9, 244, 33, 244, 9, 244,
  850. 10, 10, 9, 32, 9,
  851. 244, 128, 191, 160, 191,
  852. 128, 191, 128, 159, 144, 191,
  853. 128, 191, 128, 143, 9,
  854. 244, 1, 244, 1, 244,
  855. 10, 10, 9, 32, 9, 244,
  856. 9, 58, 10, 10, 9,
  857. 32, 9, 58, 33, 244,
  858. 128, 191, 160, 191, 128, 191,
  859. 128, 159, 144, 191, 128,
  860. 191, 128, 143, 0, 244,
  861. 128, 191, 160, 191, 128, 191,
  862. 128, 159, 144, 191, 128,
  863. 191, 128, 143, 10, 10,
  864. 9, 32, 9, 244, 128, 191,
  865. 160, 191, 128, 191, 128,
  866. 159, 144, 191, 128, 191,
  867. 128, 143, 9, 244, 1, 244,
  868. 10, 10, 9, 32, 0,
  869. 244, 128, 191, 160, 191,
  870. 128, 191, 128, 159, 144, 191,
  871. 128, 191, 128, 143, 9,
  872. 244, 9, 244, 10, 10,
  873. 9, 32, 10, 10, 9, 32,
  874. 9, 244, 9, 244, 10,
  875. 10, 9, 32, 9, 244,
  876. 33, 244, 1, 244, 1, 244,
  877. 10, 10, 9, 32, 0,
  878. 244, 128, 191, 160, 191,
  879. 128, 191, 128, 159, 144, 191,
  880. 128, 191, 128, 143, 10,
  881. 10, 9, 32, 128, 191,
  882. 160, 191, 128, 191, 128, 159,
  883. 144, 191, 128, 191, 128,
  884. 143, 128, 191, 160, 191,
  885. 128, 191, 128, 159, 144, 191,
  886. 128, 191, 128, 143, 1,
  887. 244, 1, 244, 10, 10,
  888. 9, 32, 0, 244, 128, 191,
  889. 160, 191, 128, 191, 128,
  890. 159, 144, 191, 128, 191,
  891. 128, 143, 9, 244, 1, 244,
  892. 1, 244, 10, 10, 9,
  893. 32, 10, 10, 9, 32,
  894. 10, 10, 9, 32, 9, 244,
  895. 9, 244, 10, 10, 9,
  896. 32, 9, 244, 128, 191,
  897. 160, 191, 128, 191, 128, 159,
  898. 144, 191, 128, 191, 128,
  899. 143, 9, 244, 128, 191,
  900. 160, 191, 128, 191, 128, 159,
  901. 144, 191, 128, 191, 128,
  902. 143, 0, 244, 128, 191,
  903. 160, 191, 128, 191, 128, 159,
  904. 144, 191, 128, 191, 128,
  905. 143, 1, 244, 10, 10,
  906. 9, 32, 10, 10, 9, 32,
  907. 1, 244, 1, 244, 10,
  908. 10, 9, 32, 0, 244,
  909. 128, 191, 160, 191, 128, 191,
  910. 128, 159, 144, 191, 128,
  911. 191, 128, 143, 1, 244,
  912. 10, 10, 9, 32, 128, 191,
  913. 160, 191, 128, 191, 128,
  914. 159, 144, 191, 128, 191,
  915. 128, 143, 1, 244, 1, 244,
  916. 10, 10, 9, 32, 10,
  917. 10, 9, 32, 0, 244,
  918. 128, 191, 160, 191, 128, 191,
  919. 128, 159, 144, 191, 128,
  920. 191, 128, 143, 1, 244,
  921. 10, 10, 9, 32, 10, 10,
  922. 9, 32, 9, 244, 9,
  923. 244, 10, 10, 9, 32,
  924. 33, 244, 10, 10, 9, 32,
  925. 1, 244, 1, 244, 10,
  926. 10, 9, 32, 0, 244,
  927. 128, 191, 160, 191, 128, 191,
  928. 128, 159, 144, 191, 128,
  929. 191, 128, 143, 10, 10,
  930. 9, 32, 128, 191, 160, 191,
  931. 128, 191, 128, 159, 144,
  932. 191, 128, 191, 128, 143,
  933. 9, 244, 1, 244, 1, 244,
  934. 10, 10, 9, 32, 0,
  935. 244, 128, 191, 160, 191,
  936. 128, 191, 128, 159, 144, 191,
  937. 128, 191, 128, 143, 9,
  938. 244, 9, 244, 9, 244,
  939. 9, 59, 9, 59, 9, 244,
  940. 9, 244, 9, 244, 9,
  941. 244, 9, 244, 9, 244,
  942. 9, 244, 9, 244, 9, 244,
  943. 9, 244, 9, 59, 9,
  944. 59, 9, 244, 9, 244,
  945. 9, 244, 9, 244, 9, 244,
  946. 9, 244, 9, 244, 9,
  947. 244, 9, 59, 9, 59,
  948. 9, 244, 9, 244, 9, 244,
  949. 9, 244, 9, 244, 9,
  950. 244, 9, 244, 9, 59,
  951. 9, 59, 9, 244, 9, 244,
  952. 9, 244, 9, 244, 9,
  953. 244, 9, 244, 9, 244,
  954. 9, 244, 9, 244, 9, 244,
  955. 9, 244, 9, 64, 9,
  956. 64, 9, 244, 9, 244,
  957. 9, 244, 9, 244, 9, 244,
  958. 9, 244, 9, 244, 9,
  959. 244, 9, 244, 9, 244,
  960. 9, 244, 9, 244, 9, 244,
  961. 9, 244, 9, 244, 9,
  962. 244, 9, 244, 9, 244,
  963. 9, 244, 9, 244, 9, 244,
  964. 9, 244, 9, 64, 9,
  965. 64, 0, 0, 0,
  966. ]
  967. 1 class << self
  968. 1 attr_accessor :_key_spans
  969. 1 private :_key_spans, :_key_spans=
  970. end
  971. 1 self._key_spans = [
  972. 0, 236, 1, 24, 1, 24, 236, 1,
  973. 24, 244, 244, 1, 24, 245, 64, 32,
  974. 64, 32, 48, 64, 16, 236, 236, 236,
  975. 1, 24, 236, 236, 236, 1, 24, 236,
  976. 56, 1, 24, 56, 236, 1, 24, 236,
  977. 56, 1, 24, 56, 1, 24, 1, 24,
  978. 1, 24, 236, 236, 1, 24, 1, 24,
  979. 236, 236, 1, 24, 236, 236, 1, 24,
  980. 236, 1, 24, 244, 244, 1, 24, 245,
  981. 64, 32, 64, 32, 48, 64, 16, 236,
  982. 236, 236, 1, 24, 236, 236, 236, 1,
  983. 24, 236, 56, 1, 24, 56, 236, 1,
  984. 24, 236, 56, 1, 24, 56, 51, 1,
  985. 24, 51, 236, 236, 1, 24, 244, 244,
  986. 1, 24, 236, 236, 1, 24, 236, 236,
  987. 236, 1, 24, 236, 236, 1, 24, 236,
  988. 1, 24, 236, 236, 1, 24, 236, 1,
  989. 24, 244, 244, 1, 24, 245, 64, 32,
  990. 64, 32, 48, 64, 16, 236, 236, 236,
  991. 1, 24, 236, 236, 236, 1, 24, 236,
  992. 56, 1, 24, 56, 236, 1, 24, 236,
  993. 56, 1, 24, 56, 51, 1, 24, 51,
  994. 236, 236, 1, 24, 244, 244, 1, 24,
  995. 236, 236, 1, 24, 236, 236, 236, 1,
  996. 24, 236, 236, 1, 24, 236, 236, 236,
  997. 1, 24, 236, 236, 1, 24, 236, 236,
  998. 236, 1, 24, 236, 64, 32, 64, 32,
  999. 48, 64, 16, 236, 64, 32, 64, 32,
  1000. 48, 64, 16, 244, 244, 1, 24, 236,
  1001. 236, 1, 24, 236, 236, 64, 32, 64,
  1002. 32, 48, 64, 16, 245, 64, 32, 64,
  1003. 32, 48, 64, 16, 244, 1, 24, 236,
  1004. 64, 32, 64, 32, 48, 64, 16, 236,
  1005. 212, 236, 51, 1, 24, 51, 244, 244,
  1006. 1, 24, 245, 64, 32, 64, 32, 48,
  1007. 64, 16, 1, 24, 64, 32, 64, 32,
  1008. 48, 64, 16, 244, 1, 24, 245, 64,
  1009. 32, 64, 32, 48, 64, 16, 64, 32,
  1010. 64, 32, 48, 64, 16, 244, 244, 1,
  1011. 24, 245, 64, 32, 64, 32, 48, 64,
  1012. 16, 236, 236, 236, 1, 24, 236, 244,
  1013. 244, 1, 24, 245, 64, 32, 64, 32,
  1014. 48, 64, 16, 244, 1, 24, 236, 236,
  1015. 1, 24, 236, 236, 236, 1, 24, 236,
  1016. 51, 1, 24, 51, 236, 1, 24, 236,
  1017. 64, 32, 64, 32, 48, 64, 16, 236,
  1018. 236, 64, 32, 64, 32, 48, 64, 16,
  1019. 236, 64, 32, 64, 32, 48, 64, 16,
  1020. 236, 236, 1, 24, 236, 244, 244, 1,
  1021. 24, 236, 236, 245, 64, 32, 64, 32,
  1022. 48, 64, 16, 244, 1, 24, 64, 32,
  1023. 64, 32, 48, 64, 16, 245, 64, 32,
  1024. 64, 32, 48, 64, 16, 244, 1, 24,
  1025. 236, 1, 24, 236, 236, 212, 236, 56,
  1026. 1, 24, 56, 244, 244, 1, 24, 245,
  1027. 64, 32, 64, 32, 48, 64, 16, 1,
  1028. 24, 64, 32, 64, 32, 48, 64, 16,
  1029. 236, 236, 236, 1, 24, 236, 54, 1,
  1030. 24, 54, 236, 1, 24, 236, 64, 32,
  1031. 64, 32, 48, 64, 16, 236, 244, 244,
  1032. 1, 24, 236, 54, 1, 24, 54, 212,
  1033. 64, 32, 64, 32, 48, 64, 16, 245,
  1034. 64, 32, 64, 32, 48, 64, 16, 1,
  1035. 24, 236, 64, 32, 64, 32, 48, 64,
  1036. 16, 236, 244, 1, 24, 245, 64, 32,
  1037. 64, 32, 48, 64, 16, 64, 32, 64,
  1038. 32, 48, 64, 16, 244, 244, 1, 24,
  1039. 245, 64, 32, 64, 32, 48, 64, 16,
  1040. 236, 244, 244, 1, 24, 236, 56, 1,
  1041. 24, 56, 64, 32, 64, 32, 48, 64,
  1042. 16, 245, 64, 32, 64, 32, 48, 64,
  1043. 16, 1, 24, 236, 236, 1, 24, 236,
  1044. 244, 244, 1, 24, 236, 245, 64, 32,
  1045. 64, 32, 48, 64, 16, 244, 1, 24,
  1046. 64, 32, 64, 32, 48, 64, 16, 244,
  1047. 244, 1, 24, 236, 56, 1, 24, 56,
  1048. 245, 64, 32, 64, 32, 48, 64, 16,
  1049. 244, 1, 24, 56, 1, 24, 56, 236,
  1050. 56, 1, 24, 56, 236, 236, 1, 24,
  1051. 236, 50, 1, 24, 50, 56, 1, 24,
  1052. 56, 236, 236, 1, 24, 236, 212, 236,
  1053. 1, 24, 236, 64, 32, 64, 32, 48,
  1054. 64, 16, 236, 244, 244, 1, 24, 236,
  1055. 50, 1, 24, 50, 212, 64, 32, 64,
  1056. 32, 48, 64, 16, 245, 64, 32, 64,
  1057. 32, 48, 64, 16, 1, 24, 236, 64,
  1058. 32, 64, 32, 48, 64, 16, 236, 244,
  1059. 1, 24, 245, 64, 32, 64, 32, 48,
  1060. 64, 16, 236, 236, 1, 24, 236, 236,
  1061. 1, 24, 236, 236, 236, 1, 24, 236,
  1062. 64, 32, 64, 32, 48, 64, 16, 236,
  1063. 64, 32, 64, 32, 48, 64, 16, 244,
  1064. 244, 1, 24, 236, 236, 1, 24, 236,
  1065. 236, 64, 32, 64, 32, 48, 64, 16,
  1066. 245, 64, 32, 64, 32, 48, 64, 16,
  1067. 244, 1, 24, 236, 64, 32, 64, 32,
  1068. 48, 64, 16, 236, 212, 236, 51, 1,
  1069. 24, 51, 244, 244, 1, 24, 245, 64,
  1070. 32, 64, 32, 48, 64, 16, 1, 24,
  1071. 64, 32, 64, 32, 48, 64, 16, 244,
  1072. 1, 24, 245, 64, 32, 64, 32, 48,
  1073. 64, 16, 64, 32, 64, 32, 48, 64,
  1074. 16, 244, 244, 1, 24, 245, 64, 32,
  1075. 64, 32, 48, 64, 16, 236, 236, 236,
  1076. 1, 24, 236, 244, 244, 1, 24, 245,
  1077. 64, 32, 64, 32, 48, 64, 16, 244,
  1078. 1, 24, 236, 236, 1, 24, 236, 236,
  1079. 236, 1, 24, 236, 51, 1, 24, 51,
  1080. 236, 1, 24, 236, 64, 32, 64, 32,
  1081. 48, 64, 16, 236, 236, 64, 32, 64,
  1082. 32, 48, 64, 16, 236, 64, 32, 64,
  1083. 32, 48, 64, 16, 236, 236, 1, 24,
  1084. 236, 244, 244, 1, 24, 236, 236, 245,
  1085. 64, 32, 64, 32, 48, 64, 16, 244,
  1086. 1, 24, 64, 32, 64, 32, 48, 64,
  1087. 16, 245, 64, 32, 64, 32, 48, 64,
  1088. 16, 244, 1, 24, 236, 1, 24, 236,
  1089. 236, 236, 236, 1, 24, 236, 236, 1,
  1090. 24, 236, 1, 24, 244, 244, 1, 24,
  1091. 245, 64, 32, 64, 32, 48, 64, 16,
  1092. 236, 236, 236, 1, 24, 236, 236, 236,
  1093. 1, 24, 236, 56, 1, 24, 56, 236,
  1094. 1, 24, 236, 56, 1, 24, 56, 51,
  1095. 1, 24, 51, 1, 24, 236, 236, 1,
  1096. 24, 236, 54, 1, 24, 54, 236, 1,
  1097. 24, 236, 64, 32, 64, 32, 48, 64,
  1098. 16, 236, 244, 244, 1, 24, 236, 54,
  1099. 1, 24, 54, 212, 64, 32, 64, 32,
  1100. 48, 64, 16, 245, 64, 32, 64, 32,
  1101. 48, 64, 16, 1, 24, 236, 64, 32,
  1102. 64, 32, 48, 64, 16, 236, 244, 1,
  1103. 24, 245, 64, 32, 64, 32, 48, 64,
  1104. 16, 64, 32, 64, 32, 48, 64, 16,
  1105. 244, 244, 1, 24, 245, 64, 32, 64,
  1106. 32, 48, 64, 16, 236, 244, 244, 1,
  1107. 24, 236, 56, 1, 24, 56, 64, 32,
  1108. 64, 32, 48, 64, 16, 245, 64, 32,
  1109. 64, 32, 48, 64, 16, 1, 24, 236,
  1110. 236, 1, 24, 236, 244, 244, 1, 24,
  1111. 236, 245, 64, 32, 64, 32, 48, 64,
  1112. 16, 244, 1, 24, 64, 32, 64, 32,
  1113. 48, 64, 16, 244, 244, 1, 24, 236,
  1114. 56, 1, 24, 56, 245, 64, 32, 64,
  1115. 32, 48, 64, 16, 244, 1, 24, 56,
  1116. 1, 24, 56, 236, 56, 1, 24, 56,
  1117. 236, 236, 1, 24, 236, 50, 1, 24,
  1118. 50, 56, 1, 24, 56, 236, 236, 1,
  1119. 24, 236, 212, 236, 1, 24, 236, 64,
  1120. 32, 64, 32, 48, 64, 16, 236, 244,
  1121. 244, 1, 24, 236, 50, 1, 24, 50,
  1122. 212, 64, 32, 64, 32, 48, 64, 16,
  1123. 245, 64, 32, 64, 32, 48, 64, 16,
  1124. 1, 24, 236, 64, 32, 64, 32, 48,
  1125. 64, 16, 236, 244, 1, 24, 245, 64,
  1126. 32, 64, 32, 48, 64, 16, 64, 32,
  1127. 64, 32, 48, 64, 16, 236, 236, 236,
  1128. 1, 24, 236, 236, 1, 24, 236, 236,
  1129. 236, 1, 24, 236, 236, 1, 24, 236,
  1130. 236, 236, 1, 24, 236, 64, 32, 64,
  1131. 32, 48, 64, 16, 236, 244, 244, 1,
  1132. 24, 236, 236, 1, 24, 236, 236, 64,
  1133. 32, 64, 32, 48, 64, 16, 245, 64,
  1134. 32, 64, 32, 48, 64, 16, 244, 1,
  1135. 24, 236, 64, 32, 64, 32, 48, 64,
  1136. 16, 236, 212, 236, 51, 1, 24, 51,
  1137. 244, 244, 1, 24, 245, 64, 32, 64,
  1138. 32, 48, 64, 16, 1, 24, 64, 32,
  1139. 64, 32, 48, 64, 16, 244, 1, 24,
  1140. 245, 64, 32, 64, 32, 48, 64, 16,
  1141. 64, 32, 64, 32, 48, 64, 16, 244,
  1142. 244, 1, 24, 245, 64, 32, 64, 32,
  1143. 48, 64, 16, 236, 244, 244, 1, 24,
  1144. 236, 236, 1, 24, 236, 236, 236, 1,
  1145. 24, 236, 236, 236, 1, 24, 236, 51,
  1146. 1, 24, 51, 236, 1, 24, 236, 64,
  1147. 32, 64, 32, 48, 64, 16, 236, 236,
  1148. 64, 32, 64, 32, 48, 64, 16, 236,
  1149. 64, 32, 64, 32, 48, 64, 16, 245,
  1150. 64, 32, 64, 32, 48, 64, 16, 244,
  1151. 1, 24, 236, 236, 1, 24, 236, 244,
  1152. 244, 1, 24, 236, 245, 64, 32, 64,
  1153. 32, 48, 64, 16, 244, 1, 24, 64,
  1154. 32, 64, 32, 48, 64, 16, 244, 244,
  1155. 1, 24, 236, 236, 1, 24, 236, 245,
  1156. 64, 32, 64, 32, 48, 64, 16, 244,
  1157. 1, 24, 236, 1, 24, 236, 236, 212,
  1158. 236, 56, 1, 24, 56, 244, 244, 1,
  1159. 24, 245, 64, 32, 64, 32, 48, 64,
  1160. 16, 1, 24, 64, 32, 64, 32, 48,
  1161. 64, 16, 236, 212, 236, 56, 1, 24,
  1162. 56, 244, 244, 1, 24, 245, 64, 32,
  1163. 64, 32, 48, 64, 16, 1, 24, 64,
  1164. 32, 64, 32, 48, 64, 16, 236, 236,
  1165. 236, 1, 24, 236, 54, 1, 24, 54,
  1166. 236, 1, 24, 236, 64, 32, 64, 32,
  1167. 48, 64, 16, 236, 244, 244, 1, 24,
  1168. 236, 54, 1, 24, 54, 212, 64, 32,
  1169. 64, 32, 48, 64, 16, 245, 64, 32,
  1170. 64, 32, 48, 64, 16, 1, 24, 236,
  1171. 64, 32, 64, 32, 48, 64, 16, 236,
  1172. 244, 1, 24, 245, 64, 32, 64, 32,
  1173. 48, 64, 16, 64, 32, 64, 32, 48,
  1174. 64, 16, 244, 244, 1, 24, 245, 64,
  1175. 32, 64, 32, 48, 64, 16, 236, 244,
  1176. 244, 1, 24, 236, 56, 1, 24, 56,
  1177. 64, 32, 64, 32, 48, 64, 16, 245,
  1178. 64, 32, 64, 32, 48, 64, 16, 1,
  1179. 24, 236, 236, 1, 24, 236, 244, 244,
  1180. 1, 24, 236, 245, 64, 32, 64, 32,
  1181. 48, 64, 16, 244, 1, 24, 64, 32,
  1182. 64, 32, 48, 64, 16, 244, 244, 1,
  1183. 24, 236, 56, 1, 24, 56, 245, 64,
  1184. 32, 64, 32, 48, 64, 16, 244, 1,
  1185. 24, 56, 1, 24, 56, 236, 56, 1,
  1186. 24, 56, 236, 236, 1, 24, 236, 50,
  1187. 1, 24, 50, 56, 1, 24, 56, 236,
  1188. 236, 1, 24, 236, 212, 236, 1, 24,
  1189. 236, 64, 32, 64, 32, 48, 64, 16,
  1190. 236, 244, 244, 1, 24, 236, 50, 1,
  1191. 24, 50, 212, 64, 32, 64, 32, 48,
  1192. 64, 16, 245, 64, 32, 64, 32, 48,
  1193. 64, 16, 1, 24, 236, 64, 32, 64,
  1194. 32, 48, 64, 16, 236, 244, 1, 24,
  1195. 245, 64, 32, 64, 32, 48, 64, 16,
  1196. 236, 236, 236, 1, 24, 236, 236, 236,
  1197. 1, 24, 1, 24, 236, 236, 1, 24,
  1198. 64, 32, 64, 32, 48, 64, 16, 236,
  1199. 64, 32, 64, 32, 48, 64, 16, 244,
  1200. 244, 1, 24, 1, 24, 236, 64, 32,
  1201. 64, 32, 48, 64, 16, 245, 64, 32,
  1202. 64, 32, 48, 64, 16, 244, 1, 24,
  1203. 236, 64, 32, 64, 32, 48, 64, 16,
  1204. 236, 212, 1, 24, 244, 244, 1, 24,
  1205. 245, 64, 32, 64, 32, 48, 64, 16,
  1206. 1, 24, 64, 32, 64, 32, 48, 64,
  1207. 16, 244, 1, 24, 245, 64, 32, 64,
  1208. 32, 48, 64, 16, 64, 32, 64, 32,
  1209. 48, 64, 16, 244, 244, 1, 24, 245,
  1210. 64, 32, 64, 32, 48, 64, 16, 236,
  1211. 244, 244, 1, 24, 1, 24, 1, 24,
  1212. 236, 236, 1, 24, 1, 24, 236, 1,
  1213. 24, 64, 32, 64, 32, 48, 64, 16,
  1214. 236, 236, 64, 32, 64, 32, 48, 64,
  1215. 16, 236, 64, 32, 64, 32, 48, 64,
  1216. 16, 245, 64, 32, 64, 32, 48, 64,
  1217. 16, 244, 1, 24, 1, 24, 244, 244,
  1218. 1, 24, 245, 64, 32, 64, 32, 48,
  1219. 64, 16, 244, 1, 24, 64, 32, 64,
  1220. 32, 48, 64, 16, 244, 244, 1, 24,
  1221. 1, 24, 245, 64, 32, 64, 32, 48,
  1222. 64, 16, 244, 1, 24, 1, 24, 236,
  1223. 236, 1, 24, 212, 1, 24, 244, 244,
  1224. 1, 24, 245, 64, 32, 64, 32, 48,
  1225. 64, 16, 1, 24, 64, 32, 64, 32,
  1226. 48, 64, 16, 236, 236, 236, 1, 24,
  1227. 236, 54, 1, 24, 54, 236, 1, 24,
  1228. 236, 64, 32, 64, 32, 48, 64, 16,
  1229. 236, 244, 244, 1, 24, 236, 54, 1,
  1230. 24, 54, 212, 64, 32, 64, 32, 48,
  1231. 64, 16, 245, 64, 32, 64, 32, 48,
  1232. 64, 16, 1, 24, 236, 64, 32, 64,
  1233. 32, 48, 64, 16, 236, 244, 1, 24,
  1234. 245, 64, 32, 64, 32, 48, 64, 16,
  1235. 64, 32, 64, 32, 48, 64, 16, 244,
  1236. 244, 1, 24, 245, 64, 32, 64, 32,
  1237. 48, 64, 16, 236, 244, 244, 1, 24,
  1238. 236, 56, 1, 24, 56, 64, 32, 64,
  1239. 32, 48, 64, 16, 245, 64, 32, 64,
  1240. 32, 48, 64, 16, 1, 24, 236, 236,
  1241. 1, 24, 236, 244, 244, 1, 24, 236,
  1242. 245, 64, 32, 64, 32, 48, 64, 16,
  1243. 244, 1, 24, 64, 32, 64, 32, 48,
  1244. 64, 16, 244, 244, 1, 24, 236, 56,
  1245. 1, 24, 56, 245, 64, 32, 64, 32,
  1246. 48, 64, 16, 244, 1, 24, 56, 1,
  1247. 24, 56, 236, 56, 1, 24, 56, 236,
  1248. 236, 1, 24, 236, 50, 1, 24, 50,
  1249. 56, 1, 24, 56, 236, 236, 1, 24,
  1250. 236, 212, 236, 1, 24, 236, 64, 32,
  1251. 64, 32, 48, 64, 16, 236, 244, 244,
  1252. 1, 24, 236, 50, 1, 24, 50, 212,
  1253. 64, 32, 64, 32, 48, 64, 16, 245,
  1254. 64, 32, 64, 32, 48, 64, 16, 1,
  1255. 24, 236, 64, 32, 64, 32, 48, 64,
  1256. 16, 236, 244, 1, 24, 245, 64, 32,
  1257. 64, 32, 48, 64, 16, 236, 236, 1,
  1258. 24, 1, 24, 236, 236, 1, 24, 236,
  1259. 212, 244, 244, 1, 24, 245, 64, 32,
  1260. 64, 32, 48, 64, 16, 1, 24, 64,
  1261. 32, 64, 32, 48, 64, 16, 64, 32,
  1262. 64, 32, 48, 64, 16, 244, 244, 1,
  1263. 24, 245, 64, 32, 64, 32, 48, 64,
  1264. 16, 236, 244, 244, 1, 24, 1, 24,
  1265. 1, 24, 236, 236, 1, 24, 236, 64,
  1266. 32, 64, 32, 48, 64, 16, 236, 64,
  1267. 32, 64, 32, 48, 64, 16, 245, 64,
  1268. 32, 64, 32, 48, 64, 16, 244, 1,
  1269. 24, 1, 24, 244, 244, 1, 24, 245,
  1270. 64, 32, 64, 32, 48, 64, 16, 244,
  1271. 1, 24, 64, 32, 64, 32, 48, 64,
  1272. 16, 244, 244, 1, 24, 1, 24, 245,
  1273. 64, 32, 64, 32, 48, 64, 16, 244,
  1274. 1, 24, 1, 24, 236, 236, 1, 24,
  1275. 212, 1, 24, 244, 244, 1, 24, 245,
  1276. 64, 32, 64, 32, 48, 64, 16, 1,
  1277. 24, 64, 32, 64, 32, 48, 64, 16,
  1278. 236, 244, 244, 1, 24, 245, 64, 32,
  1279. 64, 32, 48, 64, 16, 236, 236, 236,
  1280. 51, 51, 236, 236, 236, 236, 236, 236,
  1281. 236, 236, 236, 236, 51, 51, 236, 236,
  1282. 236, 236, 236, 236, 236, 236, 51, 51,
  1283. 236, 236, 236, 236, 236, 236, 236, 51,
  1284. 51, 236, 236, 236, 236, 236, 236, 236,
  1285. 236, 236, 236, 236, 56, 56, 236, 236,
  1286. 236, 236, 236, 236, 236, 236, 236, 236,
  1287. 236, 236, 236, 236, 236, 236, 236, 236,
  1288. 236, 236, 236, 236, 56, 56, 0,
  1289. ]
  1290. 1 class << self
  1291. 1 attr_accessor :_index_offsets
  1292. 1 private :_index_offsets, :_index_offsets=
  1293. end
  1294. 1 self._index_offsets = [
  1295. 0, 0, 237, 239, 264, 266, 291, 528,
  1296. 530, 555, 800, 1045, 1047, 1072, 1318, 1383,
  1297. 1416, 1481, 1514, 1563, 1628, 1645, 1882, 2119,
  1298. 2356, 2358, 2383, 2620, 2857, 3094, 3096, 3121,
  1299. 3358, 3415, 3417, 3442, 3499, 3736, 3738, 3763,
  1300. 4000, 4057, 4059, 4084, 4141, 4143, 4168, 4170,
  1301. 4195, 4197, 4222, 4459, 4696, 4698, 4723, 4725,
  1302. 4750, 4987, 5224, 5226, 5251, 5488, 5725, 5727,
  1303. 5752, 5989, 5991, 6016, 6261, 6506, 6508, 6533,
  1304. 6779, 6844, 6877, 6942, 6975, 7024, 7089, 7106,
  1305. 7343, 7580, 7817, 7819, 7844, 8081, 8318, 8555,
  1306. 8557, 8582, 8819, 8876, 8878, 8903, 8960, 9197,
  1307. 9199, 9224, 9461, 9518, 9520, 9545, 9602, 9654,
  1308. 9656, 9681, 9733, 9970, 10207, 10209, 10234, 10479,
  1309. 10724, 10726, 10751, 10988, 11225, 11227, 11252, 11489,
  1310. 11726, 11963, 11965, 11990, 12227, 12464, 12466, 12491,
  1311. 12728, 12730, 12755, 12992, 13229, 13231, 13256, 13493,
  1312. 13495, 13520, 13765, 14010, 14012, 14037, 14283, 14348,
  1313. 14381, 14446, 14479, 14528, 14593, 14610, 14847, 15084,
  1314. 15321, 15323, 15348, 15585, 15822, 16059, 16061, 16086,
  1315. 16323, 16380, 16382, 16407, 16464, 16701, 16703, 16728,
  1316. 16965, 17022, 17024, 17049, 17106, 17158, 17160, 17185,
  1317. 17237, 17474, 17711, 17713, 17738, 17983, 18228, 18230,
  1318. 18255, 18492, 18729, 18731, 18756, 18993, 19230, 19467,
  1319. 19469, 19494, 19731, 19968, 19970, 19995, 20232, 20469,
  1320. 20706, 20708, 20733, 20970, 21207, 21209, 21234, 21471,
  1321. 21708, 21945, 21947, 21972, 22209, 22274, 22307, 22372,
  1322. 22405, 22454, 22519, 22536, 22773, 22838, 22871, 22936,
  1323. 22969, 23018, 23083, 23100, 23345, 23590, 23592, 23617,
  1324. 23854, 24091, 24093, 24118, 24355, 24592, 24657, 24690,
  1325. 24755, 24788, 24837, 24902, 24919, 25165, 25230, 25263,
  1326. 25328, 25361, 25410, 25475, 25492, 25737, 25739, 25764,
  1327. 26001, 26066, 26099, 26164, 26197, 26246, 26311, 26328,
  1328. 26565, 26778, 27015, 27067, 27069, 27094, 27146, 27391,
  1329. 27636, 27638, 27663, 27909, 27974, 28007, 28072, 28105,
  1330. 28154, 28219, 28236, 28238, 28263, 28328, 28361, 28426,
  1331. 28459, 28508, 28573, 28590, 28835, 28837, 28862, 29108,
  1332. 29173, 29206, 29271, 29304, 29353, 29418, 29435, 29500,
  1333. 29533, 29598, 29631, 29680, 29745, 29762, 30007, 30252,
  1334. 30254, 30279, 30525, 30590, 30623, 30688, 30721, 30770,
  1335. 30835, 30852, 31089, 31326, 31563, 31565, 31590, 31827,
  1336. 32072, 32317, 32319, 32344, 32590, 32655, 32688, 32753,
  1337. 32786, 32835, 32900, 32917, 33162, 33164, 33189, 33426,
  1338. 33663, 33665, 33690, 33927, 34164, 34401, 34403, 34428,
  1339. 34665, 34717, 34719, 34744, 34796, 35033, 35035, 35060,
  1340. 35297, 35362, 35395, 35460, 35493, 35542, 35607, 35624,
  1341. 35861, 36098, 36163, 36196, 36261, 36294, 36343, 36408,
  1342. 36425, 36662, 36727, 36760, 36825, 36858, 36907, 36972,
  1343. 36989, 37226, 37463, 37465, 37490, 37727, 37972, 38217,
  1344. 38219, 38244, 38481, 38718, 38964, 39029, 39062, 39127,
  1345. 39160, 39209, 39274, 39291, 39536, 39538, 39563, 39628,
  1346. 39661, 39726, 39759, 39808, 39873, 39890, 40136, 40201,
  1347. 40234, 40299, 40332, 40381, 40446, 40463, 40708, 40710,
  1348. 40735, 40972, 40974, 40999, 41236, 41473, 41686, 41923,
  1349. 41980, 41982, 42007, 42064, 42309, 42554, 42556, 42581,
  1350. 42827, 42892, 42925, 42990, 43023, 43072, 43137, 43154,
  1351. 43156, 43181, 43246, 43279, 43344, 43377, 43426, 43491,
  1352. 43508, 43745, 43982, 44219, 44221, 44246, 44483, 44538,
  1353. 44540, 44565, 44620, 44857, 44859, 44884, 45121, 45186,
  1354. 45219, 45284, 45317, 45366, 45431, 45448, 45685, 45930,
  1355. 46175, 46177, 46202, 46439, 46494, 46496, 46521, 46576,
  1356. 46789, 46854, 46887, 46952, 46985, 47034, 47099, 47116,
  1357. 47362, 47427, 47460, 47525, 47558, 47607, 47672, 47689,
  1358. 47691, 47716, 47953, 48018, 48051, 48116, 48149, 48198,
  1359. 48263, 48280, 48517, 48762, 48764, 48789, 49035, 49100,
  1360. 49133, 49198, 49231, 49280, 49345, 49362, 49427, 49460,
  1361. 49525, 49558, 49607, 49672, 49689, 49934, 50179, 50181,
  1362. 50206, 50452, 50517, 50550, 50615, 50648, 50697, 50762,
  1363. 50779, 51016, 51261, 51506, 51508, 51533, 51770, 51827,
  1364. 51829, 51854, 51911, 51976, 52009, 52074, 52107, 52156,
  1365. 52221, 52238, 52484, 52549, 52582, 52647, 52680, 52729,
  1366. 52794, 52811, 52813, 52838, 53075, 53312, 53314, 53339,
  1367. 53576, 53821, 54066, 54068, 54093, 54330, 54576, 54641,
  1368. 54674, 54739, 54772, 54821, 54886, 54903, 55148, 55150,
  1369. 55175, 55240, 55273, 55338, 55371, 55420, 55485, 55502,
  1370. 55747, 55992, 55994, 56019, 56256, 56313, 56315, 56340,
  1371. 56397, 56643, 56708, 56741, 56806, 56839, 56888, 56953,
  1372. 56970, 57215, 57217, 57242, 57299, 57301, 57326, 57383,
  1373. 57620, 57677, 57679, 57704, 57761, 57998, 58235, 58237,
  1374. 58262, 58499, 58550, 58552, 58577, 58628, 58685, 58687,
  1375. 58712, 58769, 59006, 59243, 59245, 59270, 59507, 59720,
  1376. 59957, 59959, 59984, 60221, 60286, 60319, 60384, 60417,
  1377. 60466, 60531, 60548, 60785, 61030, 61275, 61277, 61302,
  1378. 61539, 61590, 61592, 61617, 61668, 61881, 61946, 61979,
  1379. 62044, 62077, 62126, 62191, 62208, 62454, 62519, 62552,
  1380. 62617, 62650, 62699, 62764, 62781, 62783, 62808, 63045,
  1381. 63110, 63143, 63208, 63241, 63290, 63355, 63372, 63609,
  1382. 63854, 63856, 63881, 64127, 64192, 64225, 64290, 64323,
  1383. 64372, 64437, 64454, 64691, 64928, 64930, 64955, 65192,
  1384. 65429, 65431, 65456, 65693, 65930, 66167, 66169, 66194,
  1385. 66431, 66496, 66529, 66594, 66627, 66676, 66741, 66758,
  1386. 66995, 67060, 67093, 67158, 67191, 67240, 67305, 67322,
  1387. 67567, 67812, 67814, 67839, 68076, 68313, 68315, 68340,
  1388. 68577, 68814, 68879, 68912, 68977, 69010, 69059, 69124,
  1389. 69141, 69387, 69452, 69485, 69550, 69583, 69632, 69697,
  1390. 69714, 69959, 69961, 69986, 70223, 70288, 70321, 70386,
  1391. 70419, 70468, 70533, 70550, 70787, 71000, 71237, 71289,
  1392. 71291, 71316, 71368, 71613, 71858, 71860, 71885, 72131,
  1393. 72196, 72229, 72294, 72327, 72376, 72441, 72458, 72460,
  1394. 72485, 72550, 72583, 72648, 72681, 72730, 72795, 72812,
  1395. 73057, 73059, 73084, 73330, 73395, 73428, 73493, 73526,
  1396. 73575, 73640, 73657, 73722, 73755, 73820, 73853, 73902,
  1397. 73967, 73984, 74229, 74474, 74476, 74501, 74747, 74812,
  1398. 74845, 74910, 74943, 74992, 75057, 75074, 75311, 75548,
  1399. 75785, 75787, 75812, 76049, 76294, 76539, 76541, 76566,
  1400. 76812, 76877, 76910, 76975, 77008, 77057, 77122, 77139,
  1401. 77384, 77386, 77411, 77648, 77885, 77887, 77912, 78149,
  1402. 78386, 78623, 78625, 78650, 78887, 78939, 78941, 78966,
  1403. 79018, 79255, 79257, 79282, 79519, 79584, 79617, 79682,
  1404. 79715, 79764, 79829, 79846, 80083, 80320, 80385, 80418,
  1405. 80483, 80516, 80565, 80630, 80647, 80884, 80949, 80982,
  1406. 81047, 81080, 81129, 81194, 81211, 81448, 81685, 81687,
  1407. 81712, 81949, 82194, 82439, 82441, 82466, 82703, 82940,
  1408. 83186, 83251, 83284, 83349, 83382, 83431, 83496, 83513,
  1409. 83758, 83760, 83785, 83850, 83883, 83948, 83981, 84030,
  1410. 84095, 84112, 84358, 84423, 84456, 84521, 84554, 84603,
  1411. 84668, 84685, 84930, 84932, 84957, 85194, 85196, 85221,
  1412. 85458, 85695, 85932, 86169, 86171, 86196, 86433, 86670,
  1413. 86672, 86697, 86934, 86936, 86961, 87206, 87451, 87453,
  1414. 87478, 87724, 87789, 87822, 87887, 87920, 87969, 88034,
  1415. 88051, 88288, 88525, 88762, 88764, 88789, 89026, 89263,
  1416. 89500, 89502, 89527, 89764, 89821, 89823, 89848, 89905,
  1417. 90142, 90144, 90169, 90406, 90463, 90465, 90490, 90547,
  1418. 90599, 90601, 90626, 90678, 90680, 90705, 90942, 91179,
  1419. 91181, 91206, 91443, 91498, 91500, 91525, 91580, 91817,
  1420. 91819, 91844, 92081, 92146, 92179, 92244, 92277, 92326,
  1421. 92391, 92408, 92645, 92890, 93135, 93137, 93162, 93399,
  1422. 93454, 93456, 93481, 93536, 93749, 93814, 93847, 93912,
  1423. 93945, 93994, 94059, 94076, 94322, 94387, 94420, 94485,
  1424. 94518, 94567, 94632, 94649, 94651, 94676, 94913, 94978,
  1425. 95011, 95076, 95109, 95158, 95223, 95240, 95477, 95722,
  1426. 95724, 95749, 95995, 96060, 96093, 96158, 96191, 96240,
  1427. 96305, 96322, 96387, 96420, 96485, 96518, 96567, 96632,
  1428. 96649, 96894, 97139, 97141, 97166, 97412, 97477, 97510,
  1429. 97575, 97608, 97657, 97722, 97739, 97976, 98221, 98466,
  1430. 98468, 98493, 98730, 98787, 98789, 98814, 98871, 98936,
  1431. 98969, 99034, 99067, 99116, 99181, 99198, 99444, 99509,
  1432. 99542, 99607, 99640, 99689, 99754, 99771, 99773, 99798,
  1433. 100035, 100272, 100274, 100299, 100536, 100781, 101026, 101028,
  1434. 101053, 101290, 101536, 101601, 101634, 101699, 101732, 101781,
  1435. 101846, 101863, 102108, 102110, 102135, 102200, 102233, 102298,
  1436. 102331, 102380, 102445, 102462, 102707, 102952, 102954, 102979,
  1437. 103216, 103273, 103275, 103300, 103357, 103603, 103668, 103701,
  1438. 103766, 103799, 103848, 103913, 103930, 104175, 104177, 104202,
  1439. 104259, 104261, 104286, 104343, 104580, 104637, 104639, 104664,
  1440. 104721, 104958, 105195, 105197, 105222, 105459, 105510, 105512,
  1441. 105537, 105588, 105645, 105647, 105672, 105729, 105966, 106203,
  1442. 106205, 106230, 106467, 106680, 106917, 106919, 106944, 107181,
  1443. 107246, 107279, 107344, 107377, 107426, 107491, 107508, 107745,
  1444. 107990, 108235, 108237, 108262, 108499, 108550, 108552, 108577,
  1445. 108628, 108841, 108906, 108939, 109004, 109037, 109086, 109151,
  1446. 109168, 109414, 109479, 109512, 109577, 109610, 109659, 109724,
  1447. 109741, 109743, 109768, 110005, 110070, 110103, 110168, 110201,
  1448. 110250, 110315, 110332, 110569, 110814, 110816, 110841, 111087,
  1449. 111152, 111185, 111250, 111283, 111332, 111397, 111414, 111479,
  1450. 111512, 111577, 111610, 111659, 111724, 111741, 111978, 112215,
  1451. 112452, 112454, 112479, 112716, 112953, 112955, 112980, 113217,
  1452. 113454, 113691, 113693, 113718, 113955, 114192, 114194, 114219,
  1453. 114456, 114693, 114930, 114932, 114957, 115194, 115259, 115292,
  1454. 115357, 115390, 115439, 115504, 115521, 115758, 116003, 116248,
  1455. 116250, 116275, 116512, 116749, 116751, 116776, 117013, 117250,
  1456. 117315, 117348, 117413, 117446, 117495, 117560, 117577, 117823,
  1457. 117888, 117921, 117986, 118019, 118068, 118133, 118150, 118395,
  1458. 118397, 118422, 118659, 118724, 118757, 118822, 118855, 118904,
  1459. 118969, 118986, 119223, 119436, 119673, 119725, 119727, 119752,
  1460. 119804, 120049, 120294, 120296, 120321, 120567, 120632, 120665,
  1461. 120730, 120763, 120812, 120877, 120894, 120896, 120921, 120986,
  1462. 121019, 121084, 121117, 121166, 121231, 121248, 121493, 121495,
  1463. 121520, 121766, 121831, 121864, 121929, 121962, 122011, 122076,
  1464. 122093, 122158, 122191, 122256, 122289, 122338, 122403, 122420,
  1465. 122665, 122910, 122912, 122937, 123183, 123248, 123281, 123346,
  1466. 123379, 123428, 123493, 123510, 123747, 123992, 124237, 124239,
  1467. 124264, 124501, 124738, 124740, 124765, 125002, 125239, 125476,
  1468. 125478, 125503, 125740, 125977, 126214, 126216, 126241, 126478,
  1469. 126530, 126532, 126557, 126609, 126846, 126848, 126873, 127110,
  1470. 127175, 127208, 127273, 127306, 127355, 127420, 127437, 127674,
  1471. 127911, 127976, 128009, 128074, 128107, 128156, 128221, 128238,
  1472. 128475, 128540, 128573, 128638, 128671, 128720, 128785, 128802,
  1473. 129048, 129113, 129146, 129211, 129244, 129293, 129358, 129375,
  1474. 129620, 129622, 129647, 129884, 130121, 130123, 130148, 130385,
  1475. 130630, 130875, 130877, 130902, 131139, 131385, 131450, 131483,
  1476. 131548, 131581, 131630, 131695, 131712, 131957, 131959, 131984,
  1477. 132049, 132082, 132147, 132180, 132229, 132294, 132311, 132556,
  1478. 132801, 132803, 132828, 133065, 133302, 133304, 133329, 133566,
  1479. 133812, 133877, 133910, 133975, 134008, 134057, 134122, 134139,
  1480. 134384, 134386, 134411, 134648, 134650, 134675, 134912, 135149,
  1481. 135362, 135599, 135656, 135658, 135683, 135740, 135985, 136230,
  1482. 136232, 136257, 136503, 136568, 136601, 136666, 136699, 136748,
  1483. 136813, 136830, 136832, 136857, 136922, 136955, 137020, 137053,
  1484. 137102, 137167, 137184, 137421, 137634, 137871, 137928, 137930,
  1485. 137955, 138012, 138257, 138502, 138504, 138529, 138775, 138840,
  1486. 138873, 138938, 138971, 139020, 139085, 139102, 139104, 139129,
  1487. 139194, 139227, 139292, 139325, 139374, 139439, 139456, 139693,
  1488. 139930, 140167, 140169, 140194, 140431, 140486, 140488, 140513,
  1489. 140568, 140805, 140807, 140832, 141069, 141134, 141167, 141232,
  1490. 141265, 141314, 141379, 141396, 141633, 141878, 142123, 142125,
  1491. 142150, 142387, 142442, 142444, 142469, 142524, 142737, 142802,
  1492. 142835, 142900, 142933, 142982, 143047, 143064, 143310, 143375,
  1493. 143408, 143473, 143506, 143555, 143620, 143637, 143639, 143664,
  1494. 143901, 143966, 143999, 144064, 144097, 144146, 144211, 144228,
  1495. 144465, 144710, 144712, 144737, 144983, 145048, 145081, 145146,
  1496. 145179, 145228, 145293, 145310, 145375, 145408, 145473, 145506,
  1497. 145555, 145620, 145637, 145882, 146127, 146129, 146154, 146400,
  1498. 146465, 146498, 146563, 146596, 146645, 146710, 146727, 146964,
  1499. 147209, 147454, 147456, 147481, 147718, 147775, 147777, 147802,
  1500. 147859, 147924, 147957, 148022, 148055, 148104, 148169, 148186,
  1501. 148432, 148497, 148530, 148595, 148628, 148677, 148742, 148759,
  1502. 148761, 148786, 149023, 149260, 149262, 149287, 149524, 149769,
  1503. 150014, 150016, 150041, 150278, 150524, 150589, 150622, 150687,
  1504. 150720, 150769, 150834, 150851, 151096, 151098, 151123, 151188,
  1505. 151221, 151286, 151319, 151368, 151433, 151450, 151695, 151940,
  1506. 151942, 151967, 152204, 152261, 152263, 152288, 152345, 152591,
  1507. 152656, 152689, 152754, 152787, 152836, 152901, 152918, 153163,
  1508. 153165, 153190, 153247, 153249, 153274, 153331, 153568, 153625,
  1509. 153627, 153652, 153709, 153946, 154183, 154185, 154210, 154447,
  1510. 154498, 154500, 154525, 154576, 154633, 154635, 154660, 154717,
  1511. 154954, 155191, 155193, 155218, 155455, 155668, 155905, 155907,
  1512. 155932, 156169, 156234, 156267, 156332, 156365, 156414, 156479,
  1513. 156496, 156733, 156978, 157223, 157225, 157250, 157487, 157538,
  1514. 157540, 157565, 157616, 157829, 157894, 157927, 157992, 158025,
  1515. 158074, 158139, 158156, 158402, 158467, 158500, 158565, 158598,
  1516. 158647, 158712, 158729, 158731, 158756, 158993, 159058, 159091,
  1517. 159156, 159189, 159238, 159303, 159320, 159557, 159802, 159804,
  1518. 159829, 160075, 160140, 160173, 160238, 160271, 160320, 160385,
  1519. 160402, 160639, 160876, 161113, 161115, 161140, 161377, 161614,
  1520. 161851, 161853, 161878, 161880, 161905, 162142, 162379, 162381,
  1521. 162406, 162471, 162504, 162569, 162602, 162651, 162716, 162733,
  1522. 162970, 163035, 163068, 163133, 163166, 163215, 163280, 163297,
  1523. 163542, 163787, 163789, 163814, 163816, 163841, 164078, 164143,
  1524. 164176, 164241, 164274, 164323, 164388, 164405, 164651, 164716,
  1525. 164749, 164814, 164847, 164896, 164961, 164978, 165223, 165225,
  1526. 165250, 165487, 165552, 165585, 165650, 165683, 165732, 165797,
  1527. 165814, 166051, 166264, 166266, 166291, 166536, 166781, 166783,
  1528. 166808, 167054, 167119, 167152, 167217, 167250, 167299, 167364,
  1529. 167381, 167383, 167408, 167473, 167506, 167571, 167604, 167653,
  1530. 167718, 167735, 167980, 167982, 168007, 168253, 168318, 168351,
  1531. 168416, 168449, 168498, 168563, 168580, 168645, 168678, 168743,
  1532. 168776, 168825, 168890, 168907, 169152, 169397, 169399, 169424,
  1533. 169670, 169735, 169768, 169833, 169866, 169915, 169980, 169997,
  1534. 170234, 170479, 170724, 170726, 170751, 170753, 170778, 170780,
  1535. 170805, 171042, 171279, 171281, 171306, 171308, 171333, 171570,
  1536. 171572, 171597, 171662, 171695, 171760, 171793, 171842, 171907,
  1537. 171924, 172161, 172398, 172463, 172496, 172561, 172594, 172643,
  1538. 172708, 172725, 172962, 173027, 173060, 173125, 173158, 173207,
  1539. 173272, 173289, 173535, 173600, 173633, 173698, 173731, 173780,
  1540. 173845, 173862, 174107, 174109, 174134, 174136, 174161, 174406,
  1541. 174651, 174653, 174678, 174924, 174989, 175022, 175087, 175120,
  1542. 175169, 175234, 175251, 175496, 175498, 175523, 175588, 175621,
  1543. 175686, 175719, 175768, 175833, 175850, 176095, 176340, 176342,
  1544. 176367, 176369, 176394, 176640, 176705, 176738, 176803, 176836,
  1545. 176885, 176950, 176967, 177212, 177214, 177239, 177241, 177266,
  1546. 177503, 177740, 177742, 177767, 177980, 177982, 178007, 178252,
  1547. 178497, 178499, 178524, 178770, 178835, 178868, 178933, 178966,
  1548. 179015, 179080, 179097, 179099, 179124, 179189, 179222, 179287,
  1549. 179320, 179369, 179434, 179451, 179688, 179925, 180162, 180164,
  1550. 180189, 180426, 180481, 180483, 180508, 180563, 180800, 180802,
  1551. 180827, 181064, 181129, 181162, 181227, 181260, 181309, 181374,
  1552. 181391, 181628, 181873, 182118, 182120, 182145, 182382, 182437,
  1553. 182439, 182464, 182519, 182732, 182797, 182830, 182895, 182928,
  1554. 182977, 183042, 183059, 183305, 183370, 183403, 183468, 183501,
  1555. 183550, 183615, 183632, 183634, 183659, 183896, 183961, 183994,
  1556. 184059, 184092, 184141, 184206, 184223, 184460, 184705, 184707,
  1557. 184732, 184978, 185043, 185076, 185141, 185174, 185223, 185288,
  1558. 185305, 185370, 185403, 185468, 185501, 185550, 185615, 185632,
  1559. 185877, 186122, 186124, 186149, 186395, 186460, 186493, 186558,
  1560. 186591, 186640, 186705, 186722, 186959, 187204, 187449, 187451,
  1561. 187476, 187713, 187770, 187772, 187797, 187854, 187919, 187952,
  1562. 188017, 188050, 188099, 188164, 188181, 188427, 188492, 188525,
  1563. 188590, 188623, 188672, 188737, 188754, 188756, 188781, 189018,
  1564. 189255, 189257, 189282, 189519, 189764, 190009, 190011, 190036,
  1565. 190273, 190519, 190584, 190617, 190682, 190715, 190764, 190829,
  1566. 190846, 191091, 191093, 191118, 191183, 191216, 191281, 191314,
  1567. 191363, 191428, 191445, 191690, 191935, 191937, 191962, 192199,
  1568. 192256, 192258, 192283, 192340, 192586, 192651, 192684, 192749,
  1569. 192782, 192831, 192896, 192913, 193158, 193160, 193185, 193242,
  1570. 193244, 193269, 193326, 193563, 193620, 193622, 193647, 193704,
  1571. 193941, 194178, 194180, 194205, 194442, 194493, 194495, 194520,
  1572. 194571, 194628, 194630, 194655, 194712, 194949, 195186, 195188,
  1573. 195213, 195450, 195663, 195900, 195902, 195927, 196164, 196229,
  1574. 196262, 196327, 196360, 196409, 196474, 196491, 196728, 196973,
  1575. 197218, 197220, 197245, 197482, 197533, 197535, 197560, 197611,
  1576. 197824, 197889, 197922, 197987, 198020, 198069, 198134, 198151,
  1577. 198397, 198462, 198495, 198560, 198593, 198642, 198707, 198724,
  1578. 198726, 198751, 198988, 199053, 199086, 199151, 199184, 199233,
  1579. 199298, 199315, 199552, 199797, 199799, 199824, 200070, 200135,
  1580. 200168, 200233, 200266, 200315, 200380, 200397, 200634, 200871,
  1581. 200873, 200898, 200900, 200925, 201162, 201399, 201401, 201426,
  1582. 201663, 201876, 202121, 202366, 202368, 202393, 202639, 202704,
  1583. 202737, 202802, 202835, 202884, 202949, 202966, 202968, 202993,
  1584. 203058, 203091, 203156, 203189, 203238, 203303, 203320, 203385,
  1585. 203418, 203483, 203516, 203565, 203630, 203647, 203892, 204137,
  1586. 204139, 204164, 204410, 204475, 204508, 204573, 204606, 204655,
  1587. 204720, 204737, 204974, 205219, 205464, 205466, 205491, 205493,
  1588. 205518, 205520, 205545, 205782, 206019, 206021, 206046, 206283,
  1589. 206348, 206381, 206446, 206479, 206528, 206593, 206610, 206847,
  1590. 206912, 206945, 207010, 207043, 207092, 207157, 207174, 207420,
  1591. 207485, 207518, 207583, 207616, 207665, 207730, 207747, 207992,
  1592. 207994, 208019, 208021, 208046, 208291, 208536, 208538, 208563,
  1593. 208809, 208874, 208907, 208972, 209005, 209054, 209119, 209136,
  1594. 209381, 209383, 209408, 209473, 209506, 209571, 209604, 209653,
  1595. 209718, 209735, 209980, 210225, 210227, 210252, 210254, 210279,
  1596. 210525, 210590, 210623, 210688, 210721, 210770, 210835, 210852,
  1597. 211097, 211099, 211124, 211126, 211151, 211388, 211625, 211627,
  1598. 211652, 211865, 211867, 211892, 212137, 212382, 212384, 212409,
  1599. 212655, 212720, 212753, 212818, 212851, 212900, 212965, 212982,
  1600. 212984, 213009, 213074, 213107, 213172, 213205, 213254, 213319,
  1601. 213336, 213573, 213818, 214063, 214065, 214090, 214336, 214401,
  1602. 214434, 214499, 214532, 214581, 214646, 214663, 214900, 215137,
  1603. 215374, 215426, 215478, 215715, 215952, 216189, 216426, 216663,
  1604. 216900, 217137, 217374, 217611, 217848, 217900, 217952, 218189,
  1605. 218426, 218663, 218900, 219137, 219374, 219611, 219848, 219900,
  1606. 219952, 220189, 220426, 220663, 220900, 221137, 221374, 221611,
  1607. 221663, 221715, 221952, 222189, 222426, 222663, 222900, 223137,
  1608. 223374, 223611, 223848, 224085, 224322, 224379, 224436, 224673,
  1609. 224910, 225147, 225384, 225621, 225858, 226095, 226332, 226569,
  1610. 226806, 227043, 227280, 227517, 227754, 227991, 228228, 228465,
  1611. 228702, 228939, 229176, 229413, 229650, 229707, 229764,
  1612. ]
  1613. 1 class << self
  1614. 1 attr_accessor :_indicies
  1615. 1 private :_indicies, :_indicies=
  1616. end
  1617. 1 self._indicies = [
  1618. 0, 1, 1, 1, 2, 1, 1, 1,
  1619. 1, 1, 1, 1, 1, 1, 1, 1,
  1620. 1, 1, 1, 1, 1, 1, 1, 0,
  1621. 3, 4, 3, 3, 3, 3, 3, 5,
  1622. 1, 3, 3, 6, 3, 7, 3, 3,
  1623. 3, 3, 3, 3, 3, 3, 3, 3,
  1624. 3, 1, 6, 8, 3, 1, 3, 1,
  1625. 3, 3, 3, 3, 3, 3, 3, 3,
  1626. 3, 3, 3, 3, 3, 3, 3, 3,
  1627. 3, 3, 3, 3, 3, 3, 3, 3,
  1628. 3, 3, 1, 1, 1, 3, 3, 3,
  1629. 3, 3, 3, 3, 3, 3, 3, 3,
  1630. 3, 3, 3, 3, 3, 3, 3, 3,
  1631. 3, 3, 3, 3, 3, 3, 3, 3,
  1632. 3, 3, 3, 3, 3, 3, 1, 1,
  1633. 1, 1, 1, 1, 1, 1, 1, 1,
  1634. 1, 1, 1, 1, 1, 1, 1, 1,
  1635. 1, 1, 1, 1, 1, 1, 1, 1,
  1636. 1, 1, 1, 1, 1, 1, 1, 1,
  1637. 1, 1, 1, 1, 1, 1, 1, 1,
  1638. 1, 1, 1, 1, 1, 1, 1, 1,
  1639. 1, 1, 1, 1, 1, 1, 1, 1,
  1640. 1, 1, 1, 1, 1, 1, 1, 1,
  1641. 1, 9, 9, 9, 9, 9, 9, 9,
  1642. 9, 9, 9, 9, 9, 9, 9, 9,
  1643. 9, 9, 9, 9, 9, 9, 9, 9,
  1644. 9, 9, 9, 9, 9, 9, 9, 10,
  1645. 11, 11, 11, 11, 11, 11, 11, 11,
  1646. 11, 11, 11, 11, 12, 11, 11, 13,
  1647. 14, 14, 14, 15, 1, 16, 1, 0,
  1648. 1, 1, 1, 1, 1, 1, 1, 1,
  1649. 1, 1, 1, 1, 1, 1, 1, 1,
  1650. 1, 1, 1, 1, 1, 1, 0, 1,
  1651. 17, 1, 18, 1, 1, 1, 1, 1,
  1652. 1, 1, 1, 1, 1, 1, 1, 1,
  1653. 1, 1, 1, 1, 1, 1, 1, 1,
  1654. 1, 18, 1, 19, 1, 1, 1, 20,
  1655. 1, 1, 1, 1, 1, 1, 1, 1,
  1656. 1, 1, 1, 1, 1, 1, 1, 1,
  1657. 1, 1, 19, 21, 22, 21, 21, 21,
  1658. 21, 21, 23, 1, 21, 21, 1, 21,
  1659. 24, 21, 21, 21, 21, 21, 21, 21,
  1660. 21, 21, 21, 21, 25, 1, 26, 21,
  1661. 1, 21, 24, 21, 21, 21, 21, 21,
  1662. 21, 21, 21, 21, 21, 21, 21, 21,
  1663. 21, 21, 21, 21, 21, 21, 21, 21,
  1664. 21, 21, 21, 21, 21, 1, 1, 1,
  1665. 21, 21, 21, 21, 21, 21, 21, 21,
  1666. 21, 21, 21, 21, 21, 21, 21, 21,
  1667. 21, 21, 21, 21, 21, 21, 21, 21,
  1668. 21, 21, 21, 21, 21, 21, 21, 21,
  1669. 21, 1, 1, 1, 1, 1, 1, 1,
  1670. 1, 1, 1, 1, 1, 1, 1, 1,
  1671. 1, 1, 1, 1, 1, 1, 1, 1,
  1672. 1, 1, 1, 1, 1, 1, 1, 1,
  1673. 1, 1, 1, 1, 1, 1, 1, 1,
  1674. 1, 1, 1, 1, 1, 1, 1, 1,
  1675. 1, 1, 1, 1, 1, 1, 1, 1,
  1676. 1, 1, 1, 1, 1, 1, 1, 1,
  1677. 1, 1, 1, 1, 27, 27, 27, 27,
  1678. 27, 27, 27, 27, 27, 27, 27, 27,
  1679. 27, 27, 27, 27, 27, 27, 27, 27,
  1680. 27, 27, 27, 27, 27, 27, 27, 27,
  1681. 27, 27, 28, 29, 29, 29, 29, 29,
  1682. 29, 29, 29, 29, 29, 29, 29, 30,
  1683. 29, 29, 31, 32, 32, 32, 33, 1,
  1684. 34, 1, 21, 1, 1, 1, 1, 1,
  1685. 1, 1, 1, 1, 1, 1, 1, 1,
  1686. 1, 1, 1, 1, 1, 1, 1, 1,
  1687. 1, 21, 1, 35, 35, 35, 35, 35,
  1688. 35, 35, 35, 35, 1, 35, 35, 36,
  1689. 35, 35, 35, 35, 35, 35, 35, 35,
  1690. 35, 35, 35, 35, 35, 35, 35, 35,
  1691. 35, 35, 35, 35, 37, 35, 35, 35,
  1692. 35, 35, 35, 35, 35, 35, 35, 35,
  1693. 35, 35, 35, 35, 35, 35, 35, 35,
  1694. 35, 35, 35, 35, 35, 35, 35, 35,
  1695. 35, 35, 35, 35, 35, 35, 35, 35,
  1696. 35, 35, 35, 35, 35, 35, 35, 35,
  1697. 35, 35, 35, 35, 35, 35, 35, 35,
  1698. 35, 35, 35, 35, 35, 35, 38, 35,
  1699. 35, 35, 35, 35, 35, 35, 35, 35,
  1700. 35, 35, 35, 35, 35, 35, 35, 35,
  1701. 35, 35, 35, 35, 35, 35, 35, 35,
  1702. 35, 35, 35, 35, 35, 35, 35, 35,
  1703. 35, 35, 1, 1, 1, 1, 1, 1,
  1704. 1, 1, 1, 1, 1, 1, 1, 1,
  1705. 1, 1, 1, 1, 1, 1, 1, 1,
  1706. 1, 1, 1, 1, 1, 1, 1, 1,
  1707. 1, 1, 1, 1, 1, 1, 1, 1,
  1708. 1, 1, 1, 1, 1, 1, 1, 1,
  1709. 1, 1, 1, 1, 1, 1, 1, 1,
  1710. 1, 1, 1, 1, 1, 1, 1, 1,
  1711. 1, 1, 1, 1, 39, 39, 39, 39,
  1712. 39, 39, 39, 39, 39, 39, 39, 39,
  1713. 39, 39, 39, 39, 39, 39, 39, 39,
  1714. 39, 39, 39, 39, 39, 39, 39, 39,
  1715. 39, 39, 40, 41, 41, 41, 41, 41,
  1716. 41, 41, 41, 41, 41, 41, 41, 42,
  1717. 41, 41, 43, 44, 44, 44, 45, 1,
  1718. 46, 46, 46, 46, 46, 46, 46, 46,
  1719. 46, 1, 46, 46, 47, 46, 46, 46,
  1720. 46, 46, 46, 46, 46, 46, 46, 46,
  1721. 46, 46, 46, 46, 46, 46, 46, 46,
  1722. 46, 48, 46, 46, 46, 46, 46, 46,
  1723. 46, 46, 46, 46, 46, 46, 46, 46,
  1724. 46, 46, 46, 46, 46, 46, 46, 46,
  1725. 46, 46, 46, 46, 46, 46, 46, 46,
  1726. 46, 46, 46, 46, 46, 46, 46, 46,
  1727. 46, 46, 46, 46, 46, 46, 46, 46,
  1728. 46, 46, 46, 46, 46, 46, 46, 46,
  1729. 46, 46, 46, 49, 46, 46, 46, 46,
  1730. 46, 46, 46, 46, 46, 46, 46, 46,
  1731. 46, 46, 46, 46, 46, 46, 46, 46,
  1732. 46, 46, 46, 46, 46, 46, 46, 46,
  1733. 46, 46, 46, 46, 46, 46, 46, 1,
  1734. 1, 1, 1, 1, 1, 1, 1, 1,
  1735. 1, 1, 1, 1, 1, 1, 1, 1,
  1736. 1, 1, 1, 1, 1, 1, 1, 1,
  1737. 1, 1, 1, 1, 1, 1, 1, 1,
  1738. 1, 1, 1, 1, 1, 1, 1, 1,
  1739. 1, 1, 1, 1, 1, 1, 1, 1,
  1740. 1, 1, 1, 1, 1, 1, 1, 1,
  1741. 1, 1, 1, 1, 1, 1, 1, 1,
  1742. 1, 50, 50, 50, 50, 50, 50, 50,
  1743. 50, 50, 50, 50, 50, 50, 50, 50,
  1744. 50, 50, 50, 50, 50, 50, 50, 50,
  1745. 50, 50, 50, 50, 50, 50, 50, 51,
  1746. 52, 52, 52, 52, 52, 52, 52, 52,
  1747. 52, 52, 52, 52, 53, 52, 52, 54,
  1748. 55, 55, 55, 56, 1, 57, 1, 46,
  1749. 1, 1, 1, 1, 1, 1, 1, 1,
  1750. 1, 1, 1, 1, 1, 1, 1, 1,
  1751. 1, 1, 1, 1, 1, 1, 46, 1,
  1752. 46, 46, 46, 46, 46, 46, 46, 46,
  1753. 46, 46, 46, 46, 46, 46, 46, 46,
  1754. 46, 46, 46, 46, 46, 46, 46, 46,
  1755. 46, 46, 46, 46, 46, 46, 46, 46,
  1756. 46, 46, 46, 46, 46, 46, 46, 46,
  1757. 46, 46, 46, 46, 46, 46, 46, 46,
  1758. 46, 46, 46, 46, 46, 46, 46, 46,
  1759. 46, 46, 46, 46, 46, 46, 46, 46,
  1760. 46, 46, 46, 46, 46, 46, 46, 46,
  1761. 46, 46, 46, 46, 46, 46, 46, 46,
  1762. 46, 46, 46, 46, 46, 46, 46, 46,
  1763. 46, 46, 46, 46, 46, 46, 46, 46,
  1764. 46, 46, 46, 46, 46, 46, 46, 46,
  1765. 46, 46, 46, 46, 46, 46, 46, 46,
  1766. 46, 46, 46, 46, 46, 46, 46, 46,
  1767. 46, 46, 46, 46, 46, 46, 46, 46,
  1768. 1, 1, 1, 1, 1, 1, 1, 1,
  1769. 1, 1, 1, 1, 1, 1, 1, 1,
  1770. 1, 1, 1, 1, 1, 1, 1, 1,
  1771. 1, 1, 1, 1, 1, 1, 1, 1,
  1772. 1, 1, 1, 1, 1, 1, 1, 1,
  1773. 1, 1, 1, 1, 1, 1, 1, 1,
  1774. 1, 1, 1, 1, 1, 1, 1, 1,
  1775. 1, 1, 1, 1, 1, 1, 1, 1,
  1776. 1, 1, 50, 50, 50, 50, 50, 50,
  1777. 50, 50, 50, 50, 50, 50, 50, 50,
  1778. 50, 50, 50, 50, 50, 50, 50, 50,
  1779. 50, 50, 50, 50, 50, 50, 50, 50,
  1780. 51, 52, 52, 52, 52, 52, 52, 52,
  1781. 52, 52, 52, 52, 52, 53, 52, 52,
  1782. 54, 55, 55, 55, 56, 1, 46, 46,
  1783. 46, 46, 46, 46, 46, 46, 46, 46,
  1784. 46, 46, 46, 46, 46, 46, 46, 46,
  1785. 46, 46, 46, 46, 46, 46, 46, 46,
  1786. 46, 46, 46, 46, 46, 46, 46, 46,
  1787. 46, 46, 46, 46, 46, 46, 46, 46,
  1788. 46, 46, 46, 46, 46, 46, 46, 46,
  1789. 46, 46, 46, 46, 46, 46, 46, 46,
  1790. 46, 46, 46, 46, 46, 46, 1, 50,
  1791. 50, 50, 50, 50, 50, 50, 50, 50,
  1792. 50, 50, 50, 50, 50, 50, 50, 50,
  1793. 50, 50, 50, 50, 50, 50, 50, 50,
  1794. 50, 50, 50, 50, 50, 50, 50, 1,
  1795. 50, 50, 50, 50, 50, 50, 50, 50,
  1796. 50, 50, 50, 50, 50, 50, 50, 50,
  1797. 50, 50, 50, 50, 50, 50, 50, 50,
  1798. 50, 50, 50, 50, 50, 50, 50, 50,
  1799. 50, 50, 50, 50, 50, 50, 50, 50,
  1800. 50, 50, 50, 50, 50, 50, 50, 50,
  1801. 50, 50, 50, 50, 50, 50, 50, 50,
  1802. 50, 50, 50, 50, 50, 50, 50, 50,
  1803. 1, 50, 50, 50, 50, 50, 50, 50,
  1804. 50, 50, 50, 50, 50, 50, 50, 50,
  1805. 50, 50, 50, 50, 50, 50, 50, 50,
  1806. 50, 50, 50, 50, 50, 50, 50, 50,
  1807. 50, 1, 52, 52, 52, 52, 52, 52,
  1808. 52, 52, 52, 52, 52, 52, 52, 52,
  1809. 52, 52, 52, 52, 52, 52, 52, 52,
  1810. 52, 52, 52, 52, 52, 52, 52, 52,
  1811. 52, 52, 52, 52, 52, 52, 52, 52,
  1812. 52, 52, 52, 52, 52, 52, 52, 52,
  1813. 52, 52, 1, 52, 52, 52, 52, 52,
  1814. 52, 52, 52, 52, 52, 52, 52, 52,
  1815. 52, 52, 52, 52, 52, 52, 52, 52,
  1816. 52, 52, 52, 52, 52, 52, 52, 52,
  1817. 52, 52, 52, 52, 52, 52, 52, 52,
  1818. 52, 52, 52, 52, 52, 52, 52, 52,
  1819. 52, 52, 52, 52, 52, 52, 52, 52,
  1820. 52, 52, 52, 52, 52, 52, 52, 52,
  1821. 52, 52, 52, 1, 52, 52, 52, 52,
  1822. 52, 52, 52, 52, 52, 52, 52, 52,
  1823. 52, 52, 52, 52, 1, 58, 1, 1,
  1824. 1, 59, 1, 1, 1, 1, 1, 1,
  1825. 1, 1, 1, 1, 1, 1, 1, 1,
  1826. 1, 1, 1, 1, 58, 60, 61, 60,
  1827. 60, 60, 60, 60, 62, 1, 60, 60,
  1828. 1, 60, 63, 60, 60, 60, 60, 60,
  1829. 60, 60, 60, 60, 60, 60, 64, 1,
  1830. 65, 60, 1, 60, 63, 60, 60, 60,
  1831. 60, 60, 60, 60, 60, 60, 60, 60,
  1832. 60, 60, 60, 60, 60, 60, 60, 60,
  1833. 60, 60, 60, 60, 60, 60, 60, 1,
  1834. 1, 1, 60, 60, 60, 60, 60, 60,
  1835. 60, 60, 60, 60, 60, 60, 60, 60,
  1836. 60, 60, 60, 60, 60, 60, 60, 60,
  1837. 60, 60, 60, 60, 60, 60, 60, 60,
  1838. 60, 60, 60, 1, 1, 1, 1, 1,
  1839. 1, 1, 1, 1, 1, 1, 1, 1,
  1840. 1, 1, 1, 1, 1, 1, 1, 1,
  1841. 1, 1, 1, 1, 1, 1, 1, 1,
  1842. 1, 1, 1, 1, 1, 1, 1, 1,
  1843. 1, 1, 1, 1, 1, 1, 1, 1,
  1844. 1, 1, 1, 1, 1, 1, 1, 1,
  1845. 1, 1, 1, 1, 1, 1, 1, 1,
  1846. 1, 1, 1, 1, 1, 1, 66, 66,
  1847. 66, 66, 66, 66, 66, 66, 66, 66,
  1848. 66, 66, 66, 66, 66, 66, 66, 66,
  1849. 66, 66, 66, 66, 66, 66, 66, 66,
  1850. 66, 66, 66, 66, 67, 68, 68, 68,
  1851. 68, 68, 68, 68, 68, 68, 68, 68,
  1852. 68, 69, 68, 68, 70, 71, 71, 71,
  1853. 72, 1, 73, 1, 1, 1, 74, 1,
  1854. 1, 1, 1, 1, 1, 1, 1, 1,
  1855. 1, 1, 1, 1, 1, 1, 1, 1,
  1856. 1, 73, 21, 22, 21, 21, 21, 21,
  1857. 21, 75, 1, 21, 21, 1, 21, 24,
  1858. 21, 21, 21, 21, 21, 21, 21, 21,
  1859. 21, 21, 21, 25, 1, 26, 21, 1,
  1860. 21, 24, 21, 21, 21, 21, 21, 21,
  1861. 21, 21, 21, 21, 21, 21, 21, 21,
  1862. 21, 21, 21, 21, 21, 21, 21, 21,
  1863. 21, 21, 21, 21, 1, 1, 1, 21,
  1864. 21, 21, 21, 21, 21, 21, 21, 21,
  1865. 21, 21, 21, 21, 21, 21, 21, 21,
  1866. 21, 21, 21, 21, 21, 21, 21, 21,
  1867. 21, 21, 21, 21, 21, 21, 21, 21,
  1868. 1, 1, 1, 1, 1, 1, 1, 1,
  1869. 1, 1, 1, 1, 1, 1, 1, 1,
  1870. 1, 1, 1, 1, 1, 1, 1, 1,
  1871. 1, 1, 1, 1, 1, 1, 1, 1,
  1872. 1, 1, 1, 1, 1, 1, 1, 1,
  1873. 1, 1, 1, 1, 1, 1, 1, 1,
  1874. 1, 1, 1, 1, 1, 1, 1, 1,
  1875. 1, 1, 1, 1, 1, 1, 1, 1,
  1876. 1, 1, 1, 27, 27, 27, 27, 27,
  1877. 27, 27, 27, 27, 27, 27, 27, 27,
  1878. 27, 27, 27, 27, 27, 27, 27, 27,
  1879. 27, 27, 27, 27, 27, 27, 27, 27,
  1880. 27, 28, 29, 29, 29, 29, 29, 29,
  1881. 29, 29, 29, 29, 29, 29, 30, 29,
  1882. 29, 31, 32, 32, 32, 33, 1, 76,
  1883. 1, 1, 1, 77, 1, 1, 1, 1,
  1884. 1, 1, 1, 1, 1, 1, 1, 1,
  1885. 1, 1, 1, 1, 1, 1, 76, 21,
  1886. 22, 21, 21, 21, 21, 21, 78, 1,
  1887. 21, 21, 1, 21, 1, 21, 21, 21,
  1888. 21, 21, 21, 21, 21, 21, 21, 21,
  1889. 1, 1, 8, 21, 1, 21, 1, 21,
  1890. 21, 21, 21, 21, 21, 21, 21, 21,
  1891. 21, 21, 21, 21, 21, 21, 21, 21,
  1892. 21, 21, 21, 21, 21, 21, 21, 21,
  1893. 21, 1, 1, 1, 21, 21, 21, 21,
  1894. 21, 21, 21, 21, 21, 21, 21, 21,
  1895. 21, 21, 21, 21, 21, 21, 21, 21,
  1896. 21, 21, 21, 21, 21, 21, 21, 21,
  1897. 21, 21, 21, 21, 21, 1, 1, 1,
  1898. 1, 1, 1, 1, 1, 1, 1, 1,
  1899. 1, 1, 1, 1, 1, 1, 1, 1,
  1900. 1, 1, 1, 1, 1, 1, 1, 1,
  1901. 1, 1, 1, 1, 1, 1, 1, 1,
  1902. 1, 1, 1, 1, 1, 1, 1, 1,
  1903. 1, 1, 1, 1, 1, 1, 1, 1,
  1904. 1, 1, 1, 1, 1, 1, 1, 1,
  1905. 1, 1, 1, 1, 1, 1, 1, 1,
  1906. 27, 27, 27, 27, 27, 27, 27, 27,
  1907. 27, 27, 27, 27, 27, 27, 27, 27,
  1908. 27, 27, 27, 27, 27, 27, 27, 27,
  1909. 27, 27, 27, 27, 27, 27, 28, 29,
  1910. 29, 29, 29, 29, 29, 29, 29, 29,
  1911. 29, 29, 29, 30, 29, 29, 31, 32,
  1912. 32, 32, 33, 1, 79, 1, 76, 1,
  1913. 1, 1, 1, 1, 1, 1, 1, 1,
  1914. 1, 1, 1, 1, 1, 1, 1, 1,
  1915. 1, 1, 1, 1, 1, 76, 1, 80,
  1916. 1, 1, 1, 81, 1, 1, 1, 1,
  1917. 1, 1, 1, 1, 1, 1, 1, 1,
  1918. 1, 1, 1, 1, 1, 1, 80, 60,
  1919. 61, 60, 60, 60, 60, 60, 82, 1,
  1920. 60, 60, 1, 60, 1, 60, 60, 60,
  1921. 60, 60, 60, 60, 60, 60, 60, 60,
  1922. 1, 1, 83, 60, 1, 60, 1, 60,
  1923. 60, 60, 60, 60, 60, 60, 60, 60,
  1924. 60, 60, 60, 60, 60, 60, 60, 60,
  1925. 60, 60, 60, 60, 60, 60, 60, 60,
  1926. 60, 1, 1, 1, 60, 60, 60, 60,
  1927. 60, 60, 60, 60, 60, 60, 60, 60,
  1928. 60, 60, 60, 60, 60, 60, 60, 60,
  1929. 60, 60, 60, 60, 60, 60, 60, 60,
  1930. 60, 60, 60, 60, 60, 1, 1, 1,
  1931. 1, 1, 1, 1, 1, 1, 1, 1,
  1932. 1, 1, 1, 1, 1, 1, 1, 1,
  1933. 1, 1, 1, 1, 1, 1, 1, 1,
  1934. 1, 1, 1, 1, 1, 1, 1, 1,
  1935. 1, 1, 1, 1, 1, 1, 1, 1,
  1936. 1, 1, 1, 1, 1, 1, 1, 1,
  1937. 1, 1, 1, 1, 1, 1, 1, 1,
  1938. 1, 1, 1, 1, 1, 1, 1, 1,
  1939. 66, 66, 66, 66, 66, 66, 66, 66,
  1940. 66, 66, 66, 66, 66, 66, 66, 66,
  1941. 66, 66, 66, 66, 66, 66, 66, 66,
  1942. 66, 66, 66, 66, 66, 66, 67, 68,
  1943. 68, 68, 68, 68, 68, 68, 68, 68,
  1944. 68, 68, 68, 69, 68, 68, 70, 71,
  1945. 71, 71, 72, 1, 84, 1, 1, 1,
  1946. 85, 1, 1, 1, 1, 1, 1, 1,
  1947. 1, 1, 1, 1, 1, 1, 1, 1,
  1948. 1, 1, 1, 84, 86, 87, 86, 86,
  1949. 86, 86, 86, 88, 1, 86, 86, 89,
  1950. 86, 90, 86, 86, 86, 86, 86, 86,
  1951. 86, 86, 86, 86, 86, 1, 1, 1,
  1952. 86, 1, 86, 91, 86, 86, 86, 86,
  1953. 86, 86, 86, 86, 86, 86, 86, 86,
  1954. 86, 86, 86, 86, 86, 86, 86, 86,
  1955. 86, 86, 86, 86, 86, 86, 1, 1,
  1956. 1, 86, 86, 86, 86, 86, 86, 86,
  1957. 86, 86, 86, 86, 86, 86, 86, 86,
  1958. 86, 86, 86, 86, 86, 86, 86, 86,
  1959. 86, 86, 86, 86, 86, 86, 86, 86,
  1960. 86, 86, 1, 1, 1, 1, 1, 1,
  1961. 1, 1, 1, 1, 1, 1, 1, 1,
  1962. 1, 1, 1, 1, 1, 1, 1, 1,
  1963. 1, 1, 1, 1, 1, 1, 1, 1,
  1964. 1, 1, 1, 1, 1, 1, 1, 1,
  1965. 1, 1, 1, 1, 1, 1, 1, 1,
  1966. 1, 1, 1, 1, 1, 1, 1, 1,
  1967. 1, 1, 1, 1, 1, 1, 1, 1,
  1968. 1, 1, 1, 1, 1, 92, 92, 92,
  1969. 92, 92, 92, 92, 92, 92, 92, 92,
  1970. 92, 92, 92, 92, 92, 92, 92, 92,
  1971. 92, 92, 92, 92, 92, 92, 92, 92,
  1972. 92, 92, 92, 93, 94, 94, 94, 94,
  1973. 94, 94, 94, 94, 94, 94, 94, 94,
  1974. 95, 94, 94, 96, 97, 97, 97, 98,
  1975. 1, 99, 1, 1, 1, 100, 1, 1,
  1976. 1, 1, 1, 1, 1, 1, 1, 1,
  1977. 1, 1, 1, 1, 1, 1, 1, 1,
  1978. 99, 86, 87, 86, 86, 86, 86, 86,
  1979. 101, 1, 86, 86, 102, 86, 90, 86,
  1980. 86, 86, 86, 86, 86, 86, 86, 86,
  1981. 86, 86, 1, 1, 1, 86, 1, 86,
  1982. 103, 86, 86, 86, 86, 86, 86, 86,
  1983. 86, 86, 86, 86, 86, 86, 86, 86,
  1984. 86, 86, 86, 86, 86, 86, 86, 86,
  1985. 86, 86, 86, 1, 1, 1, 86, 86,
  1986. 86, 86, 86, 86, 86, 86, 86, 86,
  1987. 86, 86, 86, 86, 86, 86, 86, 86,
  1988. 86, 86, 86, 86, 86, 86, 86, 86,
  1989. 86, 86, 86, 86, 86, 86, 86, 1,
  1990. 1, 1, 1, 1, 1, 1, 1, 1,
  1991. 1, 1, 1, 1, 1, 1, 1, 1,
  1992. 1, 1, 1, 1, 1, 1, 1, 1,
  1993. 1, 1, 1, 1, 1, 1, 1, 1,
  1994. 1, 1, 1, 1, 1, 1, 1, 1,
  1995. 1, 1, 1, 1, 1, 1, 1, 1,
  1996. 1, 1, 1, 1, 1, 1, 1, 1,
  1997. 1, 1, 1, 1, 1, 1, 1, 1,
  1998. 1, 1, 92, 92, 92, 92, 92, 92,
  1999. 92, 92, 92, 92, 92, 92, 92, 92,
  2000. 92, 92, 92, 92, 92, 92, 92, 92,
  2001. 92, 92, 92, 92, 92, 92, 92, 92,
  2002. 93, 94, 94, 94, 94, 94, 94, 94,
  2003. 94, 94, 94, 94, 94, 95, 94, 94,
  2004. 96, 97, 97, 97, 98, 1, 104, 1,
  2005. 99, 1, 1, 1, 1, 1, 1, 1,
  2006. 1, 1, 1, 1, 1, 1, 1, 1,
  2007. 1, 1, 1, 1, 1, 1, 1, 99,
  2008. 1, 105, 1, 1, 1, 106, 1, 1,
  2009. 1, 1, 1, 1, 1, 1, 1, 1,
  2010. 1, 1, 1, 1, 1, 1, 1, 1,
  2011. 105, 107, 108, 107, 107, 107, 107, 107,
  2012. 109, 1, 107, 107, 1, 107, 110, 107,
  2013. 107, 107, 107, 107, 107, 107, 107, 107,
  2014. 107, 107, 1, 1, 1, 107, 111, 107,
  2015. 112, 107, 107, 107, 107, 107, 107, 107,
  2016. 107, 107, 107, 107, 107, 107, 107, 107,
  2017. 107, 107, 107, 107, 107, 107, 107, 107,
  2018. 107, 107, 107, 1, 1, 1, 107, 107,
  2019. 107, 107, 107, 107, 107, 107, 107, 107,
  2020. 107, 107, 107, 107, 107, 107, 107, 107,
  2021. 107, 107, 107, 107, 107, 107, 107, 107,
  2022. 107, 107, 107, 107, 107, 107, 107, 1,
  2023. 1, 1, 1, 1, 1, 1, 1, 1,
  2024. 1, 1, 1, 1, 1, 1, 1, 1,
  2025. 1, 1, 1, 1, 1, 1, 1, 1,
  2026. 1, 1, 1, 1, 1, 1, 1, 1,
  2027. 1, 1, 1, 1, 1, 1, 1, 1,
  2028. 1, 1, 1, 1, 1, 1, 1, 1,
  2029. 1, 1, 1, 1, 1, 1, 1, 1,
  2030. 1, 1, 1, 1, 1, 1, 1, 1,
  2031. 1, 1, 113, 113, 113, 113, 113, 113,
  2032. 113, 113, 113, 113, 113, 113, 113, 113,
  2033. 113, 113, 113, 113, 113, 113, 113, 113,
  2034. 113, 113, 113, 113, 113, 113, 113, 113,
  2035. 114, 115, 115, 115, 115, 115, 115, 115,
  2036. 115, 115, 115, 115, 115, 116, 115, 115,
  2037. 117, 118, 118, 118, 119, 1, 120, 1,
  2038. 1, 1, 121, 1, 1, 1, 1, 1,
  2039. 1, 1, 1, 1, 1, 1, 1, 1,
  2040. 1, 1, 1, 1, 1, 120, 1, 1,
  2041. 1, 1, 1, 1, 1, 122, 1, 1,
  2042. 1, 1, 1, 123, 1, 1, 1, 1,
  2043. 1, 1, 1, 1, 1, 1, 1, 1,
  2044. 1, 1, 1, 124, 1, 125, 1, 126,
  2045. 1, 120, 1, 1, 1, 1, 1, 1,
  2046. 1, 1, 1, 1, 1, 1, 1, 1,
  2047. 1, 1, 1, 1, 1, 1, 1, 1,
  2048. 120, 1, 127, 1, 1, 1, 128, 1,
  2049. 1, 1, 1, 1, 1, 1, 1, 1,
  2050. 1, 1, 1, 1, 1, 1, 1, 1,
  2051. 1, 127, 1, 1, 1, 1, 1, 1,
  2052. 1, 129, 1, 1, 1, 1, 1, 130,
  2053. 1, 1, 1, 1, 1, 1, 1, 1,
  2054. 1, 1, 1, 1, 1, 1, 1, 131,
  2055. 1, 132, 1, 123, 1, 1, 1, 133,
  2056. 1, 1, 1, 1, 1, 1, 1, 1,
  2057. 1, 1, 1, 1, 1, 1, 1, 1,
  2058. 1, 1, 123, 134, 135, 134, 134, 134,
  2059. 134, 134, 136, 1, 134, 134, 1, 134,
  2060. 1, 134, 134, 134, 134, 134, 134, 134,
  2061. 134, 134, 134, 134, 1, 1, 1, 134,
  2062. 1, 134, 1, 134, 134, 134, 134, 134,
  2063. 134, 134, 134, 134, 134, 134, 134, 134,
  2064. 134, 134, 134, 134, 134, 134, 134, 134,
  2065. 134, 134, 134, 134, 134, 1, 1, 1,
  2066. 134, 134, 134, 134, 134, 134, 134, 134,
  2067. 134, 134, 134, 134, 134, 134, 134, 134,
  2068. 134, 134, 134, 134, 134, 134, 134, 134,
  2069. 134, 134, 134, 134, 134, 134, 134, 134,
  2070. 134, 1, 1, 1, 1, 1, 1, 1,
  2071. 1, 1, 1, 1, 1, 1, 1, 1,
  2072. 1, 1, 1, 1, 1, 1, 1, 1,
  2073. 1, 1, 1, 1, 1, 1, 1, 1,
  2074. 1, 1, 1, 1, 1, 1, 1, 1,
  2075. 1, 1, 1, 1, 1, 1, 1, 1,
  2076. 1, 1, 1, 1, 1, 1, 1, 1,
  2077. 1, 1, 1, 1, 1, 1, 1, 1,
  2078. 1, 1, 1, 1, 137, 137, 137, 137,
  2079. 137, 137, 137, 137, 137, 137, 137, 137,
  2080. 137, 137, 137, 137, 137, 137, 137, 137,
  2081. 137, 137, 137, 137, 137, 137, 137, 137,
  2082. 137, 137, 138, 139, 139, 139, 139, 139,
  2083. 139, 139, 139, 139, 139, 139, 139, 140,
  2084. 139, 139, 141, 142, 142, 142, 143, 1,
  2085. 144, 1, 123, 1, 1, 1, 1, 1,
  2086. 1, 1, 1, 1, 1, 1, 1, 1,
  2087. 1, 1, 1, 1, 1, 1, 1, 1,
  2088. 1, 123, 1, 145, 1, 1, 1, 146,
  2089. 1, 1, 1, 1, 1, 1, 1, 1,
  2090. 1, 1, 1, 1, 1, 1, 1, 1,
  2091. 1, 1, 145, 134, 1, 134, 134, 134,
  2092. 134, 134, 147, 1, 134, 134, 1, 134,
  2093. 123, 134, 134, 134, 134, 134, 134, 134,
  2094. 134, 134, 134, 134, 1, 1, 1, 134,
  2095. 124, 134, 148, 134, 134, 134, 134, 134,
  2096. 134, 134, 134, 134, 134, 134, 134, 134,
  2097. 134, 134, 134, 134, 134, 134, 134, 134,
  2098. 134, 134, 134, 134, 134, 1, 1, 1,
  2099. 134, 134, 134, 134, 134, 134, 134, 134,
  2100. 134, 134, 134, 134, 134, 134, 134, 134,
  2101. 134, 134, 134, 134, 134, 134, 134, 134,
  2102. 134, 134, 134, 134, 134, 134, 134, 134,
  2103. 134, 1, 1, 1, 1, 1, 1, 1,
  2104. 1, 1, 1, 1, 1, 1, 1, 1,
  2105. 1, 1, 1, 1, 1, 1, 1, 1,
  2106. 1, 1, 1, 1, 1, 1, 1, 1,
  2107. 1, 1, 1, 1, 1, 1, 1, 1,
  2108. 1, 1, 1, 1, 1, 1, 1, 1,
  2109. 1, 1, 1, 1, 1, 1, 1, 1,
  2110. 1, 1, 1, 1, 1, 1, 1, 1,
  2111. 1, 1, 1, 1, 137, 137, 137, 137,
  2112. 137, 137, 137, 137, 137, 137, 137, 137,
  2113. 137, 137, 137, 137, 137, 137, 137, 137,
  2114. 137, 137, 137, 137, 137, 137, 137, 137,
  2115. 137, 137, 138, 139, 139, 139, 139, 139,
  2116. 139, 139, 139, 139, 139, 139, 139, 140,
  2117. 139, 139, 141, 142, 142, 142, 143, 1,
  2118. 145, 1, 1, 1, 146, 1, 1, 1,
  2119. 1, 1, 1, 1, 1, 1, 1, 1,
  2120. 1, 1, 1, 1, 1, 1, 1, 145,
  2121. 1, 1, 1, 1, 1, 1, 1, 147,
  2122. 1, 1, 1, 1, 1, 123, 1, 1,
  2123. 1, 1, 1, 1, 1, 1, 1, 1,
  2124. 1, 1, 1, 1, 1, 124, 1, 148,
  2125. 1, 149, 1, 145, 1, 1, 1, 1,
  2126. 1, 1, 1, 1, 1, 1, 1, 1,
  2127. 1, 1, 1, 1, 1, 1, 1, 1,
  2128. 1, 1, 145, 1, 150, 1, 1, 1,
  2129. 151, 1, 1, 1, 1, 1, 1, 1,
  2130. 1, 1, 1, 1, 1, 1, 1, 1,
  2131. 1, 1, 1, 150, 1, 1, 1, 1,
  2132. 1, 1, 1, 152, 1, 1, 1, 1,
  2133. 1, 130, 1, 1, 1, 1, 1, 1,
  2134. 1, 1, 1, 1, 1, 1, 1, 1,
  2135. 1, 131, 1, 153, 1, 154, 1, 124,
  2136. 1, 1, 1, 1, 1, 1, 1, 1,
  2137. 1, 1, 1, 1, 1, 1, 1, 1,
  2138. 1, 1, 1, 1, 1, 1, 124, 1,
  2139. 155, 1, 6, 1, 1, 1, 1, 1,
  2140. 1, 1, 1, 1, 1, 1, 1, 1,
  2141. 1, 1, 1, 1, 1, 1, 1, 1,
  2142. 1, 6, 1, 156, 1, 157, 1, 1,
  2143. 1, 1, 1, 1, 1, 1, 1, 1,
  2144. 1, 1, 1, 1, 1, 1, 1, 1,
  2145. 1, 1, 1, 1, 157, 1, 158, 1,
  2146. 1, 1, 159, 1, 1, 1, 1, 1,
  2147. 1, 1, 1, 1, 1, 1, 1, 1,
  2148. 1, 1, 1, 1, 1, 158, 160, 161,
  2149. 160, 160, 160, 160, 160, 162, 1, 160,
  2150. 160, 1, 160, 24, 160, 160, 160, 160,
  2151. 160, 160, 160, 160, 160, 160, 160, 25,
  2152. 1, 26, 160, 1, 160, 24, 160, 160,
  2153. 160, 160, 160, 160, 160, 160, 160, 160,
  2154. 160, 160, 160, 160, 160, 160, 160, 160,
  2155. 160, 160, 160, 160, 160, 160, 160, 160,
  2156. 1, 1, 1, 160, 160, 160, 160, 160,
  2157. 160, 160, 160, 160, 160, 160, 160, 160,
  2158. 160, 160, 160, 160, 160, 160, 160, 160,
  2159. 160, 160, 160, 160, 160, 160, 160, 160,
  2160. 160, 160, 160, 160, 1, 1, 1, 1,
  2161. 1, 1, 1, 1, 1, 1, 1, 1,
  2162. 1, 1, 1, 1, 1, 1, 1, 1,
  2163. 1, 1, 1, 1, 1, 1, 1, 1,
  2164. 1, 1, 1, 1, 1, 1, 1, 1,
  2165. 1, 1, 1, 1, 1, 1, 1, 1,
  2166. 1, 1, 1, 1, 1, 1, 1, 1,
  2167. 1, 1, 1, 1, 1, 1, 1, 1,
  2168. 1, 1, 1, 1, 1, 1, 1, 163,
  2169. 163, 163, 163, 163, 163, 163, 163, 163,
  2170. 163, 163, 163, 163, 163, 163, 163, 163,
  2171. 163, 163, 163, 163, 163, 163, 163, 163,
  2172. 163, 163, 163, 163, 163, 164, 165, 165,
  2173. 165, 165, 165, 165, 165, 165, 165, 165,
  2174. 165, 165, 166, 165, 165, 167, 168, 168,
  2175. 168, 169, 1, 170, 1, 1, 1, 171,
  2176. 1, 1, 1, 1, 1, 1, 1, 1,
  2177. 1, 1, 1, 1, 1, 1, 1, 1,
  2178. 1, 1, 170, 160, 161, 160, 160, 160,
  2179. 160, 160, 172, 1, 160, 160, 1, 160,
  2180. 1, 160, 160, 160, 160, 160, 160, 160,
  2181. 160, 160, 160, 160, 1, 1, 8, 160,
  2182. 1, 160, 1, 160, 160, 160, 160, 160,
  2183. 160, 160, 160, 160, 160, 160, 160, 160,
  2184. 160, 160, 160, 160, 160, 160, 160, 160,
  2185. 160, 160, 160, 160, 160, 1, 1, 1,
  2186. 160, 160, 160, 160, 160, 160, 160, 160,
  2187. 160, 160, 160, 160, 160, 160, 160, 160,
  2188. 160, 160, 160, 160, 160, 160, 160, 160,
  2189. 160, 160, 160, 160, 160, 160, 160, 160,
  2190. 160, 1, 1, 1, 1, 1, 1, 1,
  2191. 1, 1, 1, 1, 1, 1, 1, 1,
  2192. 1, 1, 1, 1, 1, 1, 1, 1,
  2193. 1, 1, 1, 1, 1, 1, 1, 1,
  2194. 1, 1, 1, 1, 1, 1, 1, 1,
  2195. 1, 1, 1, 1, 1, 1, 1, 1,
  2196. 1, 1, 1, 1, 1, 1, 1, 1,
  2197. 1, 1, 1, 1, 1, 1, 1, 1,
  2198. 1, 1, 1, 1, 163, 163, 163, 163,
  2199. 163, 163, 163, 163, 163, 163, 163, 163,
  2200. 163, 163, 163, 163, 163, 163, 163, 163,
  2201. 163, 163, 163, 163, 163, 163, 163, 163,
  2202. 163, 163, 164, 165, 165, 165, 165, 165,
  2203. 165, 165, 165, 165, 165, 165, 165, 166,
  2204. 165, 165, 167, 168, 168, 168, 169, 1,
  2205. 173, 1, 170, 1, 1, 1, 1, 1,
  2206. 1, 1, 1, 1, 1, 1, 1, 1,
  2207. 1, 1, 1, 1, 1, 1, 1, 1,
  2208. 1, 170, 1, 174, 1, 175, 1, 1,
  2209. 1, 1, 1, 1, 1, 1, 1, 1,
  2210. 1, 1, 1, 1, 1, 1, 1, 1,
  2211. 1, 1, 1, 1, 175, 1, 176, 1,
  2212. 1, 1, 177, 1, 1, 1, 1, 1,
  2213. 1, 1, 1, 1, 1, 1, 1, 1,
  2214. 1, 1, 1, 1, 1, 176, 178, 179,
  2215. 178, 178, 178, 178, 178, 180, 1, 178,
  2216. 178, 181, 178, 182, 178, 178, 178, 178,
  2217. 178, 178, 178, 178, 178, 178, 178, 1,
  2218. 183, 184, 178, 1, 178, 185, 178, 178,
  2219. 178, 178, 178, 178, 178, 178, 178, 178,
  2220. 178, 178, 178, 178, 178, 178, 178, 178,
  2221. 178, 178, 178, 178, 178, 178, 178, 178,
  2222. 1, 1, 1, 178, 178, 178, 178, 178,
  2223. 178, 178, 178, 178, 178, 178, 178, 178,
  2224. 178, 178, 178, 178, 178, 178, 178, 178,
  2225. 178, 178, 178, 178, 178, 178, 178, 178,
  2226. 178, 178, 178, 178, 1, 1, 1, 1,
  2227. 1, 1, 1, 1, 1, 1, 1, 1,
  2228. 1, 1, 1, 1, 1, 1, 1, 1,
  2229. 1, 1, 1, 1, 1, 1, 1, 1,
  2230. 1, 1, 1, 1, 1, 1, 1, 1,
  2231. 1, 1, 1, 1, 1, 1, 1, 1,
  2232. 1, 1, 1, 1, 1, 1, 1, 1,
  2233. 1, 1, 1, 1, 1, 1, 1, 1,
  2234. 1, 1, 1, 1, 1, 1, 1, 186,
  2235. 186, 186, 186, 186, 186, 186, 186, 186,
  2236. 186, 186, 186, 186, 186, 186, 186, 186,
  2237. 186, 186, 186, 186, 186, 186, 186, 186,
  2238. 186, 186, 186, 186, 186, 187, 188, 188,
  2239. 188, 188, 188, 188, 188, 188, 188, 188,
  2240. 188, 188, 189, 188, 188, 190, 191, 191,
  2241. 191, 192, 1, 193, 1, 1, 1, 194,
  2242. 1, 1, 1, 1, 1, 1, 1, 1,
  2243. 1, 1, 1, 1, 1, 1, 1, 1,
  2244. 1, 1, 193, 195, 196, 195, 195, 195,
  2245. 195, 195, 197, 1, 195, 195, 181, 195,
  2246. 198, 195, 195, 195, 195, 195, 195, 195,
  2247. 195, 195, 195, 195, 1, 183, 199, 195,
  2248. 1, 195, 1, 195, 195, 195, 195, 195,
  2249. 195, 195, 195, 195, 195, 195, 195, 195,
  2250. 195, 195, 195, 195, 195, 195, 195, 195,
  2251. 195, 195, 195, 195, 195, 1, 1, 1,
  2252. 195, 195, 195, 195, 195, 195, 195, 195,
  2253. 195, 195, 195, 195, 195, 195, 195, 195,
  2254. 195, 195, 195, 195, 195, 195, 195, 195,
  2255. 195, 195, 195, 195, 195, 195, 195, 195,
  2256. 195, 1, 1, 1, 1, 1, 1, 1,
  2257. 1, 1, 1, 1, 1, 1, 1, 1,
  2258. 1, 1, 1, 1, 1, 1, 1, 1,
  2259. 1, 1, 1, 1, 1, 1, 1, 1,
  2260. 1, 1, 1, 1, 1, 1, 1, 1,
  2261. 1, 1, 1, 1, 1, 1, 1, 1,
  2262. 1, 1, 1, 1, 1, 1, 1, 1,
  2263. 1, 1, 1, 1, 1, 1, 1, 1,
  2264. 1, 1, 1, 1, 200, 200, 200, 200,
  2265. 200, 200, 200, 200, 200, 200, 200, 200,
  2266. 200, 200, 200, 200, 200, 200, 200, 200,
  2267. 200, 200, 200, 200, 200, 200, 200, 200,
  2268. 200, 200, 201, 202, 202, 202, 202, 202,
  2269. 202, 202, 202, 202, 202, 202, 202, 203,
  2270. 202, 202, 204, 205, 205, 205, 206, 1,
  2271. 207, 1, 193, 1, 1, 1, 1, 1,
  2272. 1, 1, 1, 1, 1, 1, 1, 1,
  2273. 1, 1, 1, 1, 1, 1, 1, 1,
  2274. 1, 193, 1, 208, 1, 1, 1, 209,
  2275. 1, 1, 1, 1, 1, 1, 1, 1,
  2276. 1, 1, 1, 1, 1, 1, 1, 1,
  2277. 1, 1, 208, 210, 211, 210, 210, 210,
  2278. 210, 210, 212, 1, 210, 210, 213, 210,
  2279. 214, 210, 210, 210, 210, 210, 210, 210,
  2280. 210, 210, 210, 210, 1, 215, 216, 210,
  2281. 1, 210, 217, 210, 210, 210, 210, 210,
  2282. 210, 210, 210, 210, 210, 210, 210, 210,
  2283. 210, 210, 210, 210, 210, 210, 210, 210,
  2284. 210, 210, 210, 210, 210, 1, 1, 1,
  2285. 210, 210, 210, 210, 210, 210, 210, 210,
  2286. 210, 210, 210, 210, 210, 210, 210, 210,
  2287. 210, 210, 210, 210, 210, 210, 210, 210,
  2288. 210, 210, 210, 210, 210, 210, 210, 210,
  2289. 210, 1, 1, 1, 1, 1, 1, 1,
  2290. 1, 1, 1, 1, 1, 1, 1, 1,
  2291. 1, 1, 1, 1, 1, 1, 1, 1,
  2292. 1, 1, 1, 1, 1, 1, 1, 1,
  2293. 1, 1, 1, 1, 1, 1, 1, 1,
  2294. 1, 1, 1, 1, 1, 1, 1, 1,
  2295. 1, 1, 1, 1, 1, 1, 1, 1,
  2296. 1, 1, 1, 1, 1, 1, 1, 1,
  2297. 1, 1, 1, 1, 218, 218, 218, 218,
  2298. 218, 218, 218, 218, 218, 218, 218, 218,
  2299. 218, 218, 218, 218, 218, 218, 218, 218,
  2300. 218, 218, 218, 218, 218, 218, 218, 218,
  2301. 218, 218, 219, 220, 220, 220, 220, 220,
  2302. 220, 220, 220, 220, 220, 220, 220, 221,
  2303. 220, 220, 222, 223, 223, 223, 224, 1,
  2304. 225, 1, 1, 1, 226, 1, 1, 1,
  2305. 1, 1, 1, 1, 1, 1, 1, 1,
  2306. 1, 1, 1, 1, 1, 1, 1, 225,
  2307. 227, 228, 227, 227, 227, 227, 227, 229,
  2308. 1, 227, 227, 230, 227, 231, 227, 227,
  2309. 227, 227, 227, 227, 227, 227, 227, 227,
  2310. 227, 1, 232, 216, 227, 1, 227, 233,
  2311. 227, 227, 227, 227, 227, 227, 227, 227,
  2312. 227, 227, 227, 227, 227, 227, 227, 227,
  2313. 227, 227, 227, 227, 227, 227, 227, 227,
  2314. 227, 227, 1, 1, 1, 227, 227, 227,
  2315. 227, 227, 227, 227, 227, 227, 227, 227,
  2316. 227, 227, 227, 227, 227, 227, 227, 227,
  2317. 227, 227, 227, 227, 227, 227, 227, 227,
  2318. 227, 227, 227, 227, 227, 227, 1, 1,
  2319. 1, 1, 1, 1, 1, 1, 1, 1,
  2320. 1, 1, 1, 1, 1, 1, 1, 1,
  2321. 1, 1, 1, 1, 1, 1, 1, 1,
  2322. 1, 1, 1, 1, 1, 1, 1, 1,
  2323. 1, 1, 1, 1, 1, 1, 1, 1,
  2324. 1, 1, 1, 1, 1, 1, 1, 1,
  2325. 1, 1, 1, 1, 1, 1, 1, 1,
  2326. 1, 1, 1, 1, 1, 1, 1, 1,
  2327. 1, 234, 234, 234, 234, 234, 234, 234,
  2328. 234, 234, 234, 234, 234, 234, 234, 234,
  2329. 234, 234, 234, 234, 234, 234, 234, 234,
  2330. 234, 234, 234, 234, 234, 234, 234, 235,
  2331. 236, 236, 236, 236, 236, 236, 236, 236,
  2332. 236, 236, 236, 236, 237, 236, 236, 238,
  2333. 239, 239, 239, 240, 1, 241, 1, 242,
  2334. 1, 1, 1, 1, 1, 1, 1, 1,
  2335. 1, 1, 1, 1, 1, 1, 1, 1,
  2336. 1, 1, 1, 1, 1, 1, 242, 1,
  2337. 243, 1, 1, 1, 244, 1, 1, 1,
  2338. 1, 1, 1, 1, 1, 1, 1, 1,
  2339. 1, 1, 1, 1, 1, 1, 1, 243,
  2340. 227, 228, 227, 227, 227, 227, 227, 245,
  2341. 1, 227, 227, 1, 227, 246, 227, 227,
  2342. 227, 227, 227, 227, 227, 227, 227, 227,
  2343. 227, 1, 1, 216, 227, 1, 227, 246,
  2344. 227, 227, 227, 227, 227, 227, 227, 227,
  2345. 227, 227, 227, 227, 227, 227, 227, 227,
  2346. 227, 227, 227, 227, 227, 227, 227, 227,
  2347. 227, 227, 1, 1, 1, 227, 227, 227,
  2348. 227, 227, 227, 227, 227, 227, 227, 227,
  2349. 227, 227, 227, 227, 227, 227, 227, 227,
  2350. 227, 227, 227, 227, 227, 227, 227, 227,
  2351. 227, 227, 227, 227, 227, 227, 1, 1,
  2352. 1, 1, 1, 1, 1, 1, 1, 1,
  2353. 1, 1, 1, 1, 1, 1, 1, 1,
  2354. 1, 1, 1, 1, 1, 1, 1, 1,
  2355. 1, 1, 1, 1, 1, 1, 1, 1,
  2356. 1, 1, 1, 1, 1, 1, 1, 1,
  2357. 1, 1, 1, 1, 1, 1, 1, 1,
  2358. 1, 1, 1, 1, 1, 1, 1, 1,
  2359. 1, 1, 1, 1, 1, 1, 1, 1,
  2360. 1, 234, 234, 234, 234, 234, 234, 234,
  2361. 234, 234, 234, 234, 234, 234, 234, 234,
  2362. 234, 234, 234, 234, 234, 234, 234, 234,
  2363. 234, 234, 234, 234, 234, 234, 234, 235,
  2364. 236, 236, 236, 236, 236, 236, 236, 236,
  2365. 236, 236, 236, 236, 237, 236, 236, 238,
  2366. 239, 239, 239, 240, 1, 247, 1, 227,
  2367. 1, 1, 1, 1, 1, 1, 1, 1,
  2368. 1, 1, 1, 1, 1, 1, 1, 1,
  2369. 1, 1, 1, 1, 1, 1, 227, 1,
  2370. 248, 248, 248, 248, 248, 248, 248, 248,
  2371. 248, 1, 248, 248, 249, 248, 248, 248,
  2372. 248, 248, 248, 248, 248, 248, 248, 248,
  2373. 248, 248, 248, 248, 248, 248, 248, 248,
  2374. 248, 250, 248, 248, 248, 248, 248, 248,
  2375. 248, 248, 248, 248, 248, 248, 248, 248,
  2376. 248, 248, 248, 248, 248, 248, 248, 248,
  2377. 248, 248, 248, 248, 248, 248, 248, 248,
  2378. 248, 248, 248, 248, 248, 248, 248, 248,
  2379. 248, 248, 248, 248, 248, 248, 248, 248,
  2380. 248, 248, 248, 248, 248, 248, 248, 248,
  2381. 248, 248, 248, 251, 248, 248, 248, 248,
  2382. 248, 248, 248, 248, 248, 248, 248, 248,
  2383. 248, 248, 248, 248, 248, 248, 248, 248,
  2384. 248, 248, 248, 248, 248, 248, 248, 248,
  2385. 248, 248, 248, 248, 248, 248, 248, 1,
  2386. 1, 1, 1, 1, 1, 1, 1, 1,
  2387. 1, 1, 1, 1, 1, 1, 1, 1,
  2388. 1, 1, 1, 1, 1, 1, 1, 1,
  2389. 1, 1, 1, 1, 1, 1, 1, 1,
  2390. 1, 1, 1, 1, 1, 1, 1, 1,
  2391. 1, 1, 1, 1, 1, 1, 1, 1,
  2392. 1, 1, 1, 1, 1, 1, 1, 1,
  2393. 1, 1, 1, 1, 1, 1, 1, 1,
  2394. 1, 252, 252, 252, 252, 252, 252, 252,
  2395. 252, 252, 252, 252, 252, 252, 252, 252,
  2396. 252, 252, 252, 252, 252, 252, 252, 252,
  2397. 252, 252, 252, 252, 252, 252, 252, 253,
  2398. 254, 254, 254, 254, 254, 254, 254, 254,
  2399. 254, 254, 254, 254, 255, 254, 254, 256,
  2400. 257, 257, 257, 258, 1, 259, 259, 259,
  2401. 259, 259, 259, 259, 259, 259, 1, 259,
  2402. 259, 260, 259, 259, 259, 259, 259, 259,
  2403. 259, 259, 259, 259, 259, 259, 259, 259,
  2404. 259, 259, 259, 259, 259, 259, 261, 259,
  2405. 259, 259, 259, 259, 259, 259, 259, 259,
  2406. 259, 259, 259, 259, 259, 259, 259, 259,
  2407. 259, 259, 259, 259, 259, 259, 259, 259,
  2408. 259, 259, 259, 259, 259, 259, 259, 259,
  2409. 259, 259, 259, 259, 259, 259, 259, 259,
  2410. 259, 259, 259, 259, 259, 259, 259, 259,
  2411. 259, 259, 259, 259, 259, 259, 259, 259,
  2412. 262, 259, 259, 259, 259, 259, 259, 259,
  2413. 259, 259, 259, 259, 259, 259, 259, 259,
  2414. 259, 259, 259, 259, 259, 259, 259, 259,
  2415. 259, 259, 259, 259, 259, 259, 259, 259,
  2416. 259, 259, 259, 259, 1, 1, 1, 1,
  2417. 1, 1, 1, 1, 1, 1, 1, 1,
  2418. 1, 1, 1, 1, 1, 1, 1, 1,
  2419. 1, 1, 1, 1, 1, 1, 1, 1,
  2420. 1, 1, 1, 1, 1, 1, 1, 1,
  2421. 1, 1, 1, 1, 1, 1, 1, 1,
  2422. 1, 1, 1, 1, 1, 1, 1, 1,
  2423. 1, 1, 1, 1, 1, 1, 1, 1,
  2424. 1, 1, 1, 1, 1, 1, 263, 263,
  2425. 263, 263, 263, 263, 263, 263, 263, 263,
  2426. 263, 263, 263, 263, 263, 263, 263, 263,
  2427. 263, 263, 263, 263, 263, 263, 263, 263,
  2428. 263, 263, 263, 263, 264, 265, 265, 265,
  2429. 265, 265, 265, 265, 265, 265, 265, 265,
  2430. 265, 266, 265, 265, 267, 268, 268, 268,
  2431. 269, 1, 270, 1, 259, 1, 1, 1,
  2432. 1, 1, 1, 1, 1, 1, 1, 1,
  2433. 1, 1, 1, 1, 1, 1, 1, 1,
  2434. 1, 1, 1, 259, 1, 259, 259, 259,
  2435. 259, 259, 259, 259, 259, 259, 259, 259,
  2436. 259, 259, 259, 259, 259, 259, 259, 259,
  2437. 259, 259, 259, 259, 259, 259, 259, 259,
  2438. 259, 259, 259, 259, 259, 259, 259, 259,
  2439. 259, 259, 259, 259, 259, 259, 259, 259,
  2440. 259, 259, 259, 259, 259, 259, 259, 259,
  2441. 259, 259, 259, 259, 259, 259, 259, 259,
  2442. 259, 259, 259, 259, 259, 259, 259, 259,
  2443. 259, 259, 259, 259, 259, 259, 259, 259,
  2444. 259, 259, 259, 259, 259, 259, 259, 259,
  2445. 259, 259, 259, 259, 259, 259, 259, 259,
  2446. 259, 259, 259, 259, 259, 259, 259, 259,
  2447. 259, 259, 259, 259, 259, 259, 259, 259,
  2448. 259, 259, 259, 259, 259, 259, 259, 259,
  2449. 259, 259, 259, 259, 259, 259, 259, 259,
  2450. 259, 259, 259, 259, 259, 1, 1, 1,
  2451. 1, 1, 1, 1, 1, 1, 1, 1,
  2452. 1, 1, 1, 1, 1, 1, 1, 1,
  2453. 1, 1, 1, 1, 1, 1, 1, 1,
  2454. 1, 1, 1, 1, 1, 1, 1, 1,
  2455. 1, 1, 1, 1, 1, 1, 1, 1,
  2456. 1, 1, 1, 1, 1, 1, 1, 1,
  2457. 1, 1, 1, 1, 1, 1, 1, 1,
  2458. 1, 1, 1, 1, 1, 1, 1, 263,
  2459. 263, 263, 263, 263, 263, 263, 263, 263,
  2460. 263, 263, 263, 263, 263, 263, 263, 263,
  2461. 263, 263, 263, 263, 263, 263, 263, 263,
  2462. 263, 263, 263, 263, 263, 264, 265, 265,
  2463. 265, 265, 265, 265, 265, 265, 265, 265,
  2464. 265, 265, 266, 265, 265, 267, 268, 268,
  2465. 268, 269, 1, 259, 259, 259, 259, 259,
  2466. 259, 259, 259, 259, 259, 259, 259, 259,
  2467. 259, 259, 259, 259, 259, 259, 259, 259,
  2468. 259, 259, 259, 259, 259, 259, 259, 259,
  2469. 259, 259, 259, 259, 259, 259, 259, 259,
  2470. 259, 259, 259, 259, 259, 259, 259, 259,
  2471. 259, 259, 259, 259, 259, 259, 259, 259,
  2472. 259, 259, 259, 259, 259, 259, 259, 259,
  2473. 259, 259, 259, 1, 263, 263, 263, 263,
  2474. 263, 263, 263, 263, 263, 263, 263, 263,
  2475. 263, 263, 263, 263, 263, 263, 263, 263,
  2476. 263, 263, 263, 263, 263, 263, 263, 263,
  2477. 263, 263, 263, 263, 1, 263, 263, 263,
  2478. 263, 263, 263, 263, 263, 263, 263, 263,
  2479. 263, 263, 263, 263, 263, 263, 263, 263,
  2480. 263, 263, 263, 263, 263, 263, 263, 263,
  2481. 263, 263, 263, 263, 263, 263, 263, 263,
  2482. 263, 263, 263, 263, 263, 263, 263, 263,
  2483. 263, 263, 263, 263, 263, 263, 263, 263,
  2484. 263, 263, 263, 263, 263, 263, 263, 263,
  2485. 263, 263, 263, 263, 263, 1, 263, 263,
  2486. 263, 263, 263, 263, 263, 263, 263, 263,
  2487. 263, 263, 263, 263, 263, 263, 263, 263,
  2488. 263, 263, 263, 263, 263, 263, 263, 263,
  2489. 263, 263, 263, 263, 263, 263, 1, 265,
  2490. 265, 265, 265, 265, 265, 265, 265, 265,
  2491. 265, 265, 265, 265, 265, 265, 265, 265,
  2492. 265, 265, 265, 265, 265, 265, 265, 265,
  2493. 265, 265, 265, 265, 265, 265, 265, 265,
  2494. 265, 265, 265, 265, 265, 265, 265, 265,
  2495. 265, 265, 265, 265, 265, 265, 265, 1,
  2496. 265, 265, 265, 265, 265, 265, 265, 265,
  2497. 265, 265, 265, 265, 265, 265, 265, 265,
  2498. 265, 265, 265, 265, 265, 265, 265, 265,
  2499. 265, 265, 265, 265, 265, 265, 265, 265,
  2500. 265, 265, 265, 265, 265, 265, 265, 265,
  2501. 265, 265, 265, 265, 265, 265, 265, 265,
  2502. 265, 265, 265, 265, 265, 265, 265, 265,
  2503. 265, 265, 265, 265, 265, 265, 265, 265,
  2504. 1, 265, 265, 265, 265, 265, 265, 265,
  2505. 265, 265, 265, 265, 265, 265, 265, 265,
  2506. 265, 1, 271, 1, 1, 1, 272, 1,
  2507. 1, 1, 1, 1, 1, 1, 1, 1,
  2508. 1, 1, 1, 1, 1, 1, 1, 1,
  2509. 1, 271, 273, 274, 273, 273, 273, 273,
  2510. 273, 275, 1, 273, 273, 1, 273, 276,
  2511. 273, 273, 273, 273, 273, 273, 273, 273,
  2512. 273, 273, 273, 1, 1, 277, 273, 1,
  2513. 273, 276, 273, 273, 273, 273, 273, 273,
  2514. 273, 273, 273, 273, 273, 273, 273, 273,
  2515. 273, 273, 273, 273, 273, 273, 273, 273,
  2516. 273, 273, 273, 273, 1, 1, 1, 273,
  2517. 273, 273, 273, 273, 273, 273, 273, 273,
  2518. 273, 273, 273, 273, 273, 273, 273, 273,
  2519. 273, 273, 273, 273, 273, 273, 273, 273,
  2520. 273, 273, 273, 273, 273, 273, 273, 273,
  2521. 1, 1, 1, 1, 1, 1, 1, 1,
  2522. 1, 1, 1, 1, 1, 1, 1, 1,
  2523. 1, 1, 1, 1, 1, 1, 1, 1,
  2524. 1, 1, 1, 1, 1, 1, 1, 1,
  2525. 1, 1, 1, 1, 1, 1, 1, 1,
  2526. 1, 1, 1, 1, 1, 1, 1, 1,
  2527. 1, 1, 1, 1, 1, 1, 1, 1,
  2528. 1, 1, 1, 1, 1, 1, 1, 1,
  2529. 1, 1, 1, 278, 278, 278, 278, 278,
  2530. 278, 278, 278, 278, 278, 278, 278, 278,
  2531. 278, 278, 278, 278, 278, 278, 278, 278,
  2532. 278, 278, 278, 278, 278, 278, 278, 278,
  2533. 278, 279, 280, 280, 280, 280, 280, 280,
  2534. 280, 280, 280, 280, 280, 280, 281, 280,
  2535. 280, 282, 283, 283, 283, 284, 1, 285,
  2536. 1, 1, 1, 286, 1, 1, 1, 1,
  2537. 1, 1, 1, 1, 1, 1, 1, 1,
  2538. 1, 1, 1, 1, 1, 1, 285, 227,
  2539. 228, 227, 227, 227, 227, 227, 287, 1,
  2540. 227, 227, 1, 227, 246, 227, 227, 227,
  2541. 227, 227, 227, 227, 227, 227, 227, 227,
  2542. 1, 1, 216, 227, 1, 227, 246, 227,
  2543. 227, 227, 227, 227, 227, 227, 227, 227,
  2544. 227, 227, 227, 227, 227, 227, 227, 227,
  2545. 227, 227, 227, 227, 227, 227, 227, 227,
  2546. 227, 1, 1, 1, 227, 227, 227, 227,
  2547. 227, 227, 227, 227, 227, 227, 227, 227,
  2548. 227, 227, 227, 227, 227, 227, 227, 227,
  2549. 227, 227, 227, 227, 227, 227, 227, 227,
  2550. 227, 227, 227, 227, 227, 1, 1, 1,
  2551. 1, 1, 1, 1, 1, 1, 1, 1,
  2552. 1, 1, 1, 1, 1, 1, 1, 1,
  2553. 1, 1, 1, 1, 1, 1, 1, 1,
  2554. 1, 1, 1, 1, 1, 1, 1, 1,
  2555. 1, 1, 1, 1, 1, 1, 1, 1,
  2556. 1, 1, 1, 1, 1, 1, 1, 1,
  2557. 1, 1, 1, 1, 1, 1, 1, 1,
  2558. 1, 1, 1, 1, 1, 1, 1, 1,
  2559. 234, 234, 234, 234, 234, 234, 234, 234,
  2560. 234, 234, 234, 234, 234, 234, 234, 234,
  2561. 234, 234, 234, 234, 234, 234, 234, 234,
  2562. 234, 234, 234, 234, 234, 234, 235, 236,
  2563. 236, 236, 236, 236, 236, 236, 236, 236,
  2564. 236, 236, 236, 237, 236, 236, 238, 239,
  2565. 239, 239, 240, 1, 288, 1, 1, 1,
  2566. 289, 1, 1, 1, 1, 1, 1, 1,
  2567. 1, 1, 1, 1, 1, 1, 1, 1,
  2568. 1, 1, 1, 288, 227, 228, 227, 227,
  2569. 227, 227, 227, 290, 1, 227, 227, 1,
  2570. 227, 1, 227, 227, 227, 227, 227, 227,
  2571. 227, 227, 227, 227, 227, 1, 1, 199,
  2572. 227, 1, 227, 1, 227, 227, 227, 227,
  2573. 227, 227, 227, 227, 227, 227, 227, 227,
  2574. 227, 227, 227, 227, 227, 227, 227, 227,
  2575. 227, 227, 227, 227, 227, 227, 1, 1,
  2576. 1, 227, 227, 227, 227, 227, 227, 227,
  2577. 227, 227, 227, 227, 227, 227, 227, 227,
  2578. 227, 227, 227, 227, 227, 227, 227, 227,
  2579. 227, 227, 227, 227, 227, 227, 227, 227,
  2580. 227, 227, 1, 1, 1, 1, 1, 1,
  2581. 1, 1, 1, 1, 1, 1, 1, 1,
  2582. 1, 1, 1, 1, 1, 1, 1, 1,
  2583. 1, 1, 1, 1, 1, 1, 1, 1,
  2584. 1, 1, 1, 1, 1, 1, 1, 1,
  2585. 1, 1, 1, 1, 1, 1, 1, 1,
  2586. 1, 1, 1, 1, 1, 1, 1, 1,
  2587. 1, 1, 1, 1, 1, 1, 1, 1,
  2588. 1, 1, 1, 1, 1, 234, 234, 234,
  2589. 234, 234, 234, 234, 234, 234, 234, 234,
  2590. 234, 234, 234, 234, 234, 234, 234, 234,
  2591. 234, 234, 234, 234, 234, 234, 234, 234,
  2592. 234, 234, 234, 235, 236, 236, 236, 236,
  2593. 236, 236, 236, 236, 236, 236, 236, 236,
  2594. 237, 236, 236, 238, 239, 239, 239, 240,
  2595. 1, 291, 1, 288, 1, 1, 1, 1,
  2596. 1, 1, 1, 1, 1, 1, 1, 1,
  2597. 1, 1, 1, 1, 1, 1, 1, 1,
  2598. 1, 1, 288, 1, 292, 1, 1, 1,
  2599. 293, 1, 1, 1, 1, 1, 1, 1,
  2600. 1, 1, 1, 1, 1, 1, 1, 1,
  2601. 1, 1, 1, 292, 273, 274, 273, 273,
  2602. 273, 273, 273, 294, 1, 273, 273, 1,
  2603. 273, 1, 273, 273, 273, 273, 273, 273,
  2604. 273, 273, 273, 273, 273, 1, 1, 295,
  2605. 273, 1, 273, 1, 273, 273, 273, 273,
  2606. 273, 273, 273, 273, 273, 273, 273, 273,
  2607. 273, 273, 273, 273, 273, 273, 273, 273,
  2608. 273, 273, 273, 273, 273, 273, 1, 1,
  2609. 1, 273, 273, 273, 273, 273, 273, 273,
  2610. 273, 273, 273, 273, 273, 273, 273, 273,
  2611. 273, 273, 273, 273, 273, 273, 273, 273,
  2612. 273, 273, 273, 273, 273, 273, 273, 273,
  2613. 273, 273, 1, 1, 1, 1, 1, 1,
  2614. 1, 1, 1, 1, 1, 1, 1, 1,
  2615. 1, 1, 1, 1, 1, 1, 1, 1,
  2616. 1, 1, 1, 1, 1, 1, 1, 1,
  2617. 1, 1, 1, 1, 1, 1, 1, 1,
  2618. 1, 1, 1, 1, 1, 1, 1, 1,
  2619. 1, 1, 1, 1, 1, 1, 1, 1,
  2620. 1, 1, 1, 1, 1, 1, 1, 1,
  2621. 1, 1, 1, 1, 1, 278, 278, 278,
  2622. 278, 278, 278, 278, 278, 278, 278, 278,
  2623. 278, 278, 278, 278, 278, 278, 278, 278,
  2624. 278, 278, 278, 278, 278, 278, 278, 278,
  2625. 278, 278, 278, 279, 280, 280, 280, 280,
  2626. 280, 280, 280, 280, 280, 280, 280, 280,
  2627. 281, 280, 280, 282, 283, 283, 283, 284,
  2628. 1, 296, 1, 1, 1, 297, 1, 1,
  2629. 1, 1, 1, 1, 1, 1, 1, 1,
  2630. 1, 1, 1, 1, 1, 1, 1, 1,
  2631. 296, 298, 299, 298, 298, 298, 298, 298,
  2632. 300, 1, 298, 298, 301, 298, 302, 298,
  2633. 298, 298, 298, 298, 298, 298, 298, 298,
  2634. 298, 298, 1, 1, 1, 298, 1, 298,
  2635. 303, 298, 298, 298, 298, 298, 298, 298,
  2636. 298, 298, 298, 298, 298, 298, 298, 298,
  2637. 298, 298, 298, 298, 298, 298, 298, 298,
  2638. 298, 298, 298, 1, 1, 1, 298, 298,
  2639. 298, 298, 298, 298, 298, 298, 298, 298,
  2640. 298, 298, 298, 298, 298, 298, 298, 298,
  2641. 298, 298, 298, 298, 298, 298, 298, 298,
  2642. 298, 298, 298, 298, 298, 298, 298, 1,
  2643. 1, 1, 1, 1, 1, 1, 1, 1,
  2644. 1, 1, 1, 1, 1, 1, 1, 1,
  2645. 1, 1, 1, 1, 1, 1, 1, 1,
  2646. 1, 1, 1, 1, 1, 1, 1, 1,
  2647. 1, 1, 1, 1, 1, 1, 1, 1,
  2648. 1, 1, 1, 1, 1, 1, 1, 1,
  2649. 1, 1, 1, 1, 1, 1, 1, 1,
  2650. 1, 1, 1, 1, 1, 1, 1, 1,
  2651. 1, 1, 304, 304, 304, 304, 304, 304,
  2652. 304, 304, 304, 304, 304, 304, 304, 304,
  2653. 304, 304, 304, 304, 304, 304, 304, 304,
  2654. 304, 304, 304, 304, 304, 304, 304, 304,
  2655. 305, 306, 306, 306, 306, 306, 306, 306,
  2656. 306, 306, 306, 306, 306, 307, 306, 306,
  2657. 308, 309, 309, 309, 310, 1, 311, 1,
  2658. 1, 1, 312, 1, 1, 1, 1, 1,
  2659. 1, 1, 1, 1, 1, 1, 1, 1,
  2660. 1, 1, 1, 1, 1, 311, 298, 299,
  2661. 298, 298, 298, 298, 298, 313, 1, 298,
  2662. 298, 314, 298, 302, 298, 298, 298, 298,
  2663. 298, 298, 298, 298, 298, 298, 298, 1,
  2664. 1, 1, 298, 1, 298, 315, 298, 298,
  2665. 298, 298, 298, 298, 298, 298, 298, 298,
  2666. 298, 298, 298, 298, 298, 298, 298, 298,
  2667. 298, 298, 298, 298, 298, 298, 298, 298,
  2668. 1, 1, 1, 298, 298, 298, 298, 298,
  2669. 298, 298, 298, 298, 298, 298, 298, 298,
  2670. 298, 298, 298, 298, 298, 298, 298, 298,
  2671. 298, 298, 298, 298, 298, 298, 298, 298,
  2672. 298, 298, 298, 298, 1, 1, 1, 1,
  2673. 1, 1, 1, 1, 1, 1, 1, 1,
  2674. 1, 1, 1, 1, 1, 1, 1, 1,
  2675. 1, 1, 1, 1, 1, 1, 1, 1,
  2676. 1, 1, 1, 1, 1, 1, 1, 1,
  2677. 1, 1, 1, 1, 1, 1, 1, 1,
  2678. 1, 1, 1, 1, 1, 1, 1, 1,
  2679. 1, 1, 1, 1, 1, 1, 1, 1,
  2680. 1, 1, 1, 1, 1, 1, 1, 304,
  2681. 304, 304, 304, 304, 304, 304, 304, 304,
  2682. 304, 304, 304, 304, 304, 304, 304, 304,
  2683. 304, 304, 304, 304, 304, 304, 304, 304,
  2684. 304, 304, 304, 304, 304, 305, 306, 306,
  2685. 306, 306, 306, 306, 306, 306, 306, 306,
  2686. 306, 306, 307, 306, 306, 308, 309, 309,
  2687. 309, 310, 1, 316, 1, 311, 1, 1,
  2688. 1, 1, 1, 1, 1, 1, 1, 1,
  2689. 1, 1, 1, 1, 1, 1, 1, 1,
  2690. 1, 1, 1, 1, 311, 1, 317, 1,
  2691. 1, 1, 318, 1, 1, 1, 1, 1,
  2692. 1, 1, 1, 1, 1, 1, 1, 1,
  2693. 1, 1, 1, 1, 1, 317, 319, 320,
  2694. 319, 319, 319, 319, 319, 321, 1, 319,
  2695. 319, 1, 319, 322, 319, 319, 319, 319,
  2696. 319, 319, 319, 319, 319, 319, 319, 1,
  2697. 1, 1, 319, 323, 319, 324, 319, 319,
  2698. 319, 319, 319, 319, 319, 319, 319, 319,
  2699. 319, 319, 319, 319, 319, 319, 319, 319,
  2700. 319, 319, 319, 319, 319, 319, 319, 319,
  2701. 1, 1, 1, 319, 319, 319, 319, 319,
  2702. 319, 319, 319, 319, 319, 319, 319, 319,
  2703. 319, 319, 319, 319, 319, 319, 319, 319,
  2704. 319, 319, 319, 319, 319, 319, 319, 319,
  2705. 319, 319, 319, 319, 1, 1, 1, 1,
  2706. 1, 1, 1, 1, 1, 1, 1, 1,
  2707. 1, 1, 1, 1, 1, 1, 1, 1,
  2708. 1, 1, 1, 1, 1, 1, 1, 1,
  2709. 1, 1, 1, 1, 1, 1, 1, 1,
  2710. 1, 1, 1, 1, 1, 1, 1, 1,
  2711. 1, 1, 1, 1, 1, 1, 1, 1,
  2712. 1, 1, 1, 1, 1, 1, 1, 1,
  2713. 1, 1, 1, 1, 1, 1, 1, 325,
  2714. 325, 325, 325, 325, 325, 325, 325, 325,
  2715. 325, 325, 325, 325, 325, 325, 325, 325,
  2716. 325, 325, 325, 325, 325, 325, 325, 325,
  2717. 325, 325, 325, 325, 325, 326, 327, 327,
  2718. 327, 327, 327, 327, 327, 327, 327, 327,
  2719. 327, 327, 328, 327, 327, 329, 330, 330,
  2720. 330, 331, 1, 332, 1, 1, 1, 333,
  2721. 1, 1, 1, 1, 1, 1, 1, 1,
  2722. 1, 1, 1, 1, 1, 1, 1, 1,
  2723. 1, 1, 332, 1, 1, 1, 1, 1,
  2724. 1, 1, 334, 1, 1, 1, 1, 1,
  2725. 335, 1, 1, 1, 1, 1, 1, 1,
  2726. 1, 1, 1, 1, 1, 1, 1, 1,
  2727. 336, 1, 337, 1, 338, 1, 332, 1,
  2728. 1, 1, 1, 1, 1, 1, 1, 1,
  2729. 1, 1, 1, 1, 1, 1, 1, 1,
  2730. 1, 1, 1, 1, 1, 332, 1, 339,
  2731. 1, 1, 1, 340, 1, 1, 1, 1,
  2732. 1, 1, 1, 1, 1, 1, 1, 1,
  2733. 1, 1, 1, 1, 1, 1, 339, 1,
  2734. 1, 1, 1, 1, 1, 1, 341, 1,
  2735. 1, 1, 1, 1, 342, 1, 1, 1,
  2736. 1, 1, 1, 1, 1, 1, 1, 1,
  2737. 1, 1, 1, 1, 343, 1, 344, 1,
  2738. 335, 1, 1, 1, 345, 1, 1, 1,
  2739. 1, 1, 1, 1, 1, 1, 1, 1,
  2740. 1, 1, 1, 1, 1, 1, 1, 335,
  2741. 346, 347, 346, 346, 346, 346, 346, 348,
  2742. 1, 346, 346, 1, 346, 1, 346, 346,
  2743. 346, 346, 346, 346, 346, 346, 346, 346,
  2744. 346, 1, 1, 1, 346, 1, 346, 1,
  2745. 346, 346, 346, 346, 346, 346, 346, 346,
  2746. 346, 346, 346, 346, 346, 346, 346, 346,
  2747. 346, 346, 346, 346, 346, 346, 346, 346,
  2748. 346, 346, 1, 1, 1, 346, 346, 346,
  2749. 346, 346, 346, 346, 346, 346, 346, 346,
  2750. 346, 346, 346, 346, 346, 346, 346, 346,
  2751. 346, 346, 346, 346, 346, 346, 346, 346,
  2752. 346, 346, 346, 346, 346, 346, 1, 1,
  2753. 1, 1, 1, 1, 1, 1, 1, 1,
  2754. 1, 1, 1, 1, 1, 1, 1, 1,
  2755. 1, 1, 1, 1, 1, 1, 1, 1,
  2756. 1, 1, 1, 1, 1, 1, 1, 1,
  2757. 1, 1, 1, 1, 1, 1, 1, 1,
  2758. 1, 1, 1, 1, 1, 1, 1, 1,
  2759. 1, 1, 1, 1, 1, 1, 1, 1,
  2760. 1, 1, 1, 1, 1, 1, 1, 1,
  2761. 1, 349, 349, 349, 349, 349, 349, 349,
  2762. 349, 349, 349, 349, 349, 349, 349, 349,
  2763. 349, 349, 349, 349, 349, 349, 349, 349,
  2764. 349, 349, 349, 349, 349, 349, 349, 350,
  2765. 351, 351, 351, 351, 351, 351, 351, 351,
  2766. 351, 351, 351, 351, 352, 351, 351, 353,
  2767. 354, 354, 354, 355, 1, 356, 1, 335,
  2768. 1, 1, 1, 1, 1, 1, 1, 1,
  2769. 1, 1, 1, 1, 1, 1, 1, 1,
  2770. 1, 1, 1, 1, 1, 1, 335, 1,
  2771. 357, 1, 1, 1, 358, 1, 1, 1,
  2772. 1, 1, 1, 1, 1, 1, 1, 1,
  2773. 1, 1, 1, 1, 1, 1, 1, 357,
  2774. 346, 1, 346, 346, 346, 346, 346, 359,
  2775. 1, 346, 346, 1, 346, 335, 346, 346,
  2776. 346, 346, 346, 346, 346, 346, 346, 346,
  2777. 346, 1, 1, 1, 346, 336, 346, 360,
  2778. 346, 346, 346, 346, 346, 346, 346, 346,
  2779. 346, 346, 346, 346, 346, 346, 346, 346,
  2780. 346, 346, 346, 346, 346, 346, 346, 346,
  2781. 346, 346, 1, 1, 1, 346, 346, 346,
  2782. 346, 346, 346, 346, 346, 346, 346, 346,
  2783. 346, 346, 346, 346, 346, 346, 346, 346,
  2784. 346, 346, 346, 346, 346, 346, 346, 346,
  2785. 346, 346, 346, 346, 346, 346, 1, 1,
  2786. 1, 1, 1, 1, 1, 1, 1, 1,
  2787. 1, 1, 1, 1, 1, 1, 1, 1,
  2788. 1, 1, 1, 1, 1, 1, 1, 1,
  2789. 1, 1, 1, 1, 1, 1, 1, 1,
  2790. 1, 1, 1, 1, 1, 1, 1, 1,
  2791. 1, 1, 1, 1, 1, 1, 1, 1,
  2792. 1, 1, 1, 1, 1, 1, 1, 1,
  2793. 1, 1, 1, 1, 1, 1, 1, 1,
  2794. 1, 349, 349, 349, 349, 349, 349, 349,
  2795. 349, 349, 349, 349, 349, 349, 349, 349,
  2796. 349, 349, 349, 349, 349, 349, 349, 349,
  2797. 349, 349, 349, 349, 349, 349, 349, 350,
  2798. 351, 351, 351, 351, 351, 351, 351, 351,
  2799. 351, 351, 351, 351, 352, 351, 351, 353,
  2800. 354, 354, 354, 355, 1, 357, 1, 1,
  2801. 1, 358, 1, 1, 1, 1, 1, 1,
  2802. 1, 1, 1, 1, 1, 1, 1, 1,
  2803. 1, 1, 1, 1, 357, 1, 1, 1,
  2804. 1, 1, 1, 1, 359, 1, 1, 1,
  2805. 1, 1, 335, 1, 1, 1, 1, 1,
  2806. 1, 1, 1, 1, 1, 1, 1, 1,
  2807. 1, 1, 336, 1, 360, 1, 361, 1,
  2808. 357, 1, 1, 1, 1, 1, 1, 1,
  2809. 1, 1, 1, 1, 1, 1, 1, 1,
  2810. 1, 1, 1, 1, 1, 1, 1, 357,
  2811. 1, 362, 1, 1, 1, 363, 1, 1,
  2812. 1, 1, 1, 1, 1, 1, 1, 1,
  2813. 1, 1, 1, 1, 1, 1, 1, 1,
  2814. 362, 1, 1, 1, 1, 1, 1, 1,
  2815. 364, 1, 1, 1, 1, 1, 342, 1,
  2816. 1, 1, 1, 1, 1, 1, 1, 1,
  2817. 1, 1, 1, 1, 1, 1, 343, 1,
  2818. 365, 1, 336, 1, 1, 1, 366, 1,
  2819. 1, 1, 1, 1, 1, 1, 1, 1,
  2820. 1, 1, 1, 1, 1, 1, 1, 1,
  2821. 1, 336, 1, 1, 1, 1, 1, 1,
  2822. 1, 367, 1, 1, 1, 368, 1, 1,
  2823. 1, 1, 1, 1, 1, 1, 1, 1,
  2824. 1, 1, 1, 1, 369, 1, 370, 1,
  2825. 336, 1, 1, 1, 1, 1, 1, 1,
  2826. 1, 1, 1, 1, 1, 1, 1, 1,
  2827. 1, 1, 1, 1, 1, 1, 1, 336,
  2828. 1, 343, 1, 1, 1, 371, 1, 1,
  2829. 1, 1, 1, 1, 1, 1, 1, 1,
  2830. 1, 1, 1, 1, 1, 1, 1, 1,
  2831. 343, 1, 1, 1, 1, 1, 1, 1,
  2832. 372, 1, 1, 1, 373, 1, 1, 1,
  2833. 1, 1, 1, 1, 1, 1, 1, 1,
  2834. 1, 1, 1, 374, 1, 375, 1, 1,
  2835. 1, 376, 1, 1, 1, 1, 1, 1,
  2836. 1, 1, 1, 1, 1, 1, 1, 1,
  2837. 1, 1, 1, 1, 375, 178, 179, 178,
  2838. 178, 178, 178, 178, 377, 1, 178, 178,
  2839. 378, 178, 182, 178, 178, 178, 178, 178,
  2840. 178, 178, 178, 178, 178, 178, 1, 183,
  2841. 184, 178, 1, 178, 185, 178, 178, 178,
  2842. 178, 178, 178, 178, 178, 178, 178, 178,
  2843. 178, 178, 178, 178, 178, 178, 178, 178,
  2844. 178, 178, 178, 178, 178, 178, 178, 1,
  2845. 1, 1, 178, 178, 178, 178, 178, 178,
  2846. 178, 178, 178, 178, 178, 178, 178, 178,
  2847. 178, 178, 178, 178, 178, 178, 178, 178,
  2848. 178, 178, 178, 178, 178, 178, 178, 178,
  2849. 178, 178, 178, 1, 1, 1, 1, 1,
  2850. 1, 1, 1, 1, 1, 1, 1, 1,
  2851. 1, 1, 1, 1, 1, 1, 1, 1,
  2852. 1, 1, 1, 1, 1, 1, 1, 1,
  2853. 1, 1, 1, 1, 1, 1, 1, 1,
  2854. 1, 1, 1, 1, 1, 1, 1, 1,
  2855. 1, 1, 1, 1, 1, 1, 1, 1,
  2856. 1, 1, 1, 1, 1, 1, 1, 1,
  2857. 1, 1, 1, 1, 1, 1, 186, 186,
  2858. 186, 186, 186, 186, 186, 186, 186, 186,
  2859. 186, 186, 186, 186, 186, 186, 186, 186,
  2860. 186, 186, 186, 186, 186, 186, 186, 186,
  2861. 186, 186, 186, 186, 187, 188, 188, 188,
  2862. 188, 188, 188, 188, 188, 188, 188, 188,
  2863. 188, 189, 188, 188, 190, 191, 191, 191,
  2864. 192, 1, 379, 1, 1, 1, 380, 1,
  2865. 1, 1, 1, 1, 1, 1, 1, 1,
  2866. 1, 1, 1, 1, 1, 1, 1, 1,
  2867. 1, 379, 195, 196, 195, 195, 195, 195,
  2868. 195, 381, 1, 195, 195, 378, 195, 198,
  2869. 195, 195, 195, 195, 195, 195, 195, 195,
  2870. 195, 195, 195, 1, 183, 199, 195, 1,
  2871. 195, 1, 195, 195, 195, 195, 195, 195,
  2872. 195, 195, 195, 195, 195, 195, 195, 195,
  2873. 195, 195, 195, 195, 195, 195, 195, 195,
  2874. 195, 195, 195, 195, 1, 1, 1, 195,
  2875. 195, 195, 195, 195, 195, 195, 195, 195,
  2876. 195, 195, 195, 195, 195, 195, 195, 195,
  2877. 195, 195, 195, 195, 195, 195, 195, 195,
  2878. 195, 195, 195, 195, 195, 195, 195, 195,
  2879. 1, 1, 1, 1, 1, 1, 1, 1,
  2880. 1, 1, 1, 1, 1, 1, 1, 1,
  2881. 1, 1, 1, 1, 1, 1, 1, 1,
  2882. 1, 1, 1, 1, 1, 1, 1, 1,
  2883. 1, 1, 1, 1, 1, 1, 1, 1,
  2884. 1, 1, 1, 1, 1, 1, 1, 1,
  2885. 1, 1, 1, 1, 1, 1, 1, 1,
  2886. 1, 1, 1, 1, 1, 1, 1, 1,
  2887. 1, 1, 1, 200, 200, 200, 200, 200,
  2888. 200, 200, 200, 200, 200, 200, 200, 200,
  2889. 200, 200, 200, 200, 200, 200, 200, 200,
  2890. 200, 200, 200, 200, 200, 200, 200, 200,
  2891. 200, 201, 202, 202, 202, 202, 202, 202,
  2892. 202, 202, 202, 202, 202, 202, 203, 202,
  2893. 202, 204, 205, 205, 205, 206, 1, 382,
  2894. 1, 379, 1, 1, 1, 1, 1, 1,
  2895. 1, 1, 1, 1, 1, 1, 1, 1,
  2896. 1, 1, 1, 1, 1, 1, 1, 1,
  2897. 379, 1, 383, 383, 383, 383, 383, 383,
  2898. 383, 383, 384, 1, 383, 383, 385, 383,
  2899. 383, 383, 383, 383, 383, 383, 383, 383,
  2900. 383, 383, 383, 383, 383, 383, 383, 383,
  2901. 383, 384, 383, 386, 383, 383, 383, 383,
  2902. 383, 383, 383, 383, 383, 383, 383, 383,
  2903. 383, 383, 383, 383, 383, 383, 383, 383,
  2904. 383, 383, 383, 383, 383, 383, 383, 383,
  2905. 383, 383, 383, 383, 383, 383, 383, 383,
  2906. 383, 383, 383, 383, 383, 383, 383, 383,
  2907. 383, 383, 383, 383, 383, 383, 383, 383,
  2908. 383, 383, 383, 383, 383, 387, 383, 383,
  2909. 383, 383, 383, 383, 383, 383, 383, 383,
  2910. 383, 383, 383, 383, 383, 383, 383, 383,
  2911. 383, 383, 383, 383, 383, 383, 383, 383,
  2912. 383, 383, 383, 383, 383, 383, 383, 383,
  2913. 383, 1, 1, 1, 1, 1, 1, 1,
  2914. 1, 1, 1, 1, 1, 1, 1, 1,
  2915. 1, 1, 1, 1, 1, 1, 1, 1,
  2916. 1, 1, 1, 1, 1, 1, 1, 1,
  2917. 1, 1, 1, 1, 1, 1, 1, 1,
  2918. 1, 1, 1, 1, 1, 1, 1, 1,
  2919. 1, 1, 1, 1, 1, 1, 1, 1,
  2920. 1, 1, 1, 1, 1, 1, 1, 1,
  2921. 1, 1, 1, 388, 388, 388, 388, 388,
  2922. 388, 388, 388, 388, 388, 388, 388, 388,
  2923. 388, 388, 388, 388, 388, 388, 388, 388,
  2924. 388, 388, 388, 388, 388, 388, 388, 388,
  2925. 388, 389, 390, 390, 390, 390, 390, 390,
  2926. 390, 390, 390, 390, 390, 390, 391, 390,
  2927. 390, 392, 393, 393, 393, 394, 1, 395,
  2928. 395, 395, 395, 395, 395, 395, 395, 395,
  2929. 1, 395, 395, 396, 395, 395, 395, 395,
  2930. 395, 395, 395, 395, 395, 395, 395, 395,
  2931. 395, 395, 395, 395, 395, 395, 395, 395,
  2932. 397, 395, 395, 395, 395, 395, 395, 395,
  2933. 395, 395, 395, 395, 395, 395, 395, 395,
  2934. 395, 395, 395, 395, 395, 395, 395, 395,
  2935. 395, 395, 395, 395, 395, 395, 395, 395,
  2936. 395, 395, 395, 395, 395, 395, 395, 395,
  2937. 395, 395, 395, 395, 395, 395, 395, 395,
  2938. 395, 395, 395, 395, 395, 395, 395, 395,
  2939. 395, 395, 398, 395, 395, 395, 395, 395,
  2940. 395, 395, 395, 395, 395, 395, 395, 395,
  2941. 395, 395, 395, 395, 395, 395, 395, 395,
  2942. 395, 395, 395, 395, 395, 395, 395, 395,
  2943. 395, 395, 395, 395, 395, 395, 1, 1,
  2944. 1, 1, 1, 1, 1, 1, 1, 1,
  2945. 1, 1, 1, 1, 1, 1, 1, 1,
  2946. 1, 1, 1, 1, 1, 1, 1, 1,
  2947. 1, 1, 1, 1, 1, 1, 1, 1,
  2948. 1, 1, 1, 1, 1, 1, 1, 1,
  2949. 1, 1, 1, 1, 1, 1, 1, 1,
  2950. 1, 1, 1, 1, 1, 1, 1, 1,
  2951. 1, 1, 1, 1, 1, 1, 1, 1,
  2952. 399, 399, 399, 399, 399, 399, 399, 399,
  2953. 399, 399, 399, 399, 399, 399, 399, 399,
  2954. 399, 399, 399, 399, 399, 399, 399, 399,
  2955. 399, 399, 399, 399, 399, 399, 400, 401,
  2956. 401, 401, 401, 401, 401, 401, 401, 401,
  2957. 401, 401, 401, 402, 401, 401, 403, 404,
  2958. 404, 404, 405, 1, 406, 1, 395, 1,
  2959. 1, 1, 1, 1, 1, 1, 1, 1,
  2960. 1, 1, 1, 1, 1, 1, 1, 1,
  2961. 1, 1, 1, 1, 1, 395, 1, 407,
  2962. 1, 1, 1, 408, 1, 1, 1, 1,
  2963. 1, 1, 1, 1, 1, 1, 1, 1,
  2964. 1, 1, 1, 1, 1, 1, 407, 409,
  2965. 211, 409, 409, 409, 409, 409, 410, 1,
  2966. 409, 409, 411, 409, 214, 409, 409, 409,
  2967. 409, 409, 409, 409, 409, 409, 409, 409,
  2968. 1, 412, 216, 409, 1, 409, 413, 409,
  2969. 409, 409, 409, 409, 409, 409, 409, 409,
  2970. 409, 409, 409, 409, 409, 409, 409, 409,
  2971. 409, 409, 409, 409, 409, 409, 409, 409,
  2972. 409, 1, 1, 1, 409, 409, 409, 409,
  2973. 409, 409, 409, 409, 409, 409, 409, 409,
  2974. 409, 409, 409, 409, 409, 409, 409, 409,
  2975. 409, 409, 409, 409, 409, 409, 409, 409,
  2976. 409, 409, 409, 409, 409, 1, 1, 1,
  2977. 1, 1, 1, 1, 1, 1, 1, 1,
  2978. 1, 1, 1, 1, 1, 1, 1, 1,
  2979. 1, 1, 1, 1, 1, 1, 1, 1,
  2980. 1, 1, 1, 1, 1, 1, 1, 1,
  2981. 1, 1, 1, 1, 1, 1, 1, 1,
  2982. 1, 1, 1, 1, 1, 1, 1, 1,
  2983. 1, 1, 1, 1, 1, 1, 1, 1,
  2984. 1, 1, 1, 1, 1, 1, 1, 1,
  2985. 414, 414, 414, 414, 414, 414, 414, 414,
  2986. 414, 414, 414, 414, 414, 414, 414, 414,
  2987. 414, 414, 414, 414, 414, 414, 414, 414,
  2988. 414, 414, 414, 414, 414, 414, 415, 416,
  2989. 416, 416, 416, 416, 416, 416, 416, 416,
  2990. 416, 416, 416, 417, 416, 416, 418, 419,
  2991. 419, 419, 420, 1, 421, 1, 1, 1,
  2992. 422, 1, 1, 1, 1, 1, 1, 1,
  2993. 1, 1, 1, 1, 1, 1, 1, 1,
  2994. 1, 1, 1, 421, 227, 228, 227, 227,
  2995. 227, 227, 227, 423, 1, 227, 227, 424,
  2996. 227, 231, 227, 227, 227, 227, 227, 227,
  2997. 227, 227, 227, 227, 227, 1, 425, 216,
  2998. 227, 1, 227, 426, 227, 227, 227, 227,
  2999. 227, 227, 227, 227, 227, 227, 227, 227,
  3000. 227, 227, 227, 227, 227, 227, 227, 227,
  3001. 227, 227, 227, 227, 227, 227, 1, 1,
  3002. 1, 227, 227, 227, 227, 227, 227, 227,
  3003. 227, 227, 227, 227, 227, 227, 227, 227,
  3004. 227, 227, 227, 227, 227, 227, 227, 227,
  3005. 227, 227, 227, 227, 227, 227, 227, 227,
  3006. 227, 227, 1, 1, 1, 1, 1, 1,
  3007. 1, 1, 1, 1, 1, 1, 1, 1,
  3008. 1, 1, 1, 1, 1, 1, 1, 1,
  3009. 1, 1, 1, 1, 1, 1, 1, 1,
  3010. 1, 1, 1, 1, 1, 1, 1, 1,
  3011. 1, 1, 1, 1, 1, 1, 1, 1,
  3012. 1, 1, 1, 1, 1, 1, 1, 1,
  3013. 1, 1, 1, 1, 1, 1, 1, 1,
  3014. 1, 1, 1, 1, 1, 234, 234, 234,
  3015. 234, 234, 234, 234, 234, 234, 234, 234,
  3016. 234, 234, 234, 234, 234, 234, 234, 234,
  3017. 234, 234, 234, 234, 234, 234, 234, 234,
  3018. 234, 234, 234, 235, 236, 236, 236, 236,
  3019. 236, 236, 236, 236, 236, 236, 236, 236,
  3020. 237, 236, 236, 238, 239, 239, 239, 240,
  3021. 1, 427, 1, 428, 1, 1, 1, 1,
  3022. 1, 1, 1, 1, 1, 1, 1, 1,
  3023. 1, 1, 1, 1, 1, 1, 1, 1,
  3024. 1, 1, 428, 1, 429, 1, 1, 1,
  3025. 430, 1, 1, 1, 1, 1, 1, 1,
  3026. 1, 1, 1, 1, 1, 1, 1, 1,
  3027. 1, 1, 1, 429, 273, 274, 273, 273,
  3028. 273, 273, 273, 431, 1, 273, 273, 432,
  3029. 273, 433, 273, 273, 273, 273, 273, 273,
  3030. 273, 273, 273, 273, 273, 1, 434, 277,
  3031. 273, 1, 273, 435, 273, 273, 273, 273,
  3032. 273, 273, 273, 273, 273, 273, 273, 273,
  3033. 273, 273, 273, 273, 273, 273, 273, 273,
  3034. 273, 273, 273, 273, 273, 273, 1, 1,
  3035. 1, 273, 273, 273, 273, 273, 273, 273,
  3036. 273, 273, 273, 273, 273, 273, 273, 273,
  3037. 273, 273, 273, 273, 273, 273, 273, 273,
  3038. 273, 273, 273, 273, 273, 273, 273, 273,
  3039. 273, 273, 1, 1, 1, 1, 1, 1,
  3040. 1, 1, 1, 1, 1, 1, 1, 1,
  3041. 1, 1, 1, 1, 1, 1, 1, 1,
  3042. 1, 1, 1, 1, 1, 1, 1, 1,
  3043. 1, 1, 1, 1, 1, 1, 1, 1,
  3044. 1, 1, 1, 1, 1, 1, 1, 1,
  3045. 1, 1, 1, 1, 1, 1, 1, 1,
  3046. 1, 1, 1, 1, 1, 1, 1, 1,
  3047. 1, 1, 1, 1, 1, 278, 278, 278,
  3048. 278, 278, 278, 278, 278, 278, 278, 278,
  3049. 278, 278, 278, 278, 278, 278, 278, 278,
  3050. 278, 278, 278, 278, 278, 278, 278, 278,
  3051. 278, 278, 278, 279, 280, 280, 280, 280,
  3052. 280, 280, 280, 280, 280, 280, 280, 280,
  3053. 281, 280, 280, 282, 283, 283, 283, 284,
  3054. 1, 436, 1, 1, 1, 437, 1, 1,
  3055. 1, 1, 1, 1, 1, 1, 1, 1,
  3056. 1, 1, 1, 1, 1, 1, 1, 1,
  3057. 436, 438, 439, 438, 438, 438, 438, 438,
  3058. 440, 1, 438, 438, 1, 438, 246, 438,
  3059. 438, 438, 438, 438, 438, 438, 438, 438,
  3060. 438, 438, 1, 1, 216, 438, 1, 438,
  3061. 246, 438, 438, 438, 438, 438, 438, 438,
  3062. 438, 438, 438, 438, 438, 438, 438, 438,
  3063. 438, 438, 438, 438, 438, 438, 438, 438,
  3064. 438, 438, 438, 1, 1, 1, 438, 438,
  3065. 438, 438, 438, 438, 438, 438, 438, 438,
  3066. 438, 438, 438, 438, 438, 438, 438, 438,
  3067. 438, 438, 438, 438, 438, 438, 438, 438,
  3068. 438, 438, 438, 438, 438, 438, 438, 1,
  3069. 1, 1, 1, 1, 1, 1, 1, 1,
  3070. 1, 1, 1, 1, 1, 1, 1, 1,
  3071. 1, 1, 1, 1, 1, 1, 1, 1,
  3072. 1, 1, 1, 1, 1, 1, 1, 1,
  3073. 1, 1, 1, 1, 1, 1, 1, 1,
  3074. 1, 1, 1, 1, 1, 1, 1, 1,
  3075. 1, 1, 1, 1, 1, 1, 1, 1,
  3076. 1, 1, 1, 1, 1, 1, 1, 1,
  3077. 1, 1, 441, 441, 441, 441, 441, 441,
  3078. 441, 441, 441, 441, 441, 441, 441, 441,
  3079. 441, 441, 441, 441, 441, 441, 441, 441,
  3080. 441, 441, 441, 441, 441, 441, 441, 441,
  3081. 442, 443, 443, 443, 443, 443, 443, 443,
  3082. 443, 443, 443, 443, 443, 444, 443, 443,
  3083. 445, 446, 446, 446, 447, 1, 448, 1,
  3084. 1, 1, 449, 1, 1, 1, 1, 1,
  3085. 1, 1, 1, 1, 1, 1, 1, 1,
  3086. 1, 1, 1, 1, 1, 448, 438, 439,
  3087. 438, 438, 438, 438, 438, 450, 1, 438,
  3088. 438, 1, 438, 1, 438, 438, 438, 438,
  3089. 438, 438, 438, 438, 438, 438, 438, 1,
  3090. 1, 199, 438, 1, 438, 1, 438, 438,
  3091. 438, 438, 438, 438, 438, 438, 438, 438,
  3092. 438, 438, 438, 438, 438, 438, 438, 438,
  3093. 438, 438, 438, 438, 438, 438, 438, 438,
  3094. 1, 1, 1, 438, 438, 438, 438, 438,
  3095. 438, 438, 438, 438, 438, 438, 438, 438,
  3096. 438, 438, 438, 438, 438, 438, 438, 438,
  3097. 438, 438, 438, 438, 438, 438, 438, 438,
  3098. 438, 438, 438, 438, 1, 1, 1, 1,
  3099. 1, 1, 1, 1, 1, 1, 1, 1,
  3100. 1, 1, 1, 1, 1, 1, 1, 1,
  3101. 1, 1, 1, 1, 1, 1, 1, 1,
  3102. 1, 1, 1, 1, 1, 1, 1, 1,
  3103. 1, 1, 1, 1, 1, 1, 1, 1,
  3104. 1, 1, 1, 1, 1, 1, 1, 1,
  3105. 1, 1, 1, 1, 1, 1, 1, 1,
  3106. 1, 1, 1, 1, 1, 1, 1, 441,
  3107. 441, 441, 441, 441, 441, 441, 441, 441,
  3108. 441, 441, 441, 441, 441, 441, 441, 441,
  3109. 441, 441, 441, 441, 441, 441, 441, 441,
  3110. 441, 441, 441, 441, 441, 442, 443, 443,
  3111. 443, 443, 443, 443, 443, 443, 443, 443,
  3112. 443, 443, 444, 443, 443, 445, 446, 446,
  3113. 446, 447, 1, 451, 1, 448, 1, 1,
  3114. 1, 1, 1, 1, 1, 1, 1, 1,
  3115. 1, 1, 1, 1, 1, 1, 1, 1,
  3116. 1, 1, 1, 1, 448, 1, 452, 1,
  3117. 1, 1, 453, 1, 1, 1, 1, 1,
  3118. 1, 1, 1, 1, 1, 1, 1, 1,
  3119. 1, 1, 1, 1, 1, 452, 438, 228,
  3120. 438, 438, 438, 438, 438, 454, 1, 438,
  3121. 438, 368, 438, 231, 438, 438, 438, 438,
  3122. 438, 438, 438, 438, 438, 438, 438, 1,
  3123. 369, 216, 438, 1, 438, 455, 438, 438,
  3124. 438, 438, 438, 438, 438, 438, 438, 438,
  3125. 438, 438, 438, 438, 438, 438, 438, 438,
  3126. 438, 438, 438, 438, 438, 438, 438, 438,
  3127. 1, 1, 1, 438, 438, 438, 438, 438,
  3128. 438, 438, 438, 438, 438, 438, 438, 438,
  3129. 438, 438, 438, 438, 438, 438, 438, 438,
  3130. 438, 438, 438, 438, 438, 438, 438, 438,
  3131. 438, 438, 438, 438, 1, 1, 1, 1,
  3132. 1, 1, 1, 1, 1, 1, 1, 1,
  3133. 1, 1, 1, 1, 1, 1, 1, 1,
  3134. 1, 1, 1, 1, 1, 1, 1, 1,
  3135. 1, 1, 1, 1, 1, 1, 1, 1,
  3136. 1, 1, 1, 1, 1, 1, 1, 1,
  3137. 1, 1, 1, 1, 1, 1, 1, 1,
  3138. 1, 1, 1, 1, 1, 1, 1, 1,
  3139. 1, 1, 1, 1, 1, 1, 1, 441,
  3140. 441, 441, 441, 441, 441, 441, 441, 441,
  3141. 441, 441, 441, 441, 441, 441, 441, 441,
  3142. 441, 441, 441, 441, 441, 441, 441, 441,
  3143. 441, 441, 441, 441, 441, 442, 443, 443,
  3144. 443, 443, 443, 443, 443, 443, 443, 443,
  3145. 443, 443, 444, 443, 443, 445, 446, 446,
  3146. 446, 447, 1, 452, 1, 1, 1, 453,
  3147. 1, 1, 1, 1, 1, 1, 1, 1,
  3148. 1, 1, 1, 1, 1, 1, 1, 1,
  3149. 1, 1, 452, 227, 228, 227, 227, 227,
  3150. 227, 227, 454, 1, 227, 227, 368, 227,
  3151. 231, 227, 227, 227, 227, 227, 227, 227,
  3152. 227, 227, 227, 227, 1, 369, 216, 227,
  3153. 1, 227, 455, 227, 227, 227, 227, 227,
  3154. 227, 227, 227, 227, 227, 227, 227, 227,
  3155. 227, 227, 227, 227, 227, 227, 227, 227,
  3156. 227, 227, 227, 227, 227, 1, 1, 1,
  3157. 227, 227, 227, 227, 227, 227, 227, 227,
  3158. 227, 227, 227, 227, 227, 227, 227, 227,
  3159. 227, 227, 227, 227, 227, 227, 227, 227,
  3160. 227, 227, 227, 227, 227, 227, 227, 227,
  3161. 227, 1, 1, 1, 1, 1, 1, 1,
  3162. 1, 1, 1, 1, 1, 1, 1, 1,
  3163. 1, 1, 1, 1, 1, 1, 1, 1,
  3164. 1, 1, 1, 1, 1, 1, 1, 1,
  3165. 1, 1, 1, 1, 1, 1, 1, 1,
  3166. 1, 1, 1, 1, 1, 1, 1, 1,
  3167. 1, 1, 1, 1, 1, 1, 1, 1,
  3168. 1, 1, 1, 1, 1, 1, 1, 1,
  3169. 1, 1, 1, 1, 234, 234, 234, 234,
  3170. 234, 234, 234, 234, 234, 234, 234, 234,
  3171. 234, 234, 234, 234, 234, 234, 234, 234,
  3172. 234, 234, 234, 234, 234, 234, 234, 234,
  3173. 234, 234, 235, 236, 236, 236, 236, 236,
  3174. 236, 236, 236, 236, 236, 236, 236, 237,
  3175. 236, 236, 238, 239, 239, 239, 240, 1,
  3176. 456, 1, 457, 1, 1, 1, 1, 1,
  3177. 1, 1, 1, 1, 1, 1, 1, 1,
  3178. 1, 1, 1, 1, 1, 1, 1, 1,
  3179. 1, 457, 1, 458, 1, 1, 1, 459,
  3180. 1, 1, 1, 1, 1, 1, 1, 1,
  3181. 1, 1, 1, 1, 1, 1, 1, 1,
  3182. 1, 1, 458, 273, 274, 273, 273, 273,
  3183. 273, 273, 460, 1, 273, 273, 373, 273,
  3184. 433, 273, 273, 273, 273, 273, 273, 273,
  3185. 273, 273, 273, 273, 1, 374, 277, 273,
  3186. 1, 273, 461, 273, 273, 273, 273, 273,
  3187. 273, 273, 273, 273, 273, 273, 273, 273,
  3188. 273, 273, 273, 273, 273, 273, 273, 273,
  3189. 273, 273, 273, 273, 273, 1, 1, 1,
  3190. 273, 273, 273, 273, 273, 273, 273, 273,
  3191. 273, 273, 273, 273, 273, 273, 273, 273,
  3192. 273, 273, 273, 273, 273, 273, 273, 273,
  3193. 273, 273, 273, 273, 273, 273, 273, 273,
  3194. 273, 1, 1, 1, 1, 1, 1, 1,
  3195. 1, 1, 1, 1, 1, 1, 1, 1,
  3196. 1, 1, 1, 1, 1, 1, 1, 1,
  3197. 1, 1, 1, 1, 1, 1, 1, 1,
  3198. 1, 1, 1, 1, 1, 1, 1, 1,
  3199. 1, 1, 1, 1, 1, 1, 1, 1,
  3200. 1, 1, 1, 1, 1, 1, 1, 1,
  3201. 1, 1, 1, 1, 1, 1, 1, 1,
  3202. 1, 1, 1, 1, 278, 278, 278, 278,
  3203. 278, 278, 278, 278, 278, 278, 278, 278,
  3204. 278, 278, 278, 278, 278, 278, 278, 278,
  3205. 278, 278, 278, 278, 278, 278, 278, 278,
  3206. 278, 278, 279, 280, 280, 280, 280, 280,
  3207. 280, 280, 280, 280, 280, 280, 280, 281,
  3208. 280, 280, 282, 283, 283, 283, 284, 1,
  3209. 462, 1, 463, 1, 1, 1, 1, 1,
  3210. 1, 1, 1, 1, 1, 1, 1, 1,
  3211. 1, 1, 1, 1, 1, 1, 1, 1,
  3212. 1, 463, 1, 464, 1, 1, 1, 465,
  3213. 1, 1, 1, 1, 1, 1, 1, 1,
  3214. 1, 1, 1, 1, 1, 1, 1, 1,
  3215. 1, 1, 464, 466, 467, 466, 466, 466,
  3216. 466, 466, 468, 1, 466, 466, 469, 466,
  3217. 470, 466, 466, 466, 466, 466, 466, 466,
  3218. 466, 466, 466, 466, 1, 215, 471, 466,
  3219. 1, 466, 472, 466, 466, 466, 466, 466,
  3220. 466, 466, 466, 466, 466, 466, 466, 466,
  3221. 466, 466, 466, 466, 466, 466, 466, 466,
  3222. 466, 466, 466, 466, 466, 1, 1, 1,
  3223. 466, 466, 466, 466, 466, 466, 466, 466,
  3224. 466, 466, 466, 466, 466, 466, 466, 466,
  3225. 466, 466, 466, 466, 466, 466, 466, 466,
  3226. 466, 466, 466, 466, 466, 466, 466, 466,
  3227. 466, 1, 1, 1, 1, 1, 1, 1,
  3228. 1, 1, 1, 1, 1, 1, 1, 1,
  3229. 1, 1, 1, 1, 1, 1, 1, 1,
  3230. 1, 1, 1, 1, 1, 1, 1, 1,
  3231. 1, 1, 1, 1, 1, 1, 1, 1,
  3232. 1, 1, 1, 1, 1, 1, 1, 1,
  3233. 1, 1, 1, 1, 1, 1, 1, 1,
  3234. 1, 1, 1, 1, 1, 1, 1, 1,
  3235. 1, 1, 1, 1, 473, 473, 473, 473,
  3236. 473, 473, 473, 473, 473, 473, 473, 473,
  3237. 473, 473, 473, 473, 473, 473, 473, 473,
  3238. 473, 473, 473, 473, 473, 473, 473, 473,
  3239. 473, 473, 474, 475, 475, 475, 475, 475,
  3240. 475, 475, 475, 475, 475, 475, 475, 476,
  3241. 475, 475, 477, 478, 478, 478, 479, 1,
  3242. 480, 1, 1, 1, 481, 1, 1, 1,
  3243. 1, 1, 1, 1, 1, 1, 1, 1,
  3244. 1, 1, 1, 1, 1, 1, 1, 480,
  3245. 482, 483, 482, 482, 482, 482, 482, 484,
  3246. 1, 482, 482, 485, 482, 486, 482, 482,
  3247. 482, 482, 482, 482, 482, 482, 482, 482,
  3248. 482, 1, 232, 471, 482, 1, 482, 487,
  3249. 482, 482, 482, 482, 482, 482, 482, 482,
  3250. 482, 482, 482, 482, 482, 482, 482, 482,
  3251. 482, 482, 482, 482, 482, 482, 482, 482,
  3252. 482, 482, 1, 1, 1, 482, 482, 482,
  3253. 482, 482, 482, 482, 482, 482, 482, 482,
  3254. 482, 482, 482, 482, 482, 482, 482, 482,
  3255. 482, 482, 482, 482, 482, 482, 482, 482,
  3256. 482, 482, 482, 482, 482, 482, 1, 1,
  3257. 1, 1, 1, 1, 1, 1, 1, 1,
  3258. 1, 1, 1, 1, 1, 1, 1, 1,
  3259. 1, 1, 1, 1, 1, 1, 1, 1,
  3260. 1, 1, 1, 1, 1, 1, 1, 1,
  3261. 1, 1, 1, 1, 1, 1, 1, 1,
  3262. 1, 1, 1, 1, 1, 1, 1, 1,
  3263. 1, 1, 1, 1, 1, 1, 1, 1,
  3264. 1, 1, 1, 1, 1, 1, 1, 1,
  3265. 1, 488, 488, 488, 488, 488, 488, 488,
  3266. 488, 488, 488, 488, 488, 488, 488, 488,
  3267. 488, 488, 488, 488, 488, 488, 488, 488,
  3268. 488, 488, 488, 488, 488, 488, 488, 489,
  3269. 490, 490, 490, 490, 490, 490, 490, 490,
  3270. 490, 490, 490, 490, 491, 490, 490, 492,
  3271. 493, 493, 493, 494, 1, 495, 1, 496,
  3272. 1, 1, 1, 1, 1, 1, 1, 1,
  3273. 1, 1, 1, 1, 1, 1, 1, 1,
  3274. 1, 1, 1, 1, 1, 1, 496, 1,
  3275. 497, 1, 1, 1, 498, 1, 1, 1,
  3276. 1, 1, 1, 1, 1, 1, 1, 1,
  3277. 1, 1, 1, 1, 1, 1, 1, 497,
  3278. 482, 483, 482, 482, 482, 482, 482, 499,
  3279. 1, 482, 482, 1, 482, 500, 482, 482,
  3280. 482, 482, 482, 482, 482, 482, 482, 482,
  3281. 482, 1, 1, 471, 482, 1, 482, 500,
  3282. 482, 482, 482, 482, 482, 482, 482, 482,
  3283. 482, 482, 482, 482, 482, 482, 482, 482,
  3284. 482, 482, 482, 482, 482, 482, 482, 482,
  3285. 482, 482, 1, 1, 1, 482, 482, 482,
  3286. 482, 482, 482, 482, 482, 482, 482, 482,
  3287. 482, 482, 482, 482, 482, 482, 482, 482,
  3288. 482, 482, 482, 482, 482, 482, 482, 482,
  3289. 482, 482, 482, 482, 482, 482, 1, 1,
  3290. 1, 1, 1, 1, 1, 1, 1, 1,
  3291. 1, 1, 1, 1, 1, 1, 1, 1,
  3292. 1, 1, 1, 1, 1, 1, 1, 1,
  3293. 1, 1, 1, 1, 1, 1, 1, 1,
  3294. 1, 1, 1, 1, 1, 1, 1, 1,
  3295. 1, 1, 1, 1, 1, 1, 1, 1,
  3296. 1, 1, 1, 1, 1, 1, 1, 1,
  3297. 1, 1, 1, 1, 1, 1, 1, 1,
  3298. 1, 488, 488, 488, 488, 488, 488, 488,
  3299. 488, 488, 488, 488, 488, 488, 488, 488,
  3300. 488, 488, 488, 488, 488, 488, 488, 488,
  3301. 488, 488, 488, 488, 488, 488, 488, 489,
  3302. 490, 490, 490, 490, 490, 490, 490, 490,
  3303. 490, 490, 490, 490, 491, 490, 490, 492,
  3304. 493, 493, 493, 494, 1, 501, 1, 482,
  3305. 1, 1, 1, 1, 1, 1, 1, 1,
  3306. 1, 1, 1, 1, 1, 1, 1, 1,
  3307. 1, 1, 1, 1, 1, 1, 482, 1,
  3308. 502, 502, 502, 502, 502, 502, 502, 502,
  3309. 502, 1, 502, 502, 503, 502, 502, 502,
  3310. 502, 502, 502, 502, 502, 502, 502, 502,
  3311. 502, 502, 502, 502, 502, 502, 502, 502,
  3312. 502, 504, 502, 502, 502, 502, 502, 502,
  3313. 502, 502, 502, 502, 502, 502, 502, 502,
  3314. 502, 502, 502, 502, 502, 502, 502, 502,
  3315. 502, 502, 502, 502, 502, 502, 502, 502,
  3316. 502, 502, 502, 502, 502, 502, 502, 502,
  3317. 502, 502, 502, 502, 502, 502, 502, 502,
  3318. 502, 502, 502, 502, 502, 502, 502, 502,
  3319. 502, 502, 502, 505, 502, 502, 502, 502,
  3320. 502, 502, 502, 502, 502, 502, 502, 502,
  3321. 502, 502, 502, 502, 502, 502, 502, 502,
  3322. 502, 502, 502, 502, 502, 502, 502, 502,
  3323. 502, 502, 502, 502, 502, 502, 502, 1,
  3324. 1, 1, 1, 1, 1, 1, 1, 1,
  3325. 1, 1, 1, 1, 1, 1, 1, 1,
  3326. 1, 1, 1, 1, 1, 1, 1, 1,
  3327. 1, 1, 1, 1, 1, 1, 1, 1,
  3328. 1, 1, 1, 1, 1, 1, 1, 1,
  3329. 1, 1, 1, 1, 1, 1, 1, 1,
  3330. 1, 1, 1, 1, 1, 1, 1, 1,
  3331. 1, 1, 1, 1, 1, 1, 1, 1,
  3332. 1, 506, 506, 506, 506, 506, 506, 506,
  3333. 506, 506, 506, 506, 506, 506, 506, 506,
  3334. 506, 506, 506, 506, 506, 506, 506, 506,
  3335. 506, 506, 506, 506, 506, 506, 506, 507,
  3336. 508, 508, 508, 508, 508, 508, 508, 508,
  3337. 508, 508, 508, 508, 509, 508, 508, 510,
  3338. 511, 511, 511, 512, 1, 513, 513, 513,
  3339. 513, 513, 513, 513, 513, 513, 1, 513,
  3340. 513, 514, 513, 513, 513, 513, 513, 513,
  3341. 513, 513, 513, 513, 513, 513, 513, 513,
  3342. 513, 513, 513, 513, 513, 513, 515, 513,
  3343. 513, 513, 513, 513, 513, 513, 513, 513,
  3344. 513, 513, 513, 513, 513, 513, 513, 513,
  3345. 513, 513, 513, 513, 513, 513, 513, 513,
  3346. 513, 513, 513, 513, 513, 513, 513, 513,
  3347. 513, 513, 513, 513, 513, 513, 513, 513,
  3348. 513, 513, 513, 513, 513, 513, 513, 513,
  3349. 513, 513, 513, 513, 513, 513, 513, 513,
  3350. 516, 513, 513, 513, 513, 513, 513, 513,
  3351. 513, 513, 513, 513, 513, 513, 513, 513,
  3352. 513, 513, 513, 513, 513, 513, 513, 513,
  3353. 513, 513, 513, 513, 513, 513, 513, 513,
  3354. 513, 513, 513, 513, 1, 1, 1, 1,
  3355. 1, 1, 1, 1, 1, 1, 1, 1,
  3356. 1, 1, 1, 1, 1, 1, 1, 1,
  3357. 1, 1, 1, 1, 1, 1, 1, 1,
  3358. 1, 1, 1, 1, 1, 1, 1, 1,
  3359. 1, 1, 1, 1, 1, 1, 1, 1,
  3360. 1, 1, 1, 1, 1, 1, 1, 1,
  3361. 1, 1, 1, 1, 1, 1, 1, 1,
  3362. 1, 1, 1, 1, 1, 1, 517, 517,
  3363. 517, 517, 517, 517, 517, 517, 517, 517,
  3364. 517, 517, 517, 517, 517, 517, 517, 517,
  3365. 517, 517, 517, 517, 517, 517, 517, 517,
  3366. 517, 517, 517, 517, 518, 519, 519, 519,
  3367. 519, 519, 519, 519, 519, 519, 519, 519,
  3368. 519, 520, 519, 519, 521, 522, 522, 522,
  3369. 523, 1, 524, 1, 513, 1, 1, 1,
  3370. 1, 1, 1, 1, 1, 1, 1, 1,
  3371. 1, 1, 1, 1, 1, 1, 1, 1,
  3372. 1, 1, 1, 513, 1, 513, 513, 513,
  3373. 513, 513, 513, 513, 513, 513, 513, 513,
  3374. 513, 513, 513, 513, 513, 513, 513, 513,
  3375. 513, 513, 513, 513, 513, 513, 513, 513,
  3376. 513, 513, 513, 513, 513, 513, 513, 513,
  3377. 513, 513, 513, 513, 513, 513, 513, 513,
  3378. 513, 513, 513, 513, 513, 513, 513, 513,
  3379. 513, 513, 513, 513, 513, 513, 513, 513,
  3380. 513, 513, 513, 513, 513, 513, 513, 513,
  3381. 513, 513, 513, 513, 513, 513, 513, 513,
  3382. 513, 513, 513, 513, 513, 513, 513, 513,
  3383. 513, 513, 513, 513, 513, 513, 513, 513,
  3384. 513, 513, 513, 513, 513, 513, 513, 513,
  3385. 513, 513, 513, 513, 513, 513, 513, 513,
  3386. 513, 513, 513, 513, 513, 513, 513, 513,
  3387. 513, 513, 513, 513, 513, 513, 513, 513,
  3388. 513, 513, 513, 513, 513, 1, 1, 1,
  3389. 1, 1, 1, 1, 1, 1, 1, 1,
  3390. 1, 1, 1, 1, 1, 1, 1, 1,
  3391. 1, 1, 1, 1, 1, 1, 1, 1,
  3392. 1, 1, 1, 1, 1, 1, 1, 1,
  3393. 1, 1, 1, 1, 1, 1, 1, 1,
  3394. 1, 1, 1, 1, 1, 1, 1, 1,
  3395. 1, 1, 1, 1, 1, 1, 1, 1,
  3396. 1, 1, 1, 1, 1, 1, 1, 517,
  3397. 517, 517, 517, 517, 517, 517, 517, 517,
  3398. 517, 517, 517, 517, 517, 517, 517, 517,
  3399. 517, 517, 517, 517, 517, 517, 517, 517,
  3400. 517, 517, 517, 517, 517, 518, 519, 519,
  3401. 519, 519, 519, 519, 519, 519, 519, 519,
  3402. 519, 519, 520, 519, 519, 521, 522, 522,
  3403. 522, 523, 1, 513, 513, 513, 513, 513,
  3404. 513, 513, 513, 513, 513, 513, 513, 513,
  3405. 513, 513, 513, 513, 513, 513, 513, 513,
  3406. 513, 513, 513, 513, 513, 513, 513, 513,
  3407. 513, 513, 513, 513, 513, 513, 513, 513,
  3408. 513, 513, 513, 513, 513, 513, 513, 513,
  3409. 513, 513, 513, 513, 513, 513, 513, 513,
  3410. 513, 513, 513, 513, 513, 513, 513, 513,
  3411. 513, 513, 513, 1, 517, 517, 517, 517,
  3412. 517, 517, 517, 517, 517, 517, 517, 517,
  3413. 517, 517, 517, 517, 517, 517, 517, 517,
  3414. 517, 517, 517, 517, 517, 517, 517, 517,
  3415. 517, 517, 517, 517, 1, 517, 517, 517,
  3416. 517, 517, 517, 517, 517, 517, 517, 517,
  3417. 517, 517, 517, 517, 517, 517, 517, 517,
  3418. 517, 517, 517, 517, 517, 517, 517, 517,
  3419. 517, 517, 517, 517, 517, 517, 517, 517,
  3420. 517, 517, 517, 517, 517, 517, 517, 517,
  3421. 517, 517, 517, 517, 517, 517, 517, 517,
  3422. 517, 517, 517, 517, 517, 517, 517, 517,
  3423. 517, 517, 517, 517, 517, 1, 517, 517,
  3424. 517, 517, 517, 517, 517, 517, 517, 517,
  3425. 517, 517, 517, 517, 517, 517, 517, 517,
  3426. 517, 517, 517, 517, 517, 517, 517, 517,
  3427. 517, 517, 517, 517, 517, 517, 1, 519,
  3428. 519, 519, 519, 519, 519, 519, 519, 519,
  3429. 519, 519, 519, 519, 519, 519, 519, 519,
  3430. 519, 519, 519, 519, 519, 519, 519, 519,
  3431. 519, 519, 519, 519, 519, 519, 519, 519,
  3432. 519, 519, 519, 519, 519, 519, 519, 519,
  3433. 519, 519, 519, 519, 519, 519, 519, 1,
  3434. 519, 519, 519, 519, 519, 519, 519, 519,
  3435. 519, 519, 519, 519, 519, 519, 519, 519,
  3436. 519, 519, 519, 519, 519, 519, 519, 519,
  3437. 519, 519, 519, 519, 519, 519, 519, 519,
  3438. 519, 519, 519, 519, 519, 519, 519, 519,
  3439. 519, 519, 519, 519, 519, 519, 519, 519,
  3440. 519, 519, 519, 519, 519, 519, 519, 519,
  3441. 519, 519, 519, 519, 519, 519, 519, 519,
  3442. 1, 519, 519, 519, 519, 519, 519, 519,
  3443. 519, 519, 519, 519, 519, 519, 519, 519,
  3444. 519, 1, 525, 1, 1, 1, 526, 1,
  3445. 1, 1, 1, 1, 1, 1, 1, 1,
  3446. 1, 1, 1, 1, 1, 1, 1, 1,
  3447. 1, 525, 527, 528, 527, 527, 527, 527,
  3448. 527, 529, 1, 527, 527, 1, 527, 530,
  3449. 527, 527, 527, 527, 527, 527, 527, 527,
  3450. 527, 527, 527, 1, 1, 531, 527, 1,
  3451. 527, 530, 527, 527, 527, 527, 527, 527,
  3452. 527, 527, 527, 527, 527, 527, 527, 527,
  3453. 527, 527, 527, 527, 527, 527, 527, 527,
  3454. 527, 527, 527, 527, 1, 1, 1, 527,
  3455. 527, 527, 527, 527, 527, 527, 527, 527,
  3456. 527, 527, 527, 527, 527, 527, 527, 527,
  3457. 527, 527, 527, 527, 527, 527, 527, 527,
  3458. 527, 527, 527, 527, 527, 527, 527, 527,
  3459. 1, 1, 1, 1, 1, 1, 1, 1,
  3460. 1, 1, 1, 1, 1, 1, 1, 1,
  3461. 1, 1, 1, 1, 1, 1, 1, 1,
  3462. 1, 1, 1, 1, 1, 1, 1, 1,
  3463. 1, 1, 1, 1, 1, 1, 1, 1,
  3464. 1, 1, 1, 1, 1, 1, 1, 1,
  3465. 1, 1, 1, 1, 1, 1, 1, 1,
  3466. 1, 1, 1, 1, 1, 1, 1, 1,
  3467. 1, 1, 1, 532, 532, 532, 532, 532,
  3468. 532, 532, 532, 532, 532, 532, 532, 532,
  3469. 532, 532, 532, 532, 532, 532, 532, 532,
  3470. 532, 532, 532, 532, 532, 532, 532, 532,
  3471. 532, 533, 534, 534, 534, 534, 534, 534,
  3472. 534, 534, 534, 534, 534, 534, 535, 534,
  3473. 534, 536, 537, 537, 537, 538, 1, 539,
  3474. 1, 1, 1, 540, 1, 1, 1, 1,
  3475. 1, 1, 1, 1, 1, 1, 1, 1,
  3476. 1, 1, 1, 1, 1, 1, 539, 482,
  3477. 483, 482, 482, 482, 482, 482, 541, 1,
  3478. 482, 482, 1, 482, 500, 482, 482, 482,
  3479. 482, 482, 482, 482, 482, 482, 482, 482,
  3480. 1, 1, 471, 482, 1, 482, 500, 482,
  3481. 482, 482, 482, 482, 482, 482, 482, 482,
  3482. 482, 482, 482, 482, 482, 482, 482, 482,
  3483. 482, 482, 482, 482, 482, 482, 482, 482,
  3484. 482, 1, 1, 1, 482, 482, 482, 482,
  3485. 482, 482, 482, 482, 482, 482, 482, 482,
  3486. 482, 482, 482, 482, 482, 482, 482, 482,
  3487. 482, 482, 482, 482, 482, 482, 482, 482,
  3488. 482, 482, 482, 482, 482, 1, 1, 1,
  3489. 1, 1, 1, 1, 1, 1, 1, 1,
  3490. 1, 1, 1, 1, 1, 1, 1, 1,
  3491. 1, 1, 1, 1, 1, 1, 1, 1,
  3492. 1, 1, 1, 1, 1, 1, 1, 1,
  3493. 1, 1, 1, 1, 1, 1, 1, 1,
  3494. 1, 1, 1, 1, 1, 1, 1, 1,
  3495. 1, 1, 1, 1, 1, 1, 1, 1,
  3496. 1, 1, 1, 1, 1, 1, 1, 1,
  3497. 488, 488, 488, 488, 488, 488, 488, 488,
  3498. 488, 488, 488, 488, 488, 488, 488, 488,
  3499. 488, 488, 488, 488, 488, 488, 488, 488,
  3500. 488, 488, 488, 488, 488, 488, 489, 490,
  3501. 490, 490, 490, 490, 490, 490, 490, 490,
  3502. 490, 490, 490, 491, 490, 490, 492, 493,
  3503. 493, 493, 494, 1, 542, 1, 1, 1,
  3504. 543, 1, 1, 1, 1, 1, 1, 1,
  3505. 1, 1, 1, 1, 1, 1, 1, 1,
  3506. 1, 1, 1, 542, 482, 483, 482, 482,
  3507. 482, 482, 482, 544, 1, 482, 482, 1,
  3508. 482, 1, 482, 482, 482, 482, 482, 482,
  3509. 482, 482, 482, 482, 482, 1, 1, 545,
  3510. 482, 1, 482, 1, 482, 482, 482, 482,
  3511. 482, 482, 482, 482, 482, 482, 482, 482,
  3512. 482, 482, 482, 482, 482, 482, 482, 482,
  3513. 482, 482, 482, 482, 482, 482, 1, 1,
  3514. 1, 482, 482, 482, 482, 482, 482, 482,
  3515. 482, 482, 482, 482, 482, 482, 482, 482,
  3516. 482, 482, 482, 482, 482, 482, 482, 482,
  3517. 482, 482, 482, 482, 482, 482, 482, 482,
  3518. 482, 482, 1, 1, 1, 1, 1, 1,
  3519. 1, 1, 1, 1, 1, 1, 1, 1,
  3520. 1, 1, 1, 1, 1, 1, 1, 1,
  3521. 1, 1, 1, 1, 1, 1, 1, 1,
  3522. 1, 1, 1, 1, 1, 1, 1, 1,
  3523. 1, 1, 1, 1, 1, 1, 1, 1,
  3524. 1, 1, 1, 1, 1, 1, 1, 1,
  3525. 1, 1, 1, 1, 1, 1, 1, 1,
  3526. 1, 1, 1, 1, 1, 488, 488, 488,
  3527. 488, 488, 488, 488, 488, 488, 488, 488,
  3528. 488, 488, 488, 488, 488, 488, 488, 488,
  3529. 488, 488, 488, 488, 488, 488, 488, 488,
  3530. 488, 488, 488, 489, 490, 490, 490, 490,
  3531. 490, 490, 490, 490, 490, 490, 490, 490,
  3532. 491, 490, 490, 492, 493, 493, 493, 494,
  3533. 1, 546, 1, 542, 1, 1, 1, 1,
  3534. 1, 1, 1, 1, 1, 1, 1, 1,
  3535. 1, 1, 1, 1, 1, 1, 1, 1,
  3536. 1, 1, 542, 1, 547, 1, 1, 1,
  3537. 548, 1, 1, 1, 1, 1, 1, 1,
  3538. 1, 1, 1, 1, 1, 1, 1, 1,
  3539. 1, 1, 1, 547, 527, 528, 527, 527,
  3540. 527, 527, 527, 549, 1, 527, 527, 1,
  3541. 527, 1, 527, 527, 527, 527, 527, 527,
  3542. 527, 527, 527, 527, 527, 1, 1, 550,
  3543. 527, 1, 527, 1, 527, 527, 527, 527,
  3544. 527, 527, 527, 527, 527, 527, 527, 527,
  3545. 527, 527, 527, 527, 527, 527, 527, 527,
  3546. 527, 527, 527, 527, 527, 527, 1, 1,
  3547. 1, 527, 527, 527, 527, 527, 527, 527,
  3548. 527, 527, 527, 527, 527, 527, 527, 527,
  3549. 527, 527, 527, 527, 527, 527, 527, 527,
  3550. 527, 527, 527, 527, 527, 527, 527, 527,
  3551. 527, 527, 1, 1, 1, 1, 1, 1,
  3552. 1, 1, 1, 1, 1, 1, 1, 1,
  3553. 1, 1, 1, 1, 1, 1, 1, 1,
  3554. 1, 1, 1, 1, 1, 1, 1, 1,
  3555. 1, 1, 1, 1, 1, 1, 1, 1,
  3556. 1, 1, 1, 1, 1, 1, 1, 1,
  3557. 1, 1, 1, 1, 1, 1, 1, 1,
  3558. 1, 1, 1, 1, 1, 1, 1, 1,
  3559. 1, 1, 1, 1, 1, 532, 532, 532,
  3560. 532, 532, 532, 532, 532, 532, 532, 532,
  3561. 532, 532, 532, 532, 532, 532, 532, 532,
  3562. 532, 532, 532, 532, 532, 532, 532, 532,
  3563. 532, 532, 532, 533, 534, 534, 534, 534,
  3564. 534, 534, 534, 534, 534, 534, 534, 534,
  3565. 535, 534, 534, 536, 537, 537, 537, 538,
  3566. 1, 551, 1, 1, 1, 552, 1, 1,
  3567. 1, 1, 1, 1, 1, 1, 1, 1,
  3568. 1, 1, 1, 1, 1, 1, 1, 1,
  3569. 551, 553, 554, 553, 553, 553, 553, 553,
  3570. 555, 1, 553, 553, 556, 553, 557, 553,
  3571. 553, 553, 553, 553, 553, 553, 553, 553,
  3572. 553, 553, 1, 1, 1, 553, 1, 553,
  3573. 558, 553, 553, 553, 553, 553, 553, 553,
  3574. 553, 553, 553, 553, 553, 553, 553, 553,
  3575. 553, 553, 553, 553, 553, 553, 553, 553,
  3576. 553, 553, 553, 1, 1, 1, 553, 553,
  3577. 553, 553, 553, 553, 553, 553, 553, 553,
  3578. 553, 553, 553, 553, 553, 553, 553, 553,
  3579. 553, 553, 553, 553, 553, 553, 553, 553,
  3580. 553, 553, 553, 553, 553, 553, 553, 1,
  3581. 1, 1, 1, 1, 1, 1, 1, 1,
  3582. 1, 1, 1, 1, 1, 1, 1, 1,
  3583. 1, 1, 1, 1, 1, 1, 1, 1,
  3584. 1, 1, 1, 1, 1, 1, 1, 1,
  3585. 1, 1, 1, 1, 1, 1, 1, 1,
  3586. 1, 1, 1, 1, 1, 1, 1, 1,
  3587. 1, 1, 1, 1, 1, 1, 1, 1,
  3588. 1, 1, 1, 1, 1, 1, 1, 1,
  3589. 1, 1, 559, 559, 559, 559, 559, 559,
  3590. 559, 559, 559, 559, 559, 559, 559, 559,
  3591. 559, 559, 559, 559, 559, 559, 559, 559,
  3592. 559, 559, 559, 559, 559, 559, 559, 559,
  3593. 560, 561, 561, 561, 561, 561, 561, 561,
  3594. 561, 561, 561, 561, 561, 562, 561, 561,
  3595. 563, 564, 564, 564, 565, 1, 566, 1,
  3596. 1, 1, 567, 1, 1, 1, 1, 1,
  3597. 1, 1, 1, 1, 1, 1, 1, 1,
  3598. 1, 1, 1, 1, 1, 566, 553, 554,
  3599. 553, 553, 553, 553, 553, 568, 1, 553,
  3600. 553, 569, 553, 557, 553, 553, 553, 553,
  3601. 553, 553, 553, 553, 553, 553, 553, 1,
  3602. 1, 1, 553, 1, 553, 570, 553, 553,
  3603. 553, 553, 553, 553, 553, 553, 553, 553,
  3604. 553, 553, 553, 553, 553, 553, 553, 553,
  3605. 553, 553, 553, 553, 553, 553, 553, 553,
  3606. 1, 1, 1, 553, 553, 553, 553, 553,
  3607. 553, 553, 553, 553, 553, 553, 553, 553,
  3608. 553, 553, 553, 553, 553, 553, 553, 553,
  3609. 553, 553, 553, 553, 553, 553, 553, 553,
  3610. 553, 553, 553, 553, 1, 1, 1, 1,
  3611. 1, 1, 1, 1, 1, 1, 1, 1,
  3612. 1, 1, 1, 1, 1, 1, 1, 1,
  3613. 1, 1, 1, 1, 1, 1, 1, 1,
  3614. 1, 1, 1, 1, 1, 1, 1, 1,
  3615. 1, 1, 1, 1, 1, 1, 1, 1,
  3616. 1, 1, 1, 1, 1, 1, 1, 1,
  3617. 1, 1, 1, 1, 1, 1, 1, 1,
  3618. 1, 1, 1, 1, 1, 1, 1, 559,
  3619. 559, 559, 559, 559, 559, 559, 559, 559,
  3620. 559, 559, 559, 559, 559, 559, 559, 559,
  3621. 559, 559, 559, 559, 559, 559, 559, 559,
  3622. 559, 559, 559, 559, 559, 560, 561, 561,
  3623. 561, 561, 561, 561, 561, 561, 561, 561,
  3624. 561, 561, 562, 561, 561, 563, 564, 564,
  3625. 564, 565, 1, 571, 1, 566, 1, 1,
  3626. 1, 1, 1, 1, 1, 1, 1, 1,
  3627. 1, 1, 1, 1, 1, 1, 1, 1,
  3628. 1, 1, 1, 1, 566, 1, 572, 1,
  3629. 1, 1, 573, 1, 1, 1, 1, 1,
  3630. 1, 1, 1, 1, 1, 1, 1, 1,
  3631. 1, 1, 1, 1, 1, 572, 574, 575,
  3632. 574, 574, 574, 574, 574, 576, 1, 574,
  3633. 574, 1, 574, 577, 574, 574, 574, 574,
  3634. 574, 574, 574, 574, 574, 574, 574, 1,
  3635. 1, 1, 574, 578, 574, 579, 574, 574,
  3636. 574, 574, 574, 574, 574, 574, 574, 574,
  3637. 574, 574, 574, 574, 574, 574, 574, 574,
  3638. 574, 574, 574, 574, 574, 574, 574, 574,
  3639. 1, 1, 1, 574, 574, 574, 574, 574,
  3640. 574, 574, 574, 574, 574, 574, 574, 574,
  3641. 574, 574, 574, 574, 574, 574, 574, 574,
  3642. 574, 574, 574, 574, 574, 574, 574, 574,
  3643. 574, 574, 574, 574, 1, 1, 1, 1,
  3644. 1, 1, 1, 1, 1, 1, 1, 1,
  3645. 1, 1, 1, 1, 1, 1, 1, 1,
  3646. 1, 1, 1, 1, 1, 1, 1, 1,
  3647. 1, 1, 1, 1, 1, 1, 1, 1,
  3648. 1, 1, 1, 1, 1, 1, 1, 1,
  3649. 1, 1, 1, 1, 1, 1, 1, 1,
  3650. 1, 1, 1, 1, 1, 1, 1, 1,
  3651. 1, 1, 1, 1, 1, 1, 1, 580,
  3652. 580, 580, 580, 580, 580, 580, 580, 580,
  3653. 580, 580, 580, 580, 580, 580, 580, 580,
  3654. 580, 580, 580, 580, 580, 580, 580, 580,
  3655. 580, 580, 580, 580, 580, 581, 582, 582,
  3656. 582, 582, 582, 582, 582, 582, 582, 582,
  3657. 582, 582, 583, 582, 582, 584, 585, 585,
  3658. 585, 586, 1, 587, 1, 1, 1, 588,
  3659. 1, 1, 1, 1, 1, 1, 1, 1,
  3660. 1, 1, 1, 1, 1, 1, 1, 1,
  3661. 1, 1, 587, 1, 1, 1, 1, 1,
  3662. 1, 1, 589, 1, 1, 1, 1, 1,
  3663. 590, 1, 1, 1, 1, 1, 1, 1,
  3664. 1, 1, 1, 1, 1, 1, 1, 1,
  3665. 591, 1, 592, 1, 593, 1, 587, 1,
  3666. 1, 1, 1, 1, 1, 1, 1, 1,
  3667. 1, 1, 1, 1, 1, 1, 1, 1,
  3668. 1, 1, 1, 1, 1, 587, 1, 594,
  3669. 1, 1, 1, 595, 1, 1, 1, 1,
  3670. 1, 1, 1, 1, 1, 1, 1, 1,
  3671. 1, 1, 1, 1, 1, 1, 594, 1,
  3672. 1, 1, 1, 1, 1, 1, 596, 1,
  3673. 1, 1, 1, 1, 597, 1, 1, 1,
  3674. 1, 1, 1, 1, 1, 1, 1, 1,
  3675. 1, 1, 1, 1, 598, 1, 599, 1,
  3676. 590, 1, 1, 1, 600, 1, 1, 1,
  3677. 1, 1, 1, 1, 1, 1, 1, 1,
  3678. 1, 1, 1, 1, 1, 1, 1, 590,
  3679. 601, 602, 601, 601, 601, 601, 601, 603,
  3680. 1, 601, 601, 1, 601, 1, 601, 601,
  3681. 601, 601, 601, 601, 601, 601, 601, 601,
  3682. 601, 1, 1, 1, 601, 1, 601, 1,
  3683. 601, 601, 601, 601, 601, 601, 601, 601,
  3684. 601, 601, 601, 601, 601, 601, 601, 601,
  3685. 601, 601, 601, 601, 601, 601, 601, 601,
  3686. 601, 601, 1, 1, 1, 601, 601, 601,
  3687. 601, 601, 601, 601, 601, 601, 601, 601,
  3688. 601, 601, 601, 601, 601, 601, 601, 601,
  3689. 601, 601, 601, 601, 601, 601, 601, 601,
  3690. 601, 601, 601, 601, 601, 601, 1, 1,
  3691. 1, 1, 1, 1, 1, 1, 1, 1,
  3692. 1, 1, 1, 1, 1, 1, 1, 1,
  3693. 1, 1, 1, 1, 1, 1, 1, 1,
  3694. 1, 1, 1, 1, 1, 1, 1, 1,
  3695. 1, 1, 1, 1, 1, 1, 1, 1,
  3696. 1, 1, 1, 1, 1, 1, 1, 1,
  3697. 1, 1, 1, 1, 1, 1, 1, 1,
  3698. 1, 1, 1, 1, 1, 1, 1, 1,
  3699. 1, 604, 604, 604, 604, 604, 604, 604,
  3700. 604, 604, 604, 604, 604, 604, 604, 604,
  3701. 604, 604, 604, 604, 604, 604, 604, 604,
  3702. 604, 604, 604, 604, 604, 604, 604, 605,
  3703. 606, 606, 606, 606, 606, 606, 606, 606,
  3704. 606, 606, 606, 606, 607, 606, 606, 608,
  3705. 609, 609, 609, 610, 1, 611, 1, 590,
  3706. 1, 1, 1, 1, 1, 1, 1, 1,
  3707. 1, 1, 1, 1, 1, 1, 1, 1,
  3708. 1, 1, 1, 1, 1, 1, 590, 1,
  3709. 612, 1, 1, 1, 613, 1, 1, 1,
  3710. 1, 1, 1, 1, 1, 1, 1, 1,
  3711. 1, 1, 1, 1, 1, 1, 1, 612,
  3712. 601, 1, 601, 601, 601, 601, 601, 614,
  3713. 1, 601, 601, 1, 601, 590, 601, 601,
  3714. 601, 601, 601, 601, 601, 601, 601, 601,
  3715. 601, 1, 1, 1, 601, 591, 601, 615,
  3716. 601, 601, 601, 601, 601, 601, 601, 601,
  3717. 601, 601, 601, 601, 601, 601, 601, 601,
  3718. 601, 601, 601, 601, 601, 601, 601, 601,
  3719. 601, 601, 1, 1, 1, 601, 601, 601,
  3720. 601, 601, 601, 601, 601, 601, 601, 601,
  3721. 601, 601, 601, 601, 601, 601, 601, 601,
  3722. 601, 601, 601, 601, 601, 601, 601, 601,
  3723. 601, 601, 601, 601, 601, 601, 1, 1,
  3724. 1, 1, 1, 1, 1, 1, 1, 1,
  3725. 1, 1, 1, 1, 1, 1, 1, 1,
  3726. 1, 1, 1, 1, 1, 1, 1, 1,
  3727. 1, 1, 1, 1, 1, 1, 1, 1,
  3728. 1, 1, 1, 1, 1, 1, 1, 1,
  3729. 1, 1, 1, 1, 1, 1, 1, 1,
  3730. 1, 1, 1, 1, 1, 1, 1, 1,
  3731. 1, 1, 1, 1, 1, 1, 1, 1,
  3732. 1, 604, 604, 604, 604, 604, 604, 604,
  3733. 604, 604, 604, 604, 604, 604, 604, 604,
  3734. 604, 604, 604, 604, 604, 604, 604, 604,
  3735. 604, 604, 604, 604, 604, 604, 604, 605,
  3736. 606, 606, 606, 606, 606, 606, 606, 606,
  3737. 606, 606, 606, 606, 607, 606, 606, 608,
  3738. 609, 609, 609, 610, 1, 612, 1, 1,
  3739. 1, 613, 1, 1, 1, 1, 1, 1,
  3740. 1, 1, 1, 1, 1, 1, 1, 1,
  3741. 1, 1, 1, 1, 612, 1, 1, 1,
  3742. 1, 1, 1, 1, 614, 1, 1, 1,
  3743. 1, 1, 590, 1, 1, 1, 1, 1,
  3744. 1, 1, 1, 1, 1, 1, 1, 1,
  3745. 1, 1, 591, 1, 615, 1, 616, 1,
  3746. 612, 1, 1, 1, 1, 1, 1, 1,
  3747. 1, 1, 1, 1, 1, 1, 1, 1,
  3748. 1, 1, 1, 1, 1, 1, 1, 612,
  3749. 1, 617, 1, 1, 1, 618, 1, 1,
  3750. 1, 1, 1, 1, 1, 1, 1, 1,
  3751. 1, 1, 1, 1, 1, 1, 1, 1,
  3752. 617, 1, 1, 1, 1, 1, 1, 1,
  3753. 619, 1, 1, 1, 1, 1, 597, 1,
  3754. 1, 1, 1, 1, 1, 1, 1, 1,
  3755. 1, 1, 1, 1, 1, 1, 598, 1,
  3756. 620, 1, 591, 1, 1, 1, 621, 1,
  3757. 1, 1, 1, 1, 1, 1, 1, 1,
  3758. 1, 1, 1, 1, 1, 1, 1, 1,
  3759. 1, 591, 1, 1, 1, 1, 1, 1,
  3760. 1, 622, 1, 1, 1, 623, 1, 1,
  3761. 1, 1, 1, 1, 1, 1, 1, 1,
  3762. 1, 1, 1, 1, 369, 1, 624, 1,
  3763. 591, 1, 1, 1, 1, 1, 1, 1,
  3764. 1, 1, 1, 1, 1, 1, 1, 1,
  3765. 1, 1, 1, 1, 1, 1, 1, 591,
  3766. 1, 598, 1, 1, 1, 625, 1, 1,
  3767. 1, 1, 1, 1, 1, 1, 1, 1,
  3768. 1, 1, 1, 1, 1, 1, 1, 1,
  3769. 598, 1, 1, 1, 1, 1, 1, 1,
  3770. 626, 1, 1, 1, 627, 1, 1, 1,
  3771. 1, 1, 1, 1, 1, 1, 1, 1,
  3772. 1, 1, 1, 374, 1, 628, 1, 1,
  3773. 1, 629, 1, 1, 1, 1, 1, 1,
  3774. 1, 1, 1, 1, 1, 1, 1, 1,
  3775. 1, 1, 1, 1, 628, 630, 631, 630,
  3776. 630, 630, 630, 630, 632, 1, 630, 630,
  3777. 1, 630, 633, 630, 630, 630, 630, 630,
  3778. 630, 630, 630, 630, 630, 630, 1, 1,
  3779. 634, 630, 1, 630, 635, 630, 630, 630,
  3780. 630, 630, 630, 630, 630, 630, 630, 630,
  3781. 630, 630, 630, 630, 630, 630, 630, 630,
  3782. 630, 630, 630, 630, 630, 630, 630, 1,
  3783. 1, 1, 630, 630, 630, 630, 630, 630,
  3784. 630, 630, 630, 630, 630, 630, 630, 630,
  3785. 630, 630, 630, 630, 630, 630, 630, 630,
  3786. 630, 630, 630, 630, 630, 630, 630, 630,
  3787. 630, 630, 630, 1, 1, 1, 1, 1,
  3788. 1, 1, 1, 1, 1, 1, 1, 1,
  3789. 1, 1, 1, 1, 1, 1, 1, 1,
  3790. 1, 1, 1, 1, 1, 1, 1, 1,
  3791. 1, 1, 1, 1, 1, 1, 1, 1,
  3792. 1, 1, 1, 1, 1, 1, 1, 1,
  3793. 1, 1, 1, 1, 1, 1, 1, 1,
  3794. 1, 1, 1, 1, 1, 1, 1, 1,
  3795. 1, 1, 1, 1, 1, 1, 636, 636,
  3796. 636, 636, 636, 636, 636, 636, 636, 636,
  3797. 636, 636, 636, 636, 636, 636, 636, 636,
  3798. 636, 636, 636, 636, 636, 636, 636, 636,
  3799. 636, 636, 636, 636, 637, 638, 638, 638,
  3800. 638, 638, 638, 638, 638, 638, 638, 638,
  3801. 638, 639, 638, 638, 640, 641, 641, 641,
  3802. 642, 1, 643, 1, 1, 1, 644, 1,
  3803. 1, 1, 1, 1, 1, 1, 1, 1,
  3804. 1, 1, 1, 1, 1, 1, 1, 1,
  3805. 1, 643, 645, 646, 645, 645, 645, 645,
  3806. 645, 647, 1, 645, 645, 1, 645, 648,
  3807. 645, 645, 645, 645, 645, 645, 645, 645,
  3808. 645, 645, 645, 1, 1, 545, 645, 1,
  3809. 645, 1, 645, 645, 645, 645, 645, 645,
  3810. 645, 645, 645, 645, 645, 645, 645, 645,
  3811. 645, 645, 645, 645, 645, 645, 645, 645,
  3812. 645, 645, 645, 645, 1, 1, 1, 645,
  3813. 645, 645, 645, 645, 645, 645, 645, 645,
  3814. 645, 645, 645, 645, 645, 645, 645, 645,
  3815. 645, 645, 645, 645, 645, 645, 645, 645,
  3816. 645, 645, 645, 645, 645, 645, 645, 645,
  3817. 1, 1, 1, 1, 1, 1, 1, 1,
  3818. 1, 1, 1, 1, 1, 1, 1, 1,
  3819. 1, 1, 1, 1, 1, 1, 1, 1,
  3820. 1, 1, 1, 1, 1, 1, 1, 1,
  3821. 1, 1, 1, 1, 1, 1, 1, 1,
  3822. 1, 1, 1, 1, 1, 1, 1, 1,
  3823. 1, 1, 1, 1, 1, 1, 1, 1,
  3824. 1, 1, 1, 1, 1, 1, 1, 1,
  3825. 1, 1, 1, 649, 649, 649, 649, 649,
  3826. 649, 649, 649, 649, 649, 649, 649, 649,
  3827. 649, 649, 649, 649, 649, 649, 649, 649,
  3828. 649, 649, 649, 649, 649, 649, 649, 649,
  3829. 649, 650, 651, 651, 651, 651, 651, 651,
  3830. 651, 651, 651, 651, 651, 651, 652, 651,
  3831. 651, 653, 654, 654, 654, 655, 1, 656,
  3832. 1, 643, 1, 1, 1, 1, 1, 1,
  3833. 1, 1, 1, 1, 1, 1, 1, 1,
  3834. 1, 1, 1, 1, 1, 1, 1, 1,
  3835. 643, 1, 657, 657, 657, 657, 657, 657,
  3836. 657, 657, 658, 1, 657, 657, 659, 657,
  3837. 657, 657, 657, 657, 657, 657, 657, 657,
  3838. 657, 657, 657, 657, 657, 657, 657, 657,
  3839. 657, 658, 657, 660, 657, 657, 657, 657,
  3840. 657, 657, 657, 657, 657, 657, 657, 657,
  3841. 657, 657, 657, 657, 657, 657, 657, 657,
  3842. 657, 657, 657, 657, 657, 657, 657, 657,
  3843. 657, 657, 657, 657, 657, 657, 657, 657,
  3844. 657, 657, 657, 657, 657, 657, 657, 657,
  3845. 657, 657, 657, 657, 657, 657, 657, 657,
  3846. 657, 657, 657, 657, 657, 661, 657, 657,
  3847. 657, 657, 657, 657, 657, 657, 657, 657,
  3848. 657, 657, 657, 657, 657, 657, 657, 657,
  3849. 657, 657, 657, 657, 657, 657, 657, 657,
  3850. 657, 657, 657, 657, 657, 657, 657, 657,
  3851. 657, 1, 1, 1, 1, 1, 1, 1,
  3852. 1, 1, 1, 1, 1, 1, 1, 1,
  3853. 1, 1, 1, 1, 1, 1, 1, 1,
  3854. 1, 1, 1, 1, 1, 1, 1, 1,
  3855. 1, 1, 1, 1, 1, 1, 1, 1,
  3856. 1, 1, 1, 1, 1, 1, 1, 1,
  3857. 1, 1, 1, 1, 1, 1, 1, 1,
  3858. 1, 1, 1, 1, 1, 1, 1, 1,
  3859. 1, 1, 1, 662, 662, 662, 662, 662,
  3860. 662, 662, 662, 662, 662, 662, 662, 662,
  3861. 662, 662, 662, 662, 662, 662, 662, 662,
  3862. 662, 662, 662, 662, 662, 662, 662, 662,
  3863. 662, 663, 664, 664, 664, 664, 664, 664,
  3864. 664, 664, 664, 664, 664, 664, 665, 664,
  3865. 664, 666, 667, 667, 667, 668, 1, 669,
  3866. 669, 669, 669, 669, 669, 669, 669, 669,
  3867. 1, 669, 669, 670, 669, 669, 669, 669,
  3868. 669, 669, 669, 669, 669, 669, 669, 669,
  3869. 669, 669, 669, 669, 669, 669, 669, 669,
  3870. 671, 669, 669, 669, 669, 669, 669, 669,
  3871. 669, 669, 669, 669, 669, 669, 669, 669,
  3872. 669, 669, 669, 669, 669, 669, 669, 669,
  3873. 669, 669, 669, 669, 669, 669, 669, 669,
  3874. 669, 669, 669, 669, 669, 669, 669, 669,
  3875. 669, 669, 669, 669, 669, 669, 669, 669,
  3876. 669, 669, 669, 669, 669, 669, 669, 669,
  3877. 669, 669, 672, 669, 669, 669, 669, 669,
  3878. 669, 669, 669, 669, 669, 669, 669, 669,
  3879. 669, 669, 669, 669, 669, 669, 669, 669,
  3880. 669, 669, 669, 669, 669, 669, 669, 669,
  3881. 669, 669, 669, 669, 669, 669, 1, 1,
  3882. 1, 1, 1, 1, 1, 1, 1, 1,
  3883. 1, 1, 1, 1, 1, 1, 1, 1,
  3884. 1, 1, 1, 1, 1, 1, 1, 1,
  3885. 1, 1, 1, 1, 1, 1, 1, 1,
  3886. 1, 1, 1, 1, 1, 1, 1, 1,
  3887. 1, 1, 1, 1, 1, 1, 1, 1,
  3888. 1, 1, 1, 1, 1, 1, 1, 1,
  3889. 1, 1, 1, 1, 1, 1, 1, 1,
  3890. 673, 673, 673, 673, 673, 673, 673, 673,
  3891. 673, 673, 673, 673, 673, 673, 673, 673,
  3892. 673, 673, 673, 673, 673, 673, 673, 673,
  3893. 673, 673, 673, 673, 673, 673, 674, 675,
  3894. 675, 675, 675, 675, 675, 675, 675, 675,
  3895. 675, 675, 675, 676, 675, 675, 677, 678,
  3896. 678, 678, 679, 1, 680, 1, 669, 1,
  3897. 1, 1, 1, 1, 1, 1, 1, 1,
  3898. 1, 1, 1, 1, 1, 1, 1, 1,
  3899. 1, 1, 1, 1, 1, 669, 1, 681,
  3900. 1, 1, 1, 682, 1, 1, 1, 1,
  3901. 1, 1, 1, 1, 1, 1, 1, 1,
  3902. 1, 1, 1, 1, 1, 1, 681, 683,
  3903. 467, 683, 683, 683, 683, 683, 684, 1,
  3904. 683, 683, 685, 683, 470, 683, 683, 683,
  3905. 683, 683, 683, 683, 683, 683, 683, 683,
  3906. 1, 412, 471, 683, 1, 683, 686, 683,
  3907. 683, 683, 683, 683, 683, 683, 683, 683,
  3908. 683, 683, 683, 683, 683, 683, 683, 683,
  3909. 683, 683, 683, 683, 683, 683, 683, 683,
  3910. 683, 1, 1, 1, 683, 683, 683, 683,
  3911. 683, 683, 683, 683, 683, 683, 683, 683,
  3912. 683, 683, 683, 683, 683, 683, 683, 683,
  3913. 683, 683, 683, 683, 683, 683, 683, 683,
  3914. 683, 683, 683, 683, 683, 1, 1, 1,
  3915. 1, 1, 1, 1, 1, 1, 1, 1,
  3916. 1, 1, 1, 1, 1, 1, 1, 1,
  3917. 1, 1, 1, 1, 1, 1, 1, 1,
  3918. 1, 1, 1, 1, 1, 1, 1, 1,
  3919. 1, 1, 1, 1, 1, 1, 1, 1,
  3920. 1, 1, 1, 1, 1, 1, 1, 1,
  3921. 1, 1, 1, 1, 1, 1, 1, 1,
  3922. 1, 1, 1, 1, 1, 1, 1, 1,
  3923. 687, 687, 687, 687, 687, 687, 687, 687,
  3924. 687, 687, 687, 687, 687, 687, 687, 687,
  3925. 687, 687, 687, 687, 687, 687, 687, 687,
  3926. 687, 687, 687, 687, 687, 687, 688, 689,
  3927. 689, 689, 689, 689, 689, 689, 689, 689,
  3928. 689, 689, 689, 690, 689, 689, 691, 692,
  3929. 692, 692, 693, 1, 694, 1, 1, 1,
  3930. 695, 1, 1, 1, 1, 1, 1, 1,
  3931. 1, 1, 1, 1, 1, 1, 1, 1,
  3932. 1, 1, 1, 694, 482, 483, 482, 482,
  3933. 482, 482, 482, 696, 1, 482, 482, 697,
  3934. 482, 486, 482, 482, 482, 482, 482, 482,
  3935. 482, 482, 482, 482, 482, 1, 425, 471,
  3936. 482, 1, 482, 698, 482, 482, 482, 482,
  3937. 482, 482, 482, 482, 482, 482, 482, 482,
  3938. 482, 482, 482, 482, 482, 482, 482, 482,
  3939. 482, 482, 482, 482, 482, 482, 1, 1,
  3940. 1, 482, 482, 482, 482, 482, 482, 482,
  3941. 482, 482, 482, 482, 482, 482, 482, 482,
  3942. 482, 482, 482, 482, 482, 482, 482, 482,
  3943. 482, 482, 482, 482, 482, 482, 482, 482,
  3944. 482, 482, 1, 1, 1, 1, 1, 1,
  3945. 1, 1, 1, 1, 1, 1, 1, 1,
  3946. 1, 1, 1, 1, 1, 1, 1, 1,
  3947. 1, 1, 1, 1, 1, 1, 1, 1,
  3948. 1, 1, 1, 1, 1, 1, 1, 1,
  3949. 1, 1, 1, 1, 1, 1, 1, 1,
  3950. 1, 1, 1, 1, 1, 1, 1, 1,
  3951. 1, 1, 1, 1, 1, 1, 1, 1,
  3952. 1, 1, 1, 1, 1, 488, 488, 488,
  3953. 488, 488, 488, 488, 488, 488, 488, 488,
  3954. 488, 488, 488, 488, 488, 488, 488, 488,
  3955. 488, 488, 488, 488, 488, 488, 488, 488,
  3956. 488, 488, 488, 489, 490, 490, 490, 490,
  3957. 490, 490, 490, 490, 490, 490, 490, 490,
  3958. 491, 490, 490, 492, 493, 493, 493, 494,
  3959. 1, 699, 1, 700, 1, 1, 1, 1,
  3960. 1, 1, 1, 1, 1, 1, 1, 1,
  3961. 1, 1, 1, 1, 1, 1, 1, 1,
  3962. 1, 1, 700, 1, 701, 1, 1, 1,
  3963. 702, 1, 1, 1, 1, 1, 1, 1,
  3964. 1, 1, 1, 1, 1, 1, 1, 1,
  3965. 1, 1, 1, 701, 527, 528, 527, 527,
  3966. 527, 527, 527, 703, 1, 527, 527, 704,
  3967. 527, 705, 527, 527, 527, 527, 527, 527,
  3968. 527, 527, 527, 527, 527, 1, 434, 531,
  3969. 527, 1, 527, 706, 527, 527, 527, 527,
  3970. 527, 527, 527, 527, 527, 527, 527, 527,
  3971. 527, 527, 527, 527, 527, 527, 527, 527,
  3972. 527, 527, 527, 527, 527, 527, 1, 1,
  3973. 1, 527, 527, 527, 527, 527, 527, 527,
  3974. 527, 527, 527, 527, 527, 527, 527, 527,
  3975. 527, 527, 527, 527, 527, 527, 527, 527,
  3976. 527, 527, 527, 527, 527, 527, 527, 527,
  3977. 527, 527, 1, 1, 1, 1, 1, 1,
  3978. 1, 1, 1, 1, 1, 1, 1, 1,
  3979. 1, 1, 1, 1, 1, 1, 1, 1,
  3980. 1, 1, 1, 1, 1, 1, 1, 1,
  3981. 1, 1, 1, 1, 1, 1, 1, 1,
  3982. 1, 1, 1, 1, 1, 1, 1, 1,
  3983. 1, 1, 1, 1, 1, 1, 1, 1,
  3984. 1, 1, 1, 1, 1, 1, 1, 1,
  3985. 1, 1, 1, 1, 1, 532, 532, 532,
  3986. 532, 532, 532, 532, 532, 532, 532, 532,
  3987. 532, 532, 532, 532, 532, 532, 532, 532,
  3988. 532, 532, 532, 532, 532, 532, 532, 532,
  3989. 532, 532, 532, 533, 534, 534, 534, 534,
  3990. 534, 534, 534, 534, 534, 534, 534, 534,
  3991. 535, 534, 534, 536, 537, 537, 537, 538,
  3992. 1, 707, 1, 1, 1, 708, 1, 1,
  3993. 1, 1, 1, 1, 1, 1, 1, 1,
  3994. 1, 1, 1, 1, 1, 1, 1, 1,
  3995. 707, 709, 710, 709, 709, 709, 709, 709,
  3996. 711, 1, 709, 709, 1, 709, 500, 709,
  3997. 709, 709, 709, 709, 709, 709, 709, 709,
  3998. 709, 709, 1, 1, 471, 709, 1, 709,
  3999. 500, 709, 709, 709, 709, 709, 709, 709,
  4000. 709, 709, 709, 709, 709, 709, 709, 709,
  4001. 709, 709, 709, 709, 709, 709, 709, 709,
  4002. 709, 709, 709, 1, 1, 1, 709, 709,
  4003. 709, 709, 709, 709, 709, 709, 709, 709,
  4004. 709, 709, 709, 709, 709, 709, 709, 709,
  4005. 709, 709, 709, 709, 709, 709, 709, 709,
  4006. 709, 709, 709, 709, 709, 709, 709, 1,
  4007. 1, 1, 1, 1, 1, 1, 1, 1,
  4008. 1, 1, 1, 1, 1, 1, 1, 1,
  4009. 1, 1, 1, 1, 1, 1, 1, 1,
  4010. 1, 1, 1, 1, 1, 1, 1, 1,
  4011. 1, 1, 1, 1, 1, 1, 1, 1,
  4012. 1, 1, 1, 1, 1, 1, 1, 1,
  4013. 1, 1, 1, 1, 1, 1, 1, 1,
  4014. 1, 1, 1, 1, 1, 1, 1, 1,
  4015. 1, 1, 712, 712, 712, 712, 712, 712,
  4016. 712, 712, 712, 712, 712, 712, 712, 712,
  4017. 712, 712, 712, 712, 712, 712, 712, 712,
  4018. 712, 712, 712, 712, 712, 712, 712, 712,
  4019. 713, 714, 714, 714, 714, 714, 714, 714,
  4020. 714, 714, 714, 714, 714, 715, 714, 714,
  4021. 716, 717, 717, 717, 718, 1, 719, 1,
  4022. 1, 1, 720, 1, 1, 1, 1, 1,
  4023. 1, 1, 1, 1, 1, 1, 1, 1,
  4024. 1, 1, 1, 1, 1, 719, 709, 710,
  4025. 709, 709, 709, 709, 709, 721, 1, 709,
  4026. 709, 1, 709, 1, 709, 709, 709, 709,
  4027. 709, 709, 709, 709, 709, 709, 709, 1,
  4028. 1, 545, 709, 1, 709, 1, 709, 709,
  4029. 709, 709, 709, 709, 709, 709, 709, 709,
  4030. 709, 709, 709, 709, 709, 709, 709, 709,
  4031. 709, 709, 709, 709, 709, 709, 709, 709,
  4032. 1, 1, 1, 709, 709, 709, 709, 709,
  4033. 709, 709, 709, 709, 709, 709, 709, 709,
  4034. 709, 709, 709, 709, 709, 709, 709, 709,
  4035. 709, 709, 709, 709, 709, 709, 709, 709,
  4036. 709, 709, 709, 709, 1, 1, 1, 1,
  4037. 1, 1, 1, 1, 1, 1, 1, 1,
  4038. 1, 1, 1, 1, 1, 1, 1, 1,
  4039. 1, 1, 1, 1, 1, 1, 1, 1,
  4040. 1, 1, 1, 1, 1, 1, 1, 1,
  4041. 1, 1, 1, 1, 1, 1, 1, 1,
  4042. 1, 1, 1, 1, 1, 1, 1, 1,
  4043. 1, 1, 1, 1, 1, 1, 1, 1,
  4044. 1, 1, 1, 1, 1, 1, 1, 712,
  4045. 712, 712, 712, 712, 712, 712, 712, 712,
  4046. 712, 712, 712, 712, 712, 712, 712, 712,
  4047. 712, 712, 712, 712, 712, 712, 712, 712,
  4048. 712, 712, 712, 712, 712, 713, 714, 714,
  4049. 714, 714, 714, 714, 714, 714, 714, 714,
  4050. 714, 714, 715, 714, 714, 716, 717, 717,
  4051. 717, 718, 1, 722, 1, 719, 1, 1,
  4052. 1, 1, 1, 1, 1, 1, 1, 1,
  4053. 1, 1, 1, 1, 1, 1, 1, 1,
  4054. 1, 1, 1, 1, 719, 1, 723, 1,
  4055. 1, 1, 724, 1, 1, 1, 1, 1,
  4056. 1, 1, 1, 1, 1, 1, 1, 1,
  4057. 1, 1, 1, 1, 1, 723, 709, 483,
  4058. 709, 709, 709, 709, 709, 725, 1, 709,
  4059. 709, 623, 709, 486, 709, 709, 709, 709,
  4060. 709, 709, 709, 709, 709, 709, 709, 1,
  4061. 369, 471, 709, 1, 709, 726, 709, 709,
  4062. 709, 709, 709, 709, 709, 709, 709, 709,
  4063. 709, 709, 709, 709, 709, 709, 709, 709,
  4064. 709, 709, 709, 709, 709, 709, 709, 709,
  4065. 1, 1, 1, 709, 709, 709, 709, 709,
  4066. 709, 709, 709, 709, 709, 709, 709, 709,
  4067. 709, 709, 709, 709, 709, 709, 709, 709,
  4068. 709, 709, 709, 709, 709, 709, 709, 709,
  4069. 709, 709, 709, 709, 1, 1, 1, 1,
  4070. 1, 1, 1, 1, 1, 1, 1, 1,
  4071. 1, 1, 1, 1, 1, 1, 1, 1,
  4072. 1, 1, 1, 1, 1, 1, 1, 1,
  4073. 1, 1, 1, 1, 1, 1, 1, 1,
  4074. 1, 1, 1, 1, 1, 1, 1, 1,
  4075. 1, 1, 1, 1, 1, 1, 1, 1,
  4076. 1, 1, 1, 1, 1, 1, 1, 1,
  4077. 1, 1, 1, 1, 1, 1, 1, 712,
  4078. 712, 712, 712, 712, 712, 712, 712, 712,
  4079. 712, 712, 712, 712, 712, 712, 712, 712,
  4080. 712, 712, 712, 712, 712, 712, 712, 712,
  4081. 712, 712, 712, 712, 712, 713, 714, 714,
  4082. 714, 714, 714, 714, 714, 714, 714, 714,
  4083. 714, 714, 715, 714, 714, 716, 717, 717,
  4084. 717, 718, 1, 723, 1, 1, 1, 724,
  4085. 1, 1, 1, 1, 1, 1, 1, 1,
  4086. 1, 1, 1, 1, 1, 1, 1, 1,
  4087. 1, 1, 723, 482, 483, 482, 482, 482,
  4088. 482, 482, 725, 1, 482, 482, 623, 482,
  4089. 486, 482, 482, 482, 482, 482, 482, 482,
  4090. 482, 482, 482, 482, 1, 369, 471, 482,
  4091. 1, 482, 726, 482, 482, 482, 482, 482,
  4092. 482, 482, 482, 482, 482, 482, 482, 482,
  4093. 482, 482, 482, 482, 482, 482, 482, 482,
  4094. 482, 482, 482, 482, 482, 1, 1, 1,
  4095. 482, 482, 482, 482, 482, 482, 482, 482,
  4096. 482, 482, 482, 482, 482, 482, 482, 482,
  4097. 482, 482, 482, 482, 482, 482, 482, 482,
  4098. 482, 482, 482, 482, 482, 482, 482, 482,
  4099. 482, 1, 1, 1, 1, 1, 1, 1,
  4100. 1, 1, 1, 1, 1, 1, 1, 1,
  4101. 1, 1, 1, 1, 1, 1, 1, 1,
  4102. 1, 1, 1, 1, 1, 1, 1, 1,
  4103. 1, 1, 1, 1, 1, 1, 1, 1,
  4104. 1, 1, 1, 1, 1, 1, 1, 1,
  4105. 1, 1, 1, 1, 1, 1, 1, 1,
  4106. 1, 1, 1, 1, 1, 1, 1, 1,
  4107. 1, 1, 1, 1, 488, 488, 488, 488,
  4108. 488, 488, 488, 488, 488, 488, 488, 488,
  4109. 488, 488, 488, 488, 488, 488, 488, 488,
  4110. 488, 488, 488, 488, 488, 488, 488, 488,
  4111. 488, 488, 489, 490, 490, 490, 490, 490,
  4112. 490, 490, 490, 490, 490, 490, 490, 491,
  4113. 490, 490, 492, 493, 493, 493, 494, 1,
  4114. 727, 1, 728, 1, 1, 1, 1, 1,
  4115. 1, 1, 1, 1, 1, 1, 1, 1,
  4116. 1, 1, 1, 1, 1, 1, 1, 1,
  4117. 1, 728, 1, 729, 1, 1, 1, 730,
  4118. 1, 1, 1, 1, 1, 1, 1, 1,
  4119. 1, 1, 1, 1, 1, 1, 1, 1,
  4120. 1, 1, 729, 527, 528, 527, 527, 527,
  4121. 527, 527, 731, 1, 527, 527, 627, 527,
  4122. 705, 527, 527, 527, 527, 527, 527, 527,
  4123. 527, 527, 527, 527, 1, 374, 531, 527,
  4124. 1, 527, 732, 527, 527, 527, 527, 527,
  4125. 527, 527, 527, 527, 527, 527, 527, 527,
  4126. 527, 527, 527, 527, 527, 527, 527, 527,
  4127. 527, 527, 527, 527, 527, 1, 1, 1,
  4128. 527, 527, 527, 527, 527, 527, 527, 527,
  4129. 527, 527, 527, 527, 527, 527, 527, 527,
  4130. 527, 527, 527, 527, 527, 527, 527, 527,
  4131. 527, 527, 527, 527, 527, 527, 527, 527,
  4132. 527, 1, 1, 1, 1, 1, 1, 1,
  4133. 1, 1, 1, 1, 1, 1, 1, 1,
  4134. 1, 1, 1, 1, 1, 1, 1, 1,
  4135. 1, 1, 1, 1, 1, 1, 1, 1,
  4136. 1, 1, 1, 1, 1, 1, 1, 1,
  4137. 1, 1, 1, 1, 1, 1, 1, 1,
  4138. 1, 1, 1, 1, 1, 1, 1, 1,
  4139. 1, 1, 1, 1, 1, 1, 1, 1,
  4140. 1, 1, 1, 1, 532, 532, 532, 532,
  4141. 532, 532, 532, 532, 532, 532, 532, 532,
  4142. 532, 532, 532, 532, 532, 532, 532, 532,
  4143. 532, 532, 532, 532, 532, 532, 532, 532,
  4144. 532, 532, 533, 534, 534, 534, 534, 534,
  4145. 534, 534, 534, 534, 534, 534, 534, 535,
  4146. 534, 534, 536, 537, 537, 537, 538, 1,
  4147. 733, 1, 1, 1, 734, 1, 1, 1,
  4148. 1, 1, 1, 1, 1, 1, 1, 1,
  4149. 1, 1, 1, 1, 1, 1, 1, 733,
  4150. 735, 736, 735, 735, 735, 735, 735, 737,
  4151. 1, 735, 735, 1, 735, 738, 735, 735,
  4152. 735, 735, 735, 735, 735, 735, 735, 735,
  4153. 735, 1, 1, 471, 735, 1, 735, 500,
  4154. 735, 735, 735, 735, 735, 735, 735, 735,
  4155. 735, 735, 735, 735, 735, 735, 735, 735,
  4156. 735, 735, 735, 735, 735, 735, 735, 735,
  4157. 735, 735, 739, 1, 1, 735, 735, 735,
  4158. 735, 735, 735, 735, 735, 735, 735, 735,
  4159. 735, 735, 735, 735, 735, 735, 735, 735,
  4160. 735, 735, 735, 735, 735, 735, 735, 735,
  4161. 735, 735, 735, 735, 735, 735, 1, 1,
  4162. 1, 1, 1, 1, 1, 1, 1, 1,
  4163. 1, 1, 1, 1, 1, 1, 1, 1,
  4164. 1, 1, 1, 1, 1, 1, 1, 1,
  4165. 1, 1, 1, 1, 1, 1, 1, 1,
  4166. 1, 1, 1, 1, 1, 1, 1, 1,
  4167. 1, 1, 1, 1, 1, 1, 1, 1,
  4168. 1, 1, 1, 1, 1, 1, 1, 1,
  4169. 1, 1, 1, 1, 1, 1, 1, 1,
  4170. 1, 740, 740, 740, 740, 740, 740, 740,
  4171. 740, 740, 740, 740, 740, 740, 740, 740,
  4172. 740, 740, 740, 740, 740, 740, 740, 740,
  4173. 740, 740, 740, 740, 740, 740, 740, 741,
  4174. 742, 742, 742, 742, 742, 742, 742, 742,
  4175. 742, 742, 742, 742, 743, 742, 742, 744,
  4176. 745, 745, 745, 746, 1, 747, 1, 1,
  4177. 1, 748, 1, 1, 1, 1, 1, 1,
  4178. 1, 1, 1, 1, 1, 1, 1, 1,
  4179. 1, 1, 1, 1, 747, 749, 750, 749,
  4180. 749, 749, 749, 749, 751, 1, 749, 749,
  4181. 1, 749, 752, 749, 749, 749, 749, 749,
  4182. 749, 749, 749, 749, 749, 749, 1, 1,
  4183. 545, 749, 1, 749, 1, 749, 749, 749,
  4184. 749, 749, 749, 749, 749, 749, 749, 749,
  4185. 749, 749, 749, 749, 749, 749, 749, 749,
  4186. 749, 749, 749, 749, 749, 749, 749, 753,
  4187. 1, 1, 749, 749, 749, 749, 749, 749,
  4188. 749, 749, 749, 749, 749, 749, 749, 749,
  4189. 749, 749, 749, 749, 749, 749, 749, 749,
  4190. 749, 749, 749, 749, 749, 749, 749, 749,
  4191. 749, 749, 749, 1, 1, 1, 1, 1,
  4192. 1, 1, 1, 1, 1, 1, 1, 1,
  4193. 1, 1, 1, 1, 1, 1, 1, 1,
  4194. 1, 1, 1, 1, 1, 1, 1, 1,
  4195. 1, 1, 1, 1, 1, 1, 1, 1,
  4196. 1, 1, 1, 1, 1, 1, 1, 1,
  4197. 1, 1, 1, 1, 1, 1, 1, 1,
  4198. 1, 1, 1, 1, 1, 1, 1, 1,
  4199. 1, 1, 1, 1, 1, 1, 754, 754,
  4200. 754, 754, 754, 754, 754, 754, 754, 754,
  4201. 754, 754, 754, 754, 754, 754, 754, 754,
  4202. 754, 754, 754, 754, 754, 754, 754, 754,
  4203. 754, 754, 754, 754, 755, 756, 756, 756,
  4204. 756, 756, 756, 756, 756, 756, 756, 756,
  4205. 756, 757, 756, 756, 758, 759, 759, 759,
  4206. 760, 1, 761, 1, 747, 1, 1, 1,
  4207. 1, 1, 1, 1, 1, 1, 1, 1,
  4208. 1, 1, 1, 1, 1, 1, 1, 1,
  4209. 1, 1, 1, 747, 1, 762, 1, 1,
  4210. 1, 763, 1, 1, 1, 1, 1, 1,
  4211. 1, 1, 1, 1, 1, 1, 1, 1,
  4212. 1, 1, 1, 1, 762, 749, 750, 749,
  4213. 749, 749, 749, 749, 764, 1, 749, 749,
  4214. 765, 749, 766, 749, 749, 749, 749, 749,
  4215. 749, 749, 749, 749, 749, 749, 1, 767,
  4216. 471, 749, 1, 749, 500, 749, 749, 749,
  4217. 749, 749, 749, 749, 749, 749, 749, 749,
  4218. 749, 749, 749, 749, 749, 749, 749, 749,
  4219. 749, 749, 749, 749, 749, 749, 749, 1,
  4220. 1, 1, 749, 749, 749, 749, 749, 749,
  4221. 749, 749, 749, 749, 749, 749, 749, 749,
  4222. 749, 749, 749, 749, 749, 749, 749, 749,
  4223. 749, 749, 749, 749, 749, 749, 749, 749,
  4224. 749, 749, 749, 1, 1, 1, 1, 1,
  4225. 1, 1, 1, 1, 1, 1, 1, 1,
  4226. 1, 1, 1, 1, 1, 1, 1, 1,
  4227. 1, 1, 1, 1, 1, 1, 1, 1,
  4228. 1, 1, 1, 1, 1, 1, 1, 1,
  4229. 1, 1, 1, 1, 1, 1, 1, 1,
  4230. 1, 1, 1, 1, 1, 1, 1, 1,
  4231. 1, 1, 1, 1, 1, 1, 1, 1,
  4232. 1, 1, 1, 1, 1, 1, 754, 754,
  4233. 754, 754, 754, 754, 754, 754, 754, 754,
  4234. 754, 754, 754, 754, 754, 754, 754, 754,
  4235. 754, 754, 754, 754, 754, 754, 754, 754,
  4236. 754, 754, 754, 754, 755, 756, 756, 756,
  4237. 756, 756, 756, 756, 756, 756, 756, 756,
  4238. 756, 757, 756, 756, 758, 759, 759, 759,
  4239. 760, 1, 762, 1, 1, 1, 763, 1,
  4240. 1, 1, 1, 1, 1, 1, 1, 1,
  4241. 1, 1, 1, 1, 1, 1, 1, 1,
  4242. 1, 762, 482, 483, 482, 482, 482, 482,
  4243. 482, 764, 1, 482, 482, 765, 482, 768,
  4244. 482, 482, 482, 482, 482, 482, 482, 482,
  4245. 482, 482, 482, 1, 767, 471, 482, 1,
  4246. 482, 500, 482, 482, 482, 482, 482, 482,
  4247. 482, 482, 482, 482, 482, 482, 482, 482,
  4248. 482, 482, 482, 482, 482, 482, 482, 482,
  4249. 482, 482, 482, 482, 1, 1, 1, 482,
  4250. 482, 482, 482, 482, 482, 482, 482, 482,
  4251. 482, 482, 482, 482, 482, 482, 482, 482,
  4252. 482, 482, 482, 482, 482, 482, 482, 482,
  4253. 482, 482, 482, 482, 482, 482, 482, 482,
  4254. 1, 1, 1, 1, 1, 1, 1, 1,
  4255. 1, 1, 1, 1, 1, 1, 1, 1,
  4256. 1, 1, 1, 1, 1, 1, 1, 1,
  4257. 1, 1, 1, 1, 1, 1, 1, 1,
  4258. 1, 1, 1, 1, 1, 1, 1, 1,
  4259. 1, 1, 1, 1, 1, 1, 1, 1,
  4260. 1, 1, 1, 1, 1, 1, 1, 1,
  4261. 1, 1, 1, 1, 1, 1, 1, 1,
  4262. 1, 1, 1, 488, 488, 488, 488, 488,
  4263. 488, 488, 488, 488, 488, 488, 488, 488,
  4264. 488, 488, 488, 488, 488, 488, 488, 488,
  4265. 488, 488, 488, 488, 488, 488, 488, 488,
  4266. 488, 489, 490, 490, 490, 490, 490, 490,
  4267. 490, 490, 490, 490, 490, 490, 491, 490,
  4268. 490, 492, 493, 493, 493, 494, 1, 769,
  4269. 1, 770, 1, 1, 1, 1, 1, 1,
  4270. 1, 1, 1, 1, 1, 1, 1, 1,
  4271. 1, 1, 1, 1, 1, 1, 1, 1,
  4272. 770, 1, 771, 1, 1, 1, 772, 1,
  4273. 1, 1, 1, 1, 1, 1, 1, 1,
  4274. 1, 1, 1, 1, 1, 1, 1, 1,
  4275. 1, 771, 527, 528, 527, 527, 527, 527,
  4276. 527, 773, 1, 527, 527, 774, 527, 775,
  4277. 527, 527, 527, 527, 527, 527, 527, 527,
  4278. 527, 527, 527, 1, 776, 531, 527, 1,
  4279. 527, 530, 527, 527, 527, 527, 527, 527,
  4280. 527, 527, 527, 527, 527, 527, 527, 527,
  4281. 527, 527, 527, 527, 527, 527, 527, 527,
  4282. 527, 527, 527, 527, 1, 1, 1, 527,
  4283. 527, 527, 527, 527, 527, 527, 527, 527,
  4284. 527, 527, 527, 527, 527, 527, 527, 527,
  4285. 527, 527, 527, 527, 527, 527, 527, 527,
  4286. 527, 527, 527, 527, 527, 527, 527, 527,
  4287. 1, 1, 1, 1, 1, 1, 1, 1,
  4288. 1, 1, 1, 1, 1, 1, 1, 1,
  4289. 1, 1, 1, 1, 1, 1, 1, 1,
  4290. 1, 1, 1, 1, 1, 1, 1, 1,
  4291. 1, 1, 1, 1, 1, 1, 1, 1,
  4292. 1, 1, 1, 1, 1, 1, 1, 1,
  4293. 1, 1, 1, 1, 1, 1, 1, 1,
  4294. 1, 1, 1, 1, 1, 1, 1, 1,
  4295. 1, 1, 1, 532, 532, 532, 532, 532,
  4296. 532, 532, 532, 532, 532, 532, 532, 532,
  4297. 532, 532, 532, 532, 532, 532, 532, 532,
  4298. 532, 532, 532, 532, 532, 532, 532, 532,
  4299. 532, 533, 534, 534, 534, 534, 534, 534,
  4300. 534, 534, 534, 534, 534, 534, 535, 534,
  4301. 534, 536, 537, 537, 537, 538, 1, 777,
  4302. 1, 1, 1, 778, 1, 1, 1, 1,
  4303. 1, 1, 1, 1, 1, 1, 1, 1,
  4304. 1, 1, 1, 1, 1, 1, 777, 779,
  4305. 483, 779, 779, 779, 779, 779, 780, 1,
  4306. 779, 779, 1, 779, 500, 779, 779, 779,
  4307. 779, 779, 779, 779, 779, 779, 779, 779,
  4308. 1, 1, 471, 779, 1, 779, 500, 779,
  4309. 779, 779, 779, 779, 779, 779, 779, 779,
  4310. 779, 779, 779, 779, 779, 779, 779, 779,
  4311. 779, 779, 779, 779, 779, 779, 779, 779,
  4312. 779, 1, 1, 1, 779, 779, 779, 779,
  4313. 779, 779, 779, 779, 779, 779, 779, 779,
  4314. 779, 779, 779, 779, 779, 779, 779, 779,
  4315. 779, 779, 779, 779, 779, 779, 779, 779,
  4316. 779, 779, 779, 779, 779, 1, 1, 1,
  4317. 1, 1, 1, 1, 1, 1, 1, 1,
  4318. 1, 1, 1, 1, 1, 1, 1, 1,
  4319. 1, 1, 1, 1, 1, 1, 1, 1,
  4320. 1, 1, 1, 1, 1, 1, 1, 1,
  4321. 1, 1, 1, 1, 1, 1, 1, 1,
  4322. 1, 1, 1, 1, 1, 1, 1, 1,
  4323. 1, 1, 1, 1, 1, 1, 1, 1,
  4324. 1, 1, 1, 1, 1, 1, 1, 1,
  4325. 781, 781, 781, 781, 781, 781, 781, 781,
  4326. 781, 781, 781, 781, 781, 781, 781, 781,
  4327. 781, 781, 781, 781, 781, 781, 781, 781,
  4328. 781, 781, 781, 781, 781, 781, 782, 783,
  4329. 783, 783, 783, 783, 783, 783, 783, 783,
  4330. 783, 783, 783, 784, 783, 783, 785, 786,
  4331. 786, 786, 787, 1, 788, 1, 1, 1,
  4332. 789, 1, 1, 1, 1, 1, 1, 1,
  4333. 1, 1, 1, 1, 1, 1, 1, 1,
  4334. 1, 1, 1, 788, 779, 483, 779, 779,
  4335. 779, 779, 779, 790, 1, 779, 779, 1,
  4336. 779, 1, 779, 779, 779, 779, 779, 779,
  4337. 779, 779, 779, 779, 779, 1, 1, 545,
  4338. 779, 1, 779, 1, 779, 779, 779, 779,
  4339. 779, 779, 779, 779, 779, 779, 779, 779,
  4340. 779, 779, 779, 779, 779, 779, 779, 779,
  4341. 779, 779, 779, 779, 779, 779, 1, 1,
  4342. 1, 779, 779, 779, 779, 779, 779, 779,
  4343. 779, 779, 779, 779, 779, 779, 779, 779,
  4344. 779, 779, 779, 779, 779, 779, 779, 779,
  4345. 779, 779, 779, 779, 779, 779, 779, 779,
  4346. 779, 779, 1, 1, 1, 1, 1, 1,
  4347. 1, 1, 1, 1, 1, 1, 1, 1,
  4348. 1, 1, 1, 1, 1, 1, 1, 1,
  4349. 1, 1, 1, 1, 1, 1, 1, 1,
  4350. 1, 1, 1, 1, 1, 1, 1, 1,
  4351. 1, 1, 1, 1, 1, 1, 1, 1,
  4352. 1, 1, 1, 1, 1, 1, 1, 1,
  4353. 1, 1, 1, 1, 1, 1, 1, 1,
  4354. 1, 1, 1, 1, 1, 781, 781, 781,
  4355. 781, 781, 781, 781, 781, 781, 781, 781,
  4356. 781, 781, 781, 781, 781, 781, 781, 781,
  4357. 781, 781, 781, 781, 781, 781, 781, 781,
  4358. 781, 781, 781, 782, 783, 783, 783, 783,
  4359. 783, 783, 783, 783, 783, 783, 783, 783,
  4360. 784, 783, 783, 785, 786, 786, 786, 787,
  4361. 1, 791, 1, 788, 1, 1, 1, 1,
  4362. 1, 1, 1, 1, 1, 1, 1, 1,
  4363. 1, 1, 1, 1, 1, 1, 1, 1,
  4364. 1, 1, 788, 1, 762, 1, 1, 1,
  4365. 763, 1, 1, 1, 1, 1, 1, 1,
  4366. 1, 1, 1, 1, 1, 1, 1, 1,
  4367. 1, 1, 1, 762, 779, 483, 779, 779,
  4368. 779, 779, 779, 764, 1, 779, 779, 765,
  4369. 779, 768, 779, 779, 779, 779, 779, 779,
  4370. 779, 779, 779, 779, 779, 1, 767, 471,
  4371. 779, 1, 779, 500, 779, 779, 779, 779,
  4372. 779, 779, 779, 779, 779, 779, 779, 779,
  4373. 779, 779, 779, 779, 779, 779, 779, 779,
  4374. 779, 779, 779, 779, 779, 779, 1, 1,
  4375. 1, 779, 779, 779, 779, 779, 779, 779,
  4376. 779, 779, 779, 779, 779, 779, 779, 779,
  4377. 779, 779, 779, 779, 779, 779, 779, 779,
  4378. 779, 779, 779, 779, 779, 779, 779, 779,
  4379. 779, 779, 1, 1, 1, 1, 1, 1,
  4380. 1, 1, 1, 1, 1, 1, 1, 1,
  4381. 1, 1, 1, 1, 1, 1, 1, 1,
  4382. 1, 1, 1, 1, 1, 1, 1, 1,
  4383. 1, 1, 1, 1, 1, 1, 1, 1,
  4384. 1, 1, 1, 1, 1, 1, 1, 1,
  4385. 1, 1, 1, 1, 1, 1, 1, 1,
  4386. 1, 1, 1, 1, 1, 1, 1, 1,
  4387. 1, 1, 1, 1, 1, 781, 781, 781,
  4388. 781, 781, 781, 781, 781, 781, 781, 781,
  4389. 781, 781, 781, 781, 781, 781, 781, 781,
  4390. 781, 781, 781, 781, 781, 781, 781, 781,
  4391. 781, 781, 781, 782, 783, 783, 783, 783,
  4392. 783, 783, 783, 783, 783, 783, 783, 783,
  4393. 784, 783, 783, 785, 786, 786, 786, 787,
  4394. 1, 779, 779, 779, 779, 779, 779, 779,
  4395. 779, 779, 779, 779, 779, 779, 779, 779,
  4396. 779, 779, 779, 779, 779, 779, 779, 779,
  4397. 779, 779, 779, 779, 779, 779, 779, 779,
  4398. 779, 779, 779, 779, 779, 779, 779, 779,
  4399. 779, 779, 779, 779, 779, 779, 779, 779,
  4400. 779, 779, 779, 779, 779, 779, 779, 779,
  4401. 779, 779, 779, 779, 779, 779, 779, 779,
  4402. 779, 1, 781, 781, 781, 781, 781, 781,
  4403. 781, 781, 781, 781, 781, 781, 781, 781,
  4404. 781, 781, 781, 781, 781, 781, 781, 781,
  4405. 781, 781, 781, 781, 781, 781, 781, 781,
  4406. 781, 781, 1, 781, 781, 781, 781, 781,
  4407. 781, 781, 781, 781, 781, 781, 781, 781,
  4408. 781, 781, 781, 781, 781, 781, 781, 781,
  4409. 781, 781, 781, 781, 781, 781, 781, 781,
  4410. 781, 781, 781, 781, 781, 781, 781, 781,
  4411. 781, 781, 781, 781, 781, 781, 781, 781,
  4412. 781, 781, 781, 781, 781, 781, 781, 781,
  4413. 781, 781, 781, 781, 781, 781, 781, 781,
  4414. 781, 781, 781, 1, 781, 781, 781, 781,
  4415. 781, 781, 781, 781, 781, 781, 781, 781,
  4416. 781, 781, 781, 781, 781, 781, 781, 781,
  4417. 781, 781, 781, 781, 781, 781, 781, 781,
  4418. 781, 781, 781, 781, 1, 783, 783, 783,
  4419. 783, 783, 783, 783, 783, 783, 783, 783,
  4420. 783, 783, 783, 783, 783, 783, 783, 783,
  4421. 783, 783, 783, 783, 783, 783, 783, 783,
  4422. 783, 783, 783, 783, 783, 783, 783, 783,
  4423. 783, 783, 783, 783, 783, 783, 783, 783,
  4424. 783, 783, 783, 783, 783, 1, 783, 783,
  4425. 783, 783, 783, 783, 783, 783, 783, 783,
  4426. 783, 783, 783, 783, 783, 783, 783, 783,
  4427. 783, 783, 783, 783, 783, 783, 783, 783,
  4428. 783, 783, 783, 783, 783, 783, 783, 783,
  4429. 783, 783, 783, 783, 783, 783, 783, 783,
  4430. 783, 783, 783, 783, 783, 783, 783, 783,
  4431. 783, 783, 783, 783, 783, 783, 783, 783,
  4432. 783, 783, 783, 783, 783, 783, 1, 783,
  4433. 783, 783, 783, 783, 783, 783, 783, 783,
  4434. 783, 783, 783, 783, 783, 783, 783, 1,
  4435. 792, 1, 1, 1, 793, 1, 1, 1,
  4436. 1, 1, 1, 1, 1, 1, 1, 1,
  4437. 1, 1, 1, 1, 1, 1, 1, 792,
  4438. 794, 528, 794, 794, 794, 794, 794, 795,
  4439. 1, 794, 794, 1, 794, 1, 794, 794,
  4440. 794, 794, 794, 794, 794, 794, 794, 794,
  4441. 794, 1, 1, 550, 794, 1, 794, 1,
  4442. 794, 794, 794, 794, 794, 794, 794, 794,
  4443. 794, 794, 794, 794, 794, 794, 794, 794,
  4444. 794, 794, 794, 794, 794, 794, 794, 794,
  4445. 794, 794, 1, 1, 1, 794, 794, 794,
  4446. 794, 794, 794, 794, 794, 794, 794, 794,
  4447. 794, 794, 794, 794, 794, 794, 794, 794,
  4448. 794, 794, 794, 794, 794, 794, 794, 794,
  4449. 794, 794, 794, 794, 794, 794, 1, 1,
  4450. 1, 1, 1, 1, 1, 1, 1, 1,
  4451. 1, 1, 1, 1, 1, 1, 1, 1,
  4452. 1, 1, 1, 1, 1, 1, 1, 1,
  4453. 1, 1, 1, 1, 1, 1, 1, 1,
  4454. 1, 1, 1, 1, 1, 1, 1, 1,
  4455. 1, 1, 1, 1, 1, 1, 1, 1,
  4456. 1, 1, 1, 1, 1, 1, 1, 1,
  4457. 1, 1, 1, 1, 1, 1, 1, 1,
  4458. 1, 796, 796, 796, 796, 796, 796, 796,
  4459. 796, 796, 796, 796, 796, 796, 796, 796,
  4460. 796, 796, 796, 796, 796, 796, 796, 796,
  4461. 796, 796, 796, 796, 796, 796, 796, 797,
  4462. 798, 798, 798, 798, 798, 798, 798, 798,
  4463. 798, 798, 798, 798, 799, 798, 798, 800,
  4464. 801, 801, 801, 802, 1, 482, 482, 482,
  4465. 482, 482, 482, 482, 482, 482, 482, 482,
  4466. 482, 482, 482, 482, 482, 482, 482, 482,
  4467. 482, 482, 482, 482, 482, 482, 482, 482,
  4468. 482, 482, 482, 482, 482, 482, 482, 482,
  4469. 482, 482, 482, 482, 482, 482, 482, 482,
  4470. 482, 482, 482, 482, 482, 482, 482, 482,
  4471. 482, 482, 482, 482, 482, 482, 482, 482,
  4472. 482, 482, 482, 482, 482, 1, 488, 488,
  4473. 488, 488, 488, 488, 488, 488, 488, 488,
  4474. 488, 488, 488, 488, 488, 488, 488, 488,
  4475. 488, 488, 488, 488, 488, 488, 488, 488,
  4476. 488, 488, 488, 488, 488, 488, 1, 488,
  4477. 488, 488, 488, 488, 488, 488, 488, 488,
  4478. 488, 488, 488, 488, 488, 488, 488, 488,
  4479. 488, 488, 488, 488, 488, 488, 488, 488,
  4480. 488, 488, 488, 488, 488, 488, 488, 488,
  4481. 488, 488, 488, 488, 488, 488, 488, 488,
  4482. 488, 488, 488, 488, 488, 488, 488, 488,
  4483. 488, 488, 488, 488, 488, 488, 488, 488,
  4484. 488, 488, 488, 488, 488, 488, 488, 1,
  4485. 488, 488, 488, 488, 488, 488, 488, 488,
  4486. 488, 488, 488, 488, 488, 488, 488, 488,
  4487. 488, 488, 488, 488, 488, 488, 488, 488,
  4488. 488, 488, 488, 488, 488, 488, 488, 488,
  4489. 1, 490, 490, 490, 490, 490, 490, 490,
  4490. 490, 490, 490, 490, 490, 490, 490, 490,
  4491. 490, 490, 490, 490, 490, 490, 490, 490,
  4492. 490, 490, 490, 490, 490, 490, 490, 490,
  4493. 490, 490, 490, 490, 490, 490, 490, 490,
  4494. 490, 490, 490, 490, 490, 490, 490, 490,
  4495. 490, 1, 490, 490, 490, 490, 490, 490,
  4496. 490, 490, 490, 490, 490, 490, 490, 490,
  4497. 490, 490, 490, 490, 490, 490, 490, 490,
  4498. 490, 490, 490, 490, 490, 490, 490, 490,
  4499. 490, 490, 490, 490, 490, 490, 490, 490,
  4500. 490, 490, 490, 490, 490, 490, 490, 490,
  4501. 490, 490, 490, 490, 490, 490, 490, 490,
  4502. 490, 490, 490, 490, 490, 490, 490, 490,
  4503. 490, 490, 1, 490, 490, 490, 490, 490,
  4504. 490, 490, 490, 490, 490, 490, 490, 490,
  4505. 490, 490, 490, 1, 803, 803, 803, 803,
  4506. 803, 803, 803, 803, 804, 1, 803, 803,
  4507. 805, 803, 803, 803, 803, 803, 803, 803,
  4508. 803, 803, 803, 803, 803, 803, 803, 803,
  4509. 803, 803, 803, 804, 803, 504, 803, 803,
  4510. 803, 803, 803, 803, 803, 803, 803, 803,
  4511. 803, 803, 803, 803, 803, 803, 803, 803,
  4512. 803, 803, 803, 803, 803, 803, 803, 803,
  4513. 803, 803, 803, 803, 803, 803, 803, 803,
  4514. 803, 803, 803, 803, 803, 803, 803, 803,
  4515. 803, 803, 803, 803, 803, 803, 803, 803,
  4516. 803, 803, 803, 803, 803, 803, 803, 806,
  4517. 803, 803, 803, 803, 803, 803, 803, 803,
  4518. 803, 803, 803, 803, 803, 803, 803, 803,
  4519. 803, 803, 803, 803, 803, 803, 803, 803,
  4520. 803, 803, 803, 803, 803, 803, 803, 803,
  4521. 803, 803, 803, 1, 1, 1, 1, 1,
  4522. 1, 1, 1, 1, 1, 1, 1, 1,
  4523. 1, 1, 1, 1, 1, 1, 1, 1,
  4524. 1, 1, 1, 1, 1, 1, 1, 1,
  4525. 1, 1, 1, 1, 1, 1, 1, 1,
  4526. 1, 1, 1, 1, 1, 1, 1, 1,
  4527. 1, 1, 1, 1, 1, 1, 1, 1,
  4528. 1, 1, 1, 1, 1, 1, 1, 1,
  4529. 1, 1, 1, 1, 1, 807, 807, 807,
  4530. 807, 807, 807, 807, 807, 807, 807, 807,
  4531. 807, 807, 807, 807, 807, 807, 807, 807,
  4532. 807, 807, 807, 807, 807, 807, 807, 807,
  4533. 807, 807, 807, 808, 809, 809, 809, 809,
  4534. 809, 809, 809, 809, 809, 809, 809, 809,
  4535. 810, 809, 809, 811, 812, 812, 812, 813,
  4536. 1, 814, 814, 814, 814, 814, 814, 814,
  4537. 814, 814, 1, 814, 814, 815, 814, 814,
  4538. 814, 814, 814, 814, 814, 814, 814, 814,
  4539. 814, 814, 814, 814, 814, 814, 814, 814,
  4540. 814, 814, 816, 814, 814, 814, 814, 814,
  4541. 814, 814, 814, 814, 814, 814, 814, 814,
  4542. 814, 814, 814, 814, 814, 814, 814, 814,
  4543. 814, 814, 814, 814, 814, 814, 814, 814,
  4544. 814, 814, 814, 814, 814, 814, 814, 814,
  4545. 814, 814, 814, 814, 814, 814, 814, 814,
  4546. 814, 814, 814, 814, 814, 814, 814, 814,
  4547. 814, 814, 814, 814, 817, 814, 814, 814,
  4548. 814, 814, 814, 814, 814, 814, 814, 814,
  4549. 814, 814, 814, 814, 814, 814, 814, 814,
  4550. 814, 814, 814, 814, 814, 814, 814, 814,
  4551. 814, 814, 814, 814, 814, 814, 814, 814,
  4552. 1, 1, 1, 1, 1, 1, 1, 1,
  4553. 1, 1, 1, 1, 1, 1, 1, 1,
  4554. 1, 1, 1, 1, 1, 1, 1, 1,
  4555. 1, 1, 1, 1, 1, 1, 1, 1,
  4556. 1, 1, 1, 1, 1, 1, 1, 1,
  4557. 1, 1, 1, 1, 1, 1, 1, 1,
  4558. 1, 1, 1, 1, 1, 1, 1, 1,
  4559. 1, 1, 1, 1, 1, 1, 1, 1,
  4560. 1, 1, 818, 818, 818, 818, 818, 818,
  4561. 818, 818, 818, 818, 818, 818, 818, 818,
  4562. 818, 818, 818, 818, 818, 818, 818, 818,
  4563. 818, 818, 818, 818, 818, 818, 818, 818,
  4564. 819, 820, 820, 820, 820, 820, 820, 820,
  4565. 820, 820, 820, 820, 820, 821, 820, 820,
  4566. 822, 823, 823, 823, 824, 1, 825, 1,
  4567. 814, 1, 1, 1, 1, 1, 1, 1,
  4568. 1, 1, 1, 1, 1, 1, 1, 1,
  4569. 1, 1, 1, 1, 1, 1, 1, 814,
  4570. 1, 826, 1, 1, 1, 827, 1, 1,
  4571. 1, 1, 1, 1, 1, 1, 1, 1,
  4572. 1, 1, 1, 1, 1, 1, 1, 1,
  4573. 826, 828, 750, 828, 828, 828, 828, 828,
  4574. 829, 1, 828, 828, 765, 828, 830, 828,
  4575. 828, 828, 828, 828, 828, 828, 828, 828,
  4576. 828, 828, 1, 767, 471, 828, 1, 828,
  4577. 500, 828, 828, 828, 828, 828, 828, 828,
  4578. 828, 828, 828, 828, 828, 828, 828, 828,
  4579. 828, 828, 828, 828, 828, 828, 828, 828,
  4580. 828, 828, 828, 1, 1, 1, 828, 828,
  4581. 828, 828, 828, 828, 828, 828, 828, 828,
  4582. 828, 828, 828, 828, 828, 828, 828, 828,
  4583. 828, 828, 828, 828, 828, 828, 828, 828,
  4584. 828, 828, 828, 828, 828, 828, 828, 1,
  4585. 1, 1, 1, 1, 1, 1, 1, 1,
  4586. 1, 1, 1, 1, 1, 1, 1, 1,
  4587. 1, 1, 1, 1, 1, 1, 1, 1,
  4588. 1, 1, 1, 1, 1, 1, 1, 1,
  4589. 1, 1, 1, 1, 1, 1, 1, 1,
  4590. 1, 1, 1, 1, 1, 1, 1, 1,
  4591. 1, 1, 1, 1, 1, 1, 1, 1,
  4592. 1, 1, 1, 1, 1, 1, 1, 1,
  4593. 1, 1, 831, 831, 831, 831, 831, 831,
  4594. 831, 831, 831, 831, 831, 831, 831, 831,
  4595. 831, 831, 831, 831, 831, 831, 831, 831,
  4596. 831, 831, 831, 831, 831, 831, 831, 831,
  4597. 832, 833, 833, 833, 833, 833, 833, 833,
  4598. 833, 833, 833, 833, 833, 834, 833, 833,
  4599. 835, 836, 836, 836, 837, 1, 826, 1,
  4600. 1, 1, 827, 1, 1, 1, 1, 1,
  4601. 1, 1, 1, 1, 1, 1, 1, 1,
  4602. 1, 1, 1, 1, 1, 826, 482, 483,
  4603. 482, 482, 482, 482, 482, 829, 1, 482,
  4604. 482, 765, 482, 500, 482, 482, 482, 482,
  4605. 482, 482, 482, 482, 482, 482, 482, 1,
  4606. 767, 471, 482, 1, 482, 500, 482, 482,
  4607. 482, 482, 482, 482, 482, 482, 482, 482,
  4608. 482, 482, 482, 482, 482, 482, 482, 482,
  4609. 482, 482, 482, 482, 482, 482, 482, 482,
  4610. 1, 1, 1, 482, 482, 482, 482, 482,
  4611. 482, 482, 482, 482, 482, 482, 482, 482,
  4612. 482, 482, 482, 482, 482, 482, 482, 482,
  4613. 482, 482, 482, 482, 482, 482, 482, 482,
  4614. 482, 482, 482, 482, 1, 1, 1, 1,
  4615. 1, 1, 1, 1, 1, 1, 1, 1,
  4616. 1, 1, 1, 1, 1, 1, 1, 1,
  4617. 1, 1, 1, 1, 1, 1, 1, 1,
  4618. 1, 1, 1, 1, 1, 1, 1, 1,
  4619. 1, 1, 1, 1, 1, 1, 1, 1,
  4620. 1, 1, 1, 1, 1, 1, 1, 1,
  4621. 1, 1, 1, 1, 1, 1, 1, 1,
  4622. 1, 1, 1, 1, 1, 1, 1, 488,
  4623. 488, 488, 488, 488, 488, 488, 488, 488,
  4624. 488, 488, 488, 488, 488, 488, 488, 488,
  4625. 488, 488, 488, 488, 488, 488, 488, 488,
  4626. 488, 488, 488, 488, 488, 489, 490, 490,
  4627. 490, 490, 490, 490, 490, 490, 490, 490,
  4628. 490, 490, 491, 490, 490, 492, 493, 493,
  4629. 493, 494, 1, 838, 1, 839, 1, 1,
  4630. 1, 1, 1, 1, 1, 1, 1, 1,
  4631. 1, 1, 1, 1, 1, 1, 1, 1,
  4632. 1, 1, 1, 1, 839, 1, 840, 1,
  4633. 1, 1, 841, 1, 1, 1, 1, 1,
  4634. 1, 1, 1, 1, 1, 1, 1, 1,
  4635. 1, 1, 1, 1, 1, 840, 527, 528,
  4636. 527, 527, 527, 527, 527, 842, 1, 527,
  4637. 527, 774, 527, 530, 527, 527, 527, 527,
  4638. 527, 527, 527, 527, 527, 527, 527, 1,
  4639. 776, 531, 527, 1, 527, 530, 527, 527,
  4640. 527, 527, 527, 527, 527, 527, 527, 527,
  4641. 527, 527, 527, 527, 527, 527, 527, 527,
  4642. 527, 527, 527, 527, 527, 527, 527, 527,
  4643. 1, 1, 1, 527, 527, 527, 527, 527,
  4644. 527, 527, 527, 527, 527, 527, 527, 527,
  4645. 527, 527, 527, 527, 527, 527, 527, 527,
  4646. 527, 527, 527, 527, 527, 527, 527, 527,
  4647. 527, 527, 527, 527, 1, 1, 1, 1,
  4648. 1, 1, 1, 1, 1, 1, 1, 1,
  4649. 1, 1, 1, 1, 1, 1, 1, 1,
  4650. 1, 1, 1, 1, 1, 1, 1, 1,
  4651. 1, 1, 1, 1, 1, 1, 1, 1,
  4652. 1, 1, 1, 1, 1, 1, 1, 1,
  4653. 1, 1, 1, 1, 1, 1, 1, 1,
  4654. 1, 1, 1, 1, 1, 1, 1, 1,
  4655. 1, 1, 1, 1, 1, 1, 1, 532,
  4656. 532, 532, 532, 532, 532, 532, 532, 532,
  4657. 532, 532, 532, 532, 532, 532, 532, 532,
  4658. 532, 532, 532, 532, 532, 532, 532, 532,
  4659. 532, 532, 532, 532, 532, 533, 534, 534,
  4660. 534, 534, 534, 534, 534, 534, 534, 534,
  4661. 534, 534, 535, 534, 534, 536, 537, 537,
  4662. 537, 538, 1, 539, 1, 1, 1, 540,
  4663. 1, 1, 1, 1, 1, 1, 1, 1,
  4664. 1, 1, 1, 1, 1, 1, 1, 1,
  4665. 1, 1, 539, 828, 750, 828, 828, 828,
  4666. 828, 828, 541, 1, 828, 828, 1, 828,
  4667. 830, 828, 828, 828, 828, 828, 828, 828,
  4668. 828, 828, 828, 828, 1, 1, 471, 828,
  4669. 1, 828, 500, 828, 828, 828, 828, 828,
  4670. 828, 828, 828, 828, 828, 828, 828, 828,
  4671. 828, 828, 828, 828, 828, 828, 828, 828,
  4672. 828, 828, 828, 828, 828, 1, 1, 1,
  4673. 828, 828, 828, 828, 828, 828, 828, 828,
  4674. 828, 828, 828, 828, 828, 828, 828, 828,
  4675. 828, 828, 828, 828, 828, 828, 828, 828,
  4676. 828, 828, 828, 828, 828, 828, 828, 828,
  4677. 828, 1, 1, 1, 1, 1, 1, 1,
  4678. 1, 1, 1, 1, 1, 1, 1, 1,
  4679. 1, 1, 1, 1, 1, 1, 1, 1,
  4680. 1, 1, 1, 1, 1, 1, 1, 1,
  4681. 1, 1, 1, 1, 1, 1, 1, 1,
  4682. 1, 1, 1, 1, 1, 1, 1, 1,
  4683. 1, 1, 1, 1, 1, 1, 1, 1,
  4684. 1, 1, 1, 1, 1, 1, 1, 1,
  4685. 1, 1, 1, 1, 831, 831, 831, 831,
  4686. 831, 831, 831, 831, 831, 831, 831, 831,
  4687. 831, 831, 831, 831, 831, 831, 831, 831,
  4688. 831, 831, 831, 831, 831, 831, 831, 831,
  4689. 831, 831, 832, 833, 833, 833, 833, 833,
  4690. 833, 833, 833, 833, 833, 833, 833, 834,
  4691. 833, 833, 835, 836, 836, 836, 837, 1,
  4692. 828, 828, 828, 828, 828, 828, 828, 828,
  4693. 828, 828, 828, 828, 828, 828, 828, 828,
  4694. 828, 828, 828, 828, 828, 828, 828, 828,
  4695. 828, 828, 828, 828, 828, 828, 828, 828,
  4696. 828, 828, 828, 828, 828, 828, 828, 828,
  4697. 828, 828, 828, 828, 828, 828, 828, 828,
  4698. 828, 828, 828, 828, 828, 828, 828, 828,
  4699. 828, 828, 828, 828, 828, 828, 828, 828,
  4700. 1, 831, 831, 831, 831, 831, 831, 831,
  4701. 831, 831, 831, 831, 831, 831, 831, 831,
  4702. 831, 831, 831, 831, 831, 831, 831, 831,
  4703. 831, 831, 831, 831, 831, 831, 831, 831,
  4704. 831, 1, 831, 831, 831, 831, 831, 831,
  4705. 831, 831, 831, 831, 831, 831, 831, 831,
  4706. 831, 831, 831, 831, 831, 831, 831, 831,
  4707. 831, 831, 831, 831, 831, 831, 831, 831,
  4708. 831, 831, 831, 831, 831, 831, 831, 831,
  4709. 831, 831, 831, 831, 831, 831, 831, 831,
  4710. 831, 831, 831, 831, 831, 831, 831, 831,
  4711. 831, 831, 831, 831, 831, 831, 831, 831,
  4712. 831, 831, 1, 831, 831, 831, 831, 831,
  4713. 831, 831, 831, 831, 831, 831, 831, 831,
  4714. 831, 831, 831, 831, 831, 831, 831, 831,
  4715. 831, 831, 831, 831, 831, 831, 831, 831,
  4716. 831, 831, 831, 1, 833, 833, 833, 833,
  4717. 833, 833, 833, 833, 833, 833, 833, 833,
  4718. 833, 833, 833, 833, 833, 833, 833, 833,
  4719. 833, 833, 833, 833, 833, 833, 833, 833,
  4720. 833, 833, 833, 833, 833, 833, 833, 833,
  4721. 833, 833, 833, 833, 833, 833, 833, 833,
  4722. 833, 833, 833, 833, 1, 833, 833, 833,
  4723. 833, 833, 833, 833, 833, 833, 833, 833,
  4724. 833, 833, 833, 833, 833, 833, 833, 833,
  4725. 833, 833, 833, 833, 833, 833, 833, 833,
  4726. 833, 833, 833, 833, 833, 833, 833, 833,
  4727. 833, 833, 833, 833, 833, 833, 833, 833,
  4728. 833, 833, 833, 833, 833, 833, 833, 833,
  4729. 833, 833, 833, 833, 833, 833, 833, 833,
  4730. 833, 833, 833, 833, 833, 1, 833, 833,
  4731. 833, 833, 833, 833, 833, 833, 833, 833,
  4732. 833, 833, 833, 833, 833, 833, 1, 814,
  4733. 814, 814, 814, 814, 814, 814, 814, 814,
  4734. 814, 814, 814, 814, 814, 814, 814, 814,
  4735. 814, 814, 814, 814, 814, 814, 814, 814,
  4736. 814, 814, 814, 814, 814, 814, 814, 814,
  4737. 814, 814, 814, 814, 814, 814, 814, 814,
  4738. 814, 814, 814, 814, 814, 814, 814, 814,
  4739. 814, 814, 814, 814, 814, 814, 814, 814,
  4740. 814, 814, 814, 814, 814, 814, 814, 814,
  4741. 814, 814, 814, 814, 814, 814, 814, 814,
  4742. 814, 814, 814, 814, 814, 814, 814, 814,
  4743. 814, 814, 814, 814, 814, 814, 814, 814,
  4744. 814, 814, 814, 814, 814, 814, 814, 814,
  4745. 814, 814, 814, 814, 814, 814, 814, 814,
  4746. 814, 814, 814, 814, 814, 814, 814, 814,
  4747. 814, 814, 814, 814, 814, 814, 814, 814,
  4748. 814, 814, 814, 814, 814, 814, 814, 1,
  4749. 1, 1, 1, 1, 1, 1, 1, 1,
  4750. 1, 1, 1, 1, 1, 1, 1, 1,
  4751. 1, 1, 1, 1, 1, 1, 1, 1,
  4752. 1, 1, 1, 1, 1, 1, 1, 1,
  4753. 1, 1, 1, 1, 1, 1, 1, 1,
  4754. 1, 1, 1, 1, 1, 1, 1, 1,
  4755. 1, 1, 1, 1, 1, 1, 1, 1,
  4756. 1, 1, 1, 1, 1, 1, 1, 1,
  4757. 1, 818, 818, 818, 818, 818, 818, 818,
  4758. 818, 818, 818, 818, 818, 818, 818, 818,
  4759. 818, 818, 818, 818, 818, 818, 818, 818,
  4760. 818, 818, 818, 818, 818, 818, 818, 819,
  4761. 820, 820, 820, 820, 820, 820, 820, 820,
  4762. 820, 820, 820, 820, 821, 820, 820, 822,
  4763. 823, 823, 823, 824, 1, 814, 814, 814,
  4764. 814, 814, 814, 814, 814, 814, 814, 814,
  4765. 814, 814, 814, 814, 814, 814, 814, 814,
  4766. 814, 814, 814, 814, 814, 814, 814, 814,
  4767. 814, 814, 814, 814, 814, 814, 814, 814,
  4768. 814, 814, 814, 814, 814, 814, 814, 814,
  4769. 814, 814, 814, 814, 814, 814, 814, 814,
  4770. 814, 814, 814, 814, 814, 814, 814, 814,
  4771. 814, 814, 814, 814, 814, 1, 818, 818,
  4772. 818, 818, 818, 818, 818, 818, 818, 818,
  4773. 818, 818, 818, 818, 818, 818, 818, 818,
  4774. 818, 818, 818, 818, 818, 818, 818, 818,
  4775. 818, 818, 818, 818, 818, 818, 1, 818,
  4776. 818, 818, 818, 818, 818, 818, 818, 818,
  4777. 818, 818, 818, 818, 818, 818, 818, 818,
  4778. 818, 818, 818, 818, 818, 818, 818, 818,
  4779. 818, 818, 818, 818, 818, 818, 818, 818,
  4780. 818, 818, 818, 818, 818, 818, 818, 818,
  4781. 818, 818, 818, 818, 818, 818, 818, 818,
  4782. 818, 818, 818, 818, 818, 818, 818, 818,
  4783. 818, 818, 818, 818, 818, 818, 818, 1,
  4784. 818, 818, 818, 818, 818, 818, 818, 818,
  4785. 818, 818, 818, 818, 818, 818, 818, 818,
  4786. 818, 818, 818, 818, 818, 818, 818, 818,
  4787. 818, 818, 818, 818, 818, 818, 818, 818,
  4788. 1, 820, 820, 820, 820, 820, 820, 820,
  4789. 820, 820, 820, 820, 820, 820, 820, 820,
  4790. 820, 820, 820, 820, 820, 820, 820, 820,
  4791. 820, 820, 820, 820, 820, 820, 820, 820,
  4792. 820, 820, 820, 820, 820, 820, 820, 820,
  4793. 820, 820, 820, 820, 820, 820, 820, 820,
  4794. 820, 1, 820, 820, 820, 820, 820, 820,
  4795. 820, 820, 820, 820, 820, 820, 820, 820,
  4796. 820, 820, 820, 820, 820, 820, 820, 820,
  4797. 820, 820, 820, 820, 820, 820, 820, 820,
  4798. 820, 820, 820, 820, 820, 820, 820, 820,
  4799. 820, 820, 820, 820, 820, 820, 820, 820,
  4800. 820, 820, 820, 820, 820, 820, 820, 820,
  4801. 820, 820, 820, 820, 820, 820, 820, 820,
  4802. 820, 820, 1, 820, 820, 820, 820, 820,
  4803. 820, 820, 820, 820, 820, 820, 820, 820,
  4804. 820, 820, 820, 1, 814, 814, 814, 814,
  4805. 814, 814, 814, 814, 843, 1, 814, 814,
  4806. 844, 814, 814, 814, 814, 814, 814, 814,
  4807. 814, 814, 814, 814, 814, 814, 814, 814,
  4808. 814, 814, 814, 843, 814, 515, 814, 814,
  4809. 814, 814, 814, 814, 814, 814, 814, 814,
  4810. 814, 814, 814, 814, 814, 814, 814, 814,
  4811. 814, 814, 814, 814, 814, 814, 814, 814,
  4812. 814, 814, 814, 814, 814, 814, 814, 814,
  4813. 814, 814, 814, 814, 814, 814, 814, 814,
  4814. 814, 814, 814, 814, 814, 814, 814, 814,
  4815. 814, 814, 814, 814, 814, 814, 814, 817,
  4816. 814, 814, 814, 814, 814, 814, 814, 814,
  4817. 814, 814, 814, 814, 814, 814, 814, 814,
  4818. 814, 814, 814, 814, 814, 814, 814, 814,
  4819. 814, 814, 814, 814, 814, 814, 814, 814,
  4820. 814, 814, 814, 1, 1, 1, 1, 1,
  4821. 1, 1, 1, 1, 1, 1, 1, 1,
  4822. 1, 1, 1, 1, 1, 1, 1, 1,
  4823. 1, 1, 1, 1, 1, 1, 1, 1,
  4824. 1, 1, 1, 1, 1, 1, 1, 1,
  4825. 1, 1, 1, 1, 1, 1, 1, 1,
  4826. 1, 1, 1, 1, 1, 1, 1, 1,
  4827. 1, 1, 1, 1, 1, 1, 1, 1,
  4828. 1, 1, 1, 1, 1, 818, 818, 818,
  4829. 818, 818, 818, 818, 818, 818, 818, 818,
  4830. 818, 818, 818, 818, 818, 818, 818, 818,
  4831. 818, 818, 818, 818, 818, 818, 818, 818,
  4832. 818, 818, 818, 819, 820, 820, 820, 820,
  4833. 820, 820, 820, 820, 820, 820, 820, 820,
  4834. 821, 820, 820, 822, 823, 823, 823, 824,
  4835. 1, 845, 1, 843, 1, 1, 1, 1,
  4836. 1, 1, 1, 1, 1, 1, 1, 1,
  4837. 1, 1, 1, 1, 1, 1, 1, 1,
  4838. 1, 1, 843, 1, 777, 1, 1, 1,
  4839. 778, 1, 1, 1, 1, 1, 1, 1,
  4840. 1, 1, 1, 1, 1, 1, 1, 1,
  4841. 1, 1, 1, 777, 749, 750, 749, 749,
  4842. 749, 749, 749, 780, 1, 749, 749, 1,
  4843. 749, 830, 749, 749, 749, 749, 749, 749,
  4844. 749, 749, 749, 749, 749, 1, 1, 471,
  4845. 749, 1, 749, 500, 749, 749, 749, 749,
  4846. 749, 749, 749, 749, 749, 749, 749, 749,
  4847. 749, 749, 749, 749, 749, 749, 749, 749,
  4848. 749, 749, 749, 749, 749, 749, 1, 1,
  4849. 1, 749, 749, 749, 749, 749, 749, 749,
  4850. 749, 749, 749, 749, 749, 749, 749, 749,
  4851. 749, 749, 749, 749, 749, 749, 749, 749,
  4852. 749, 749, 749, 749, 749, 749, 749, 749,
  4853. 749, 749, 1, 1, 1, 1, 1, 1,
  4854. 1, 1, 1, 1, 1, 1, 1, 1,
  4855. 1, 1, 1, 1, 1, 1, 1, 1,
  4856. 1, 1, 1, 1, 1, 1, 1, 1,
  4857. 1, 1, 1, 1, 1, 1, 1, 1,
  4858. 1, 1, 1, 1, 1, 1, 1, 1,
  4859. 1, 1, 1, 1, 1, 1, 1, 1,
  4860. 1, 1, 1, 1, 1, 1, 1, 1,
  4861. 1, 1, 1, 1, 1, 754, 754, 754,
  4862. 754, 754, 754, 754, 754, 754, 754, 754,
  4863. 754, 754, 754, 754, 754, 754, 754, 754,
  4864. 754, 754, 754, 754, 754, 754, 754, 754,
  4865. 754, 754, 754, 755, 756, 756, 756, 756,
  4866. 756, 756, 756, 756, 756, 756, 756, 756,
  4867. 757, 756, 756, 758, 759, 759, 759, 760,
  4868. 1, 749, 749, 749, 749, 749, 749, 749,
  4869. 749, 749, 749, 749, 749, 749, 749, 749,
  4870. 749, 749, 749, 749, 749, 749, 749, 749,
  4871. 749, 749, 749, 749, 749, 749, 749, 749,
  4872. 749, 749, 749, 749, 749, 749, 749, 749,
  4873. 749, 749, 749, 749, 749, 749, 749, 749,
  4874. 749, 749, 749, 749, 749, 749, 749, 749,
  4875. 749, 749, 749, 749, 749, 749, 749, 749,
  4876. 749, 1, 754, 754, 754, 754, 754, 754,
  4877. 754, 754, 754, 754, 754, 754, 754, 754,
  4878. 754, 754, 754, 754, 754, 754, 754, 754,
  4879. 754, 754, 754, 754, 754, 754, 754, 754,
  4880. 754, 754, 1, 754, 754, 754, 754, 754,
  4881. 754, 754, 754, 754, 754, 754, 754, 754,
  4882. 754, 754, 754, 754, 754, 754, 754, 754,
  4883. 754, 754, 754, 754, 754, 754, 754, 754,
  4884. 754, 754, 754, 754, 754, 754, 754, 754,
  4885. 754, 754, 754, 754, 754, 754, 754, 754,
  4886. 754, 754, 754, 754, 754, 754, 754, 754,
  4887. 754, 754, 754, 754, 754, 754, 754, 754,
  4888. 754, 754, 754, 1, 754, 754, 754, 754,
  4889. 754, 754, 754, 754, 754, 754, 754, 754,
  4890. 754, 754, 754, 754, 754, 754, 754, 754,
  4891. 754, 754, 754, 754, 754, 754, 754, 754,
  4892. 754, 754, 754, 754, 1, 756, 756, 756,
  4893. 756, 756, 756, 756, 756, 756, 756, 756,
  4894. 756, 756, 756, 756, 756, 756, 756, 756,
  4895. 756, 756, 756, 756, 756, 756, 756, 756,
  4896. 756, 756, 756, 756, 756, 756, 756, 756,
  4897. 756, 756, 756, 756, 756, 756, 756, 756,
  4898. 756, 756, 756, 756, 756, 1, 756, 756,
  4899. 756, 756, 756, 756, 756, 756, 756, 756,
  4900. 756, 756, 756, 756, 756, 756, 756, 756,
  4901. 756, 756, 756, 756, 756, 756, 756, 756,
  4902. 756, 756, 756, 756, 756, 756, 756, 756,
  4903. 756, 756, 756, 756, 756, 756, 756, 756,
  4904. 756, 756, 756, 756, 756, 756, 756, 756,
  4905. 756, 756, 756, 756, 756, 756, 756, 756,
  4906. 756, 756, 756, 756, 756, 756, 1, 756,
  4907. 756, 756, 756, 756, 756, 756, 756, 756,
  4908. 756, 756, 756, 756, 756, 756, 756, 1,
  4909. 846, 1, 1, 1, 847, 1, 1, 1,
  4910. 1, 1, 1, 1, 1, 1, 1, 1,
  4911. 1, 1, 1, 1, 1, 1, 1, 846,
  4912. 848, 849, 848, 848, 848, 848, 848, 850,
  4913. 1, 848, 848, 1, 848, 851, 848, 848,
  4914. 848, 848, 848, 848, 848, 848, 848, 848,
  4915. 848, 1, 1, 550, 848, 1, 848, 1,
  4916. 848, 848, 848, 848, 848, 848, 848, 848,
  4917. 848, 848, 848, 848, 848, 848, 848, 848,
  4918. 848, 848, 848, 848, 848, 848, 848, 848,
  4919. 848, 848, 852, 1, 1, 848, 848, 848,
  4920. 848, 848, 848, 848, 848, 848, 848, 848,
  4921. 848, 848, 848, 848, 848, 848, 848, 848,
  4922. 848, 848, 848, 848, 848, 848, 848, 848,
  4923. 848, 848, 848, 848, 848, 848, 1, 1,
  4924. 1, 1, 1, 1, 1, 1, 1, 1,
  4925. 1, 1, 1, 1, 1, 1, 1, 1,
  4926. 1, 1, 1, 1, 1, 1, 1, 1,
  4927. 1, 1, 1, 1, 1, 1, 1, 1,
  4928. 1, 1, 1, 1, 1, 1, 1, 1,
  4929. 1, 1, 1, 1, 1, 1, 1, 1,
  4930. 1, 1, 1, 1, 1, 1, 1, 1,
  4931. 1, 1, 1, 1, 1, 1, 1, 1,
  4932. 1, 853, 853, 853, 853, 853, 853, 853,
  4933. 853, 853, 853, 853, 853, 853, 853, 853,
  4934. 853, 853, 853, 853, 853, 853, 853, 853,
  4935. 853, 853, 853, 853, 853, 853, 853, 854,
  4936. 855, 855, 855, 855, 855, 855, 855, 855,
  4937. 855, 855, 855, 855, 856, 855, 855, 857,
  4938. 858, 858, 858, 859, 1, 860, 861, 860,
  4939. 860, 860, 860, 860, 1, 1, 860, 860,
  4940. 1, 860, 752, 860, 860, 860, 860, 860,
  4941. 860, 860, 860, 860, 860, 860, 1, 1,
  4942. 1, 860, 1, 860, 1, 860, 860, 860,
  4943. 860, 860, 860, 860, 860, 860, 860, 860,
  4944. 860, 860, 860, 860, 860, 860, 860, 860,
  4945. 860, 860, 860, 860, 860, 860, 860, 1,
  4946. 1, 1, 860, 860, 860, 860, 860, 860,
  4947. 860, 860, 860, 860, 860, 860, 860, 860,
  4948. 860, 860, 860, 860, 860, 860, 860, 860,
  4949. 860, 860, 860, 860, 860, 860, 860, 860,
  4950. 860, 860, 860, 1, 1, 1, 1, 1,
  4951. 1, 1, 1, 1, 1, 1, 1, 1,
  4952. 1, 1, 1, 1, 1, 1, 1, 1,
  4953. 1, 1, 1, 1, 1, 1, 1, 1,
  4954. 1, 1, 1, 1, 1, 1, 1, 1,
  4955. 1, 1, 1, 1, 1, 1, 1, 1,
  4956. 1, 1, 1, 1, 1, 1, 1, 1,
  4957. 1, 1, 1, 1, 1, 1, 1, 1,
  4958. 1, 1, 1, 1, 1, 1, 862, 862,
  4959. 862, 862, 862, 862, 862, 862, 862, 862,
  4960. 862, 862, 862, 862, 862, 862, 862, 862,
  4961. 862, 862, 862, 862, 862, 862, 862, 862,
  4962. 862, 862, 862, 862, 863, 864, 864, 864,
  4963. 864, 864, 864, 864, 864, 864, 864, 864,
  4964. 864, 865, 864, 864, 866, 867, 867, 867,
  4965. 868, 1, 869, 1, 1, 1, 870, 1,
  4966. 1, 1, 1, 1, 1, 1, 1, 1,
  4967. 1, 1, 1, 1, 1, 1, 1, 1,
  4968. 1, 869, 860, 861, 860, 860, 860, 860,
  4969. 860, 871, 1, 860, 860, 765, 860, 752,
  4970. 860, 860, 860, 860, 860, 860, 860, 860,
  4971. 860, 860, 860, 1, 767, 1, 860, 1,
  4972. 860, 1, 860, 860, 860, 860, 860, 860,
  4973. 860, 860, 860, 860, 860, 860, 860, 860,
  4974. 860, 860, 860, 860, 860, 860, 860, 860,
  4975. 860, 860, 860, 860, 1, 1, 1, 860,
  4976. 860, 860, 860, 860, 860, 860, 860, 860,
  4977. 860, 860, 860, 860, 860, 860, 860, 860,
  4978. 860, 860, 860, 860, 860, 860, 860, 860,
  4979. 860, 860, 860, 860, 860, 860, 860, 860,
  4980. 1, 1, 1, 1, 1, 1, 1, 1,
  4981. 1, 1, 1, 1, 1, 1, 1, 1,
  4982. 1, 1, 1, 1, 1, 1, 1, 1,
  4983. 1, 1, 1, 1, 1, 1, 1, 1,
  4984. 1, 1, 1, 1, 1, 1, 1, 1,
  4985. 1, 1, 1, 1, 1, 1, 1, 1,
  4986. 1, 1, 1, 1, 1, 1, 1, 1,
  4987. 1, 1, 1, 1, 1, 1, 1, 1,
  4988. 1, 1, 1, 862, 862, 862, 862, 862,
  4989. 862, 862, 862, 862, 862, 862, 862, 862,
  4990. 862, 862, 862, 862, 862, 862, 862, 862,
  4991. 862, 862, 862, 862, 862, 862, 862, 862,
  4992. 862, 863, 864, 864, 864, 864, 864, 864,
  4993. 864, 864, 864, 864, 864, 864, 865, 864,
  4994. 864, 866, 867, 867, 867, 868, 1, 869,
  4995. 1, 1, 1, 870, 1, 1, 1, 1,
  4996. 1, 1, 1, 1, 1, 1, 1, 1,
  4997. 1, 1, 1, 1, 1, 1, 869, 1,
  4998. 1, 1, 1, 1, 1, 1, 871, 1,
  4999. 1, 1, 765, 1, 1, 1, 1, 1,
  5000. 1, 1, 1, 1, 1, 1, 1, 1,
  5001. 1, 767, 1, 872, 1, 869, 1, 1,
  5002. 1, 1, 1, 1, 1, 1, 1, 1,
  5003. 1, 1, 1, 1, 1, 1, 1, 1,
  5004. 1, 1, 1, 1, 869, 1, 873, 1,
  5005. 1, 1, 874, 1, 1, 1, 1, 1,
  5006. 1, 1, 1, 1, 1, 1, 1, 1,
  5007. 1, 1, 1, 1, 1, 873, 1, 1,
  5008. 1, 1, 1, 1, 1, 875, 1, 1,
  5009. 1, 774, 1, 1, 1, 1, 1, 1,
  5010. 1, 1, 1, 1, 1, 1, 1, 1,
  5011. 776, 1, 876, 876, 876, 876, 876, 876,
  5012. 876, 876, 861, 1, 876, 876, 877, 876,
  5013. 876, 876, 876, 876, 876, 876, 876, 876,
  5014. 876, 876, 876, 876, 876, 876, 876, 876,
  5015. 876, 861, 876, 1, 876, 876, 876, 876,
  5016. 876, 876, 876, 876, 876, 876, 876, 876,
  5017. 876, 876, 876, 876, 876, 876, 876, 876,
  5018. 876, 876, 876, 876, 876, 876, 876, 876,
  5019. 876, 876, 876, 876, 876, 876, 876, 876,
  5020. 876, 876, 876, 876, 876, 876, 876, 876,
  5021. 876, 876, 876, 876, 876, 876, 876, 876,
  5022. 876, 876, 876, 876, 876, 878, 876, 876,
  5023. 876, 876, 876, 876, 876, 876, 876, 876,
  5024. 876, 876, 876, 876, 876, 876, 876, 876,
  5025. 876, 876, 876, 876, 876, 876, 876, 876,
  5026. 876, 876, 876, 876, 876, 876, 876, 876,
  5027. 876, 1, 1, 1, 1, 1, 1, 1,
  5028. 1, 1, 1, 1, 1, 1, 1, 1,
  5029. 1, 1, 1, 1, 1, 1, 1, 1,
  5030. 1, 1, 1, 1, 1, 1, 1, 1,
  5031. 1, 1, 1, 1, 1, 1, 1, 1,
  5032. 1, 1, 1, 1, 1, 1, 1, 1,
  5033. 1, 1, 1, 1, 1, 1, 1, 1,
  5034. 1, 1, 1, 1, 1, 1, 1, 1,
  5035. 1, 1, 1, 879, 879, 879, 879, 879,
  5036. 879, 879, 879, 879, 879, 879, 879, 879,
  5037. 879, 879, 879, 879, 879, 879, 879, 879,
  5038. 879, 879, 879, 879, 879, 879, 879, 879,
  5039. 879, 880, 881, 881, 881, 881, 881, 881,
  5040. 881, 881, 881, 881, 881, 881, 882, 881,
  5041. 881, 883, 884, 884, 884, 885, 1, 876,
  5042. 876, 876, 876, 876, 876, 876, 876, 876,
  5043. 1, 876, 876, 886, 876, 876, 876, 876,
  5044. 876, 876, 876, 876, 876, 876, 876, 876,
  5045. 876, 876, 876, 876, 876, 876, 876, 876,
  5046. 860, 876, 876, 876, 876, 876, 876, 876,
  5047. 876, 876, 876, 876, 876, 876, 876, 876,
  5048. 876, 876, 876, 876, 876, 876, 876, 876,
  5049. 876, 876, 876, 876, 876, 876, 876, 876,
  5050. 876, 876, 876, 876, 876, 876, 876, 876,
  5051. 876, 876, 876, 876, 876, 876, 876, 876,
  5052. 876, 876, 876, 876, 876, 876, 876, 876,
  5053. 876, 876, 878, 876, 876, 876, 876, 876,
  5054. 876, 876, 876, 876, 876, 876, 876, 876,
  5055. 876, 876, 876, 876, 876, 876, 876, 876,
  5056. 876, 876, 876, 876, 876, 876, 876, 876,
  5057. 876, 876, 876, 876, 876, 876, 1, 1,
  5058. 1, 1, 1, 1, 1, 1, 1, 1,
  5059. 1, 1, 1, 1, 1, 1, 1, 1,
  5060. 1, 1, 1, 1, 1, 1, 1, 1,
  5061. 1, 1, 1, 1, 1, 1, 1, 1,
  5062. 1, 1, 1, 1, 1, 1, 1, 1,
  5063. 1, 1, 1, 1, 1, 1, 1, 1,
  5064. 1, 1, 1, 1, 1, 1, 1, 1,
  5065. 1, 1, 1, 1, 1, 1, 1, 1,
  5066. 879, 879, 879, 879, 879, 879, 879, 879,
  5067. 879, 879, 879, 879, 879, 879, 879, 879,
  5068. 879, 879, 879, 879, 879, 879, 879, 879,
  5069. 879, 879, 879, 879, 879, 879, 880, 881,
  5070. 881, 881, 881, 881, 881, 881, 881, 881,
  5071. 881, 881, 881, 882, 881, 881, 883, 884,
  5072. 884, 884, 885, 1, 887, 1, 876, 1,
  5073. 1, 1, 1, 1, 1, 1, 1, 1,
  5074. 1, 1, 1, 1, 1, 1, 1, 1,
  5075. 1, 1, 1, 1, 1, 876, 1, 876,
  5076. 876, 876, 876, 876, 876, 876, 876, 876,
  5077. 876, 876, 876, 876, 876, 876, 876, 876,
  5078. 876, 876, 876, 876, 876, 876, 876, 876,
  5079. 876, 876, 876, 876, 876, 876, 876, 876,
  5080. 876, 876, 876, 876, 876, 876, 876, 876,
  5081. 876, 876, 876, 876, 876, 876, 876, 876,
  5082. 876, 876, 876, 876, 876, 876, 876, 876,
  5083. 876, 876, 876, 876, 876, 876, 876, 876,
  5084. 876, 876, 876, 876, 876, 876, 876, 876,
  5085. 876, 876, 876, 876, 876, 876, 876, 876,
  5086. 876, 876, 876, 876, 876, 876, 876, 876,
  5087. 876, 876, 876, 876, 876, 876, 876, 876,
  5088. 876, 876, 876, 876, 876, 876, 876, 876,
  5089. 876, 876, 876, 876, 876, 876, 876, 876,
  5090. 876, 876, 876, 876, 876, 876, 876, 876,
  5091. 876, 876, 876, 876, 876, 876, 876, 1,
  5092. 1, 1, 1, 1, 1, 1, 1, 1,
  5093. 1, 1, 1, 1, 1, 1, 1, 1,
  5094. 1, 1, 1, 1, 1, 1, 1, 1,
  5095. 1, 1, 1, 1, 1, 1, 1, 1,
  5096. 1, 1, 1, 1, 1, 1, 1, 1,
  5097. 1, 1, 1, 1, 1, 1, 1, 1,
  5098. 1, 1, 1, 1, 1, 1, 1, 1,
  5099. 1, 1, 1, 1, 1, 1, 1, 1,
  5100. 1, 879, 879, 879, 879, 879, 879, 879,
  5101. 879, 879, 879, 879, 879, 879, 879, 879,
  5102. 879, 879, 879, 879, 879, 879, 879, 879,
  5103. 879, 879, 879, 879, 879, 879, 879, 880,
  5104. 881, 881, 881, 881, 881, 881, 881, 881,
  5105. 881, 881, 881, 881, 882, 881, 881, 883,
  5106. 884, 884, 884, 885, 1, 876, 876, 876,
  5107. 876, 876, 876, 876, 876, 876, 876, 876,
  5108. 876, 876, 876, 876, 876, 876, 876, 876,
  5109. 876, 876, 876, 876, 876, 876, 876, 876,
  5110. 876, 876, 876, 876, 876, 876, 876, 876,
  5111. 876, 876, 876, 876, 876, 876, 876, 876,
  5112. 876, 876, 876, 876, 876, 876, 876, 876,
  5113. 876, 876, 876, 876, 876, 876, 876, 876,
  5114. 876, 876, 876, 876, 876, 1, 879, 879,
  5115. 879, 879, 879, 879, 879, 879, 879, 879,
  5116. 879, 879, 879, 879, 879, 879, 879, 879,
  5117. 879, 879, 879, 879, 879, 879, 879, 879,
  5118. 879, 879, 879, 879, 879, 879, 1, 879,
  5119. 879, 879, 879, 879, 879, 879, 879, 879,
  5120. 879, 879, 879, 879, 879, 879, 879, 879,
  5121. 879, 879, 879, 879, 879, 879, 879, 879,
  5122. 879, 879, 879, 879, 879, 879, 879, 879,
  5123. 879, 879, 879, 879, 879, 879, 879, 879,
  5124. 879, 879, 879, 879, 879, 879, 879, 879,
  5125. 879, 879, 879, 879, 879, 879, 879, 879,
  5126. 879, 879, 879, 879, 879, 879, 879, 1,
  5127. 879, 879, 879, 879, 879, 879, 879, 879,
  5128. 879, 879, 879, 879, 879, 879, 879, 879,
  5129. 879, 879, 879, 879, 879, 879, 879, 879,
  5130. 879, 879, 879, 879, 879, 879, 879, 879,
  5131. 1, 881, 881, 881, 881, 881, 881, 881,
  5132. 881, 881, 881, 881, 881, 881, 881, 881,
  5133. 881, 881, 881, 881, 881, 881, 881, 881,
  5134. 881, 881, 881, 881, 881, 881, 881, 881,
  5135. 881, 881, 881, 881, 881, 881, 881, 881,
  5136. 881, 881, 881, 881, 881, 881, 881, 881,
  5137. 881, 1, 881, 881, 881, 881, 881, 881,
  5138. 881, 881, 881, 881, 881, 881, 881, 881,
  5139. 881, 881, 881, 881, 881, 881, 881, 881,
  5140. 881, 881, 881, 881, 881, 881, 881, 881,
  5141. 881, 881, 881, 881, 881, 881, 881, 881,
  5142. 881, 881, 881, 881, 881, 881, 881, 881,
  5143. 881, 881, 881, 881, 881, 881, 881, 881,
  5144. 881, 881, 881, 881, 881, 881, 881, 881,
  5145. 881, 881, 1, 881, 881, 881, 881, 881,
  5146. 881, 881, 881, 881, 881, 881, 881, 881,
  5147. 881, 881, 881, 1, 888, 1, 861, 1,
  5148. 1, 1, 1, 1, 1, 1, 1, 1,
  5149. 1, 1, 1, 1, 1, 1, 1, 1,
  5150. 1, 1, 1, 1, 1, 861, 1, 860,
  5151. 860, 860, 860, 860, 860, 860, 860, 860,
  5152. 860, 860, 860, 860, 860, 860, 860, 860,
  5153. 860, 860, 860, 860, 860, 860, 860, 860,
  5154. 860, 860, 860, 860, 860, 860, 860, 860,
  5155. 860, 860, 860, 860, 860, 860, 860, 860,
  5156. 860, 860, 860, 860, 860, 860, 860, 860,
  5157. 860, 860, 860, 860, 860, 860, 860, 860,
  5158. 860, 860, 860, 860, 860, 860, 860, 1,
  5159. 862, 862, 862, 862, 862, 862, 862, 862,
  5160. 862, 862, 862, 862, 862, 862, 862, 862,
  5161. 862, 862, 862, 862, 862, 862, 862, 862,
  5162. 862, 862, 862, 862, 862, 862, 862, 862,
  5163. 1, 862, 862, 862, 862, 862, 862, 862,
  5164. 862, 862, 862, 862, 862, 862, 862, 862,
  5165. 862, 862, 862, 862, 862, 862, 862, 862,
  5166. 862, 862, 862, 862, 862, 862, 862, 862,
  5167. 862, 862, 862, 862, 862, 862, 862, 862,
  5168. 862, 862, 862, 862, 862, 862, 862, 862,
  5169. 862, 862, 862, 862, 862, 862, 862, 862,
  5170. 862, 862, 862, 862, 862, 862, 862, 862,
  5171. 862, 1, 862, 862, 862, 862, 862, 862,
  5172. 862, 862, 862, 862, 862, 862, 862, 862,
  5173. 862, 862, 862, 862, 862, 862, 862, 862,
  5174. 862, 862, 862, 862, 862, 862, 862, 862,
  5175. 862, 862, 1, 864, 864, 864, 864, 864,
  5176. 864, 864, 864, 864, 864, 864, 864, 864,
  5177. 864, 864, 864, 864, 864, 864, 864, 864,
  5178. 864, 864, 864, 864, 864, 864, 864, 864,
  5179. 864, 864, 864, 864, 864, 864, 864, 864,
  5180. 864, 864, 864, 864, 864, 864, 864, 864,
  5181. 864, 864, 864, 1, 864, 864, 864, 864,
  5182. 864, 864, 864, 864, 864, 864, 864, 864,
  5183. 864, 864, 864, 864, 864, 864, 864, 864,
  5184. 864, 864, 864, 864, 864, 864, 864, 864,
  5185. 864, 864, 864, 864, 864, 864, 864, 864,
  5186. 864, 864, 864, 864, 864, 864, 864, 864,
  5187. 864, 864, 864, 864, 864, 864, 864, 864,
  5188. 864, 864, 864, 864, 864, 864, 864, 864,
  5189. 864, 864, 864, 864, 1, 864, 864, 864,
  5190. 864, 864, 864, 864, 864, 864, 864, 864,
  5191. 864, 864, 864, 864, 864, 1, 753, 753,
  5192. 753, 753, 753, 753, 753, 753, 753, 1,
  5193. 753, 753, 889, 753, 753, 753, 753, 753,
  5194. 753, 753, 753, 753, 753, 753, 753, 753,
  5195. 753, 753, 753, 753, 753, 753, 753, 753,
  5196. 753, 753, 753, 753, 753, 753, 753, 753,
  5197. 753, 753, 753, 753, 753, 753, 753, 753,
  5198. 753, 753, 753, 753, 753, 753, 753, 753,
  5199. 753, 753, 753, 753, 753, 753, 753, 753,
  5200. 753, 753, 753, 753, 753, 753, 753, 753,
  5201. 753, 753, 753, 753, 753, 753, 753, 753,
  5202. 753, 753, 753, 753, 753, 753, 753, 753,
  5203. 1, 890, 869, 753, 753, 753, 753, 753,
  5204. 753, 753, 753, 753, 753, 753, 753, 753,
  5205. 753, 753, 753, 753, 753, 753, 753, 753,
  5206. 753, 753, 753, 753, 753, 753, 753, 753,
  5207. 753, 753, 753, 753, 753, 1, 1, 1,
  5208. 1, 1, 1, 1, 1, 1, 1, 1,
  5209. 1, 1, 1, 1, 1, 1, 1, 1,
  5210. 1, 1, 1, 1, 1, 1, 1, 1,
  5211. 1, 1, 1, 1, 1, 1, 1, 1,
  5212. 1, 1, 1, 1, 1, 1, 1, 1,
  5213. 1, 1, 1, 1, 1, 1, 1, 1,
  5214. 1, 1, 1, 1, 1, 1, 1, 1,
  5215. 1, 1, 1, 1, 1, 1, 1, 891,
  5216. 891, 891, 891, 891, 891, 891, 891, 891,
  5217. 891, 891, 891, 891, 891, 891, 891, 891,
  5218. 891, 891, 891, 891, 891, 891, 891, 891,
  5219. 891, 891, 891, 891, 891, 892, 893, 893,
  5220. 893, 893, 893, 893, 893, 893, 893, 893,
  5221. 893, 893, 894, 893, 893, 895, 896, 896,
  5222. 896, 897, 1, 898, 1, 753, 1, 1,
  5223. 1, 1, 1, 1, 1, 1, 1, 1,
  5224. 1, 1, 1, 1, 1, 1, 1, 1,
  5225. 1, 1, 1, 1, 753, 1, 753, 753,
  5226. 753, 753, 753, 753, 753, 753, 753, 753,
  5227. 753, 753, 753, 753, 753, 753, 753, 753,
  5228. 753, 753, 753, 753, 753, 753, 753, 753,
  5229. 753, 753, 753, 753, 753, 753, 753, 753,
  5230. 753, 753, 753, 753, 753, 753, 753, 753,
  5231. 753, 753, 753, 753, 753, 753, 753, 753,
  5232. 753, 753, 753, 753, 753, 753, 753, 753,
  5233. 753, 753, 753, 753, 753, 753, 753, 753,
  5234. 753, 753, 753, 753, 753, 753, 753, 753,
  5235. 753, 753, 753, 753, 753, 753, 753, 753,
  5236. 753, 753, 753, 753, 753, 753, 753, 753,
  5237. 753, 753, 753, 753, 753, 753, 753, 753,
  5238. 753, 753, 753, 753, 753, 753, 753, 753,
  5239. 753, 753, 753, 753, 753, 753, 753, 753,
  5240. 753, 753, 753, 753, 753, 753, 753, 753,
  5241. 753, 753, 753, 753, 753, 753, 1, 1,
  5242. 1, 1, 1, 1, 1, 1, 1, 1,
  5243. 1, 1, 1, 1, 1, 1, 1, 1,
  5244. 1, 1, 1, 1, 1, 1, 1, 1,
  5245. 1, 1, 1, 1, 1, 1, 1, 1,
  5246. 1, 1, 1, 1, 1, 1, 1, 1,
  5247. 1, 1, 1, 1, 1, 1, 1, 1,
  5248. 1, 1, 1, 1, 1, 1, 1, 1,
  5249. 1, 1, 1, 1, 1, 1, 1, 1,
  5250. 891, 891, 891, 891, 891, 891, 891, 891,
  5251. 891, 891, 891, 891, 891, 891, 891, 891,
  5252. 891, 891, 891, 891, 891, 891, 891, 891,
  5253. 891, 891, 891, 891, 891, 891, 892, 893,
  5254. 893, 893, 893, 893, 893, 893, 893, 893,
  5255. 893, 893, 893, 894, 893, 893, 895, 896,
  5256. 896, 896, 897, 1, 753, 753, 753, 753,
  5257. 753, 753, 753, 753, 753, 753, 753, 753,
  5258. 753, 753, 753, 753, 753, 753, 753, 753,
  5259. 753, 753, 753, 753, 753, 753, 753, 753,
  5260. 753, 753, 753, 753, 753, 753, 753, 753,
  5261. 753, 753, 753, 753, 753, 753, 753, 753,
  5262. 753, 753, 753, 753, 753, 753, 753, 753,
  5263. 753, 753, 753, 753, 753, 753, 753, 753,
  5264. 753, 753, 753, 753, 1, 891, 891, 891,
  5265. 891, 891, 891, 891, 891, 891, 891, 891,
  5266. 891, 891, 891, 891, 891, 891, 891, 891,
  5267. 891, 891, 891, 891, 891, 891, 891, 891,
  5268. 891, 891, 891, 891, 891, 1, 891, 891,
  5269. 891, 891, 891, 891, 891, 891, 891, 891,
  5270. 891, 891, 891, 891, 891, 891, 891, 891,
  5271. 891, 891, 891, 891, 891, 891, 891, 891,
  5272. 891, 891, 891, 891, 891, 891, 891, 891,
  5273. 891, 891, 891, 891, 891, 891, 891, 891,
  5274. 891, 891, 891, 891, 891, 891, 891, 891,
  5275. 891, 891, 891, 891, 891, 891, 891, 891,
  5276. 891, 891, 891, 891, 891, 891, 1, 891,
  5277. 891, 891, 891, 891, 891, 891, 891, 891,
  5278. 891, 891, 891, 891, 891, 891, 891, 891,
  5279. 891, 891, 891, 891, 891, 891, 891, 891,
  5280. 891, 891, 891, 891, 891, 891, 891, 1,
  5281. 893, 893, 893, 893, 893, 893, 893, 893,
  5282. 893, 893, 893, 893, 893, 893, 893, 893,
  5283. 893, 893, 893, 893, 893, 893, 893, 893,
  5284. 893, 893, 893, 893, 893, 893, 893, 893,
  5285. 893, 893, 893, 893, 893, 893, 893, 893,
  5286. 893, 893, 893, 893, 893, 893, 893, 893,
  5287. 1, 893, 893, 893, 893, 893, 893, 893,
  5288. 893, 893, 893, 893, 893, 893, 893, 893,
  5289. 893, 893, 893, 893, 893, 893, 893, 893,
  5290. 893, 893, 893, 893, 893, 893, 893, 893,
  5291. 893, 893, 893, 893, 893, 893, 893, 893,
  5292. 893, 893, 893, 893, 893, 893, 893, 893,
  5293. 893, 893, 893, 893, 893, 893, 893, 893,
  5294. 893, 893, 893, 893, 893, 893, 893, 893,
  5295. 893, 1, 893, 893, 893, 893, 893, 893,
  5296. 893, 893, 893, 893, 893, 893, 893, 893,
  5297. 893, 893, 1, 709, 709, 709, 709, 709,
  5298. 709, 709, 709, 709, 709, 709, 709, 709,
  5299. 709, 709, 709, 709, 709, 709, 709, 709,
  5300. 709, 709, 709, 709, 709, 709, 709, 709,
  5301. 709, 709, 709, 709, 709, 709, 709, 709,
  5302. 709, 709, 709, 709, 709, 709, 709, 709,
  5303. 709, 709, 709, 709, 709, 709, 709, 709,
  5304. 709, 709, 709, 709, 709, 709, 709, 709,
  5305. 709, 709, 709, 1, 712, 712, 712, 712,
  5306. 712, 712, 712, 712, 712, 712, 712, 712,
  5307. 712, 712, 712, 712, 712, 712, 712, 712,
  5308. 712, 712, 712, 712, 712, 712, 712, 712,
  5309. 712, 712, 712, 712, 1, 712, 712, 712,
  5310. 712, 712, 712, 712, 712, 712, 712, 712,
  5311. 712, 712, 712, 712, 712, 712, 712, 712,
  5312. 712, 712, 712, 712, 712, 712, 712, 712,
  5313. 712, 712, 712, 712, 712, 712, 712, 712,
  5314. 712, 712, 712, 712, 712, 712, 712, 712,
  5315. 712, 712, 712, 712, 712, 712, 712, 712,
  5316. 712, 712, 712, 712, 712, 712, 712, 712,
  5317. 712, 712, 712, 712, 712, 1, 712, 712,
  5318. 712, 712, 712, 712, 712, 712, 712, 712,
  5319. 712, 712, 712, 712, 712, 712, 712, 712,
  5320. 712, 712, 712, 712, 712, 712, 712, 712,
  5321. 712, 712, 712, 712, 712, 712, 1, 714,
  5322. 714, 714, 714, 714, 714, 714, 714, 714,
  5323. 714, 714, 714, 714, 714, 714, 714, 714,
  5324. 714, 714, 714, 714, 714, 714, 714, 714,
  5325. 714, 714, 714, 714, 714, 714, 714, 714,
  5326. 714, 714, 714, 714, 714, 714, 714, 714,
  5327. 714, 714, 714, 714, 714, 714, 714, 1,
  5328. 714, 714, 714, 714, 714, 714, 714, 714,
  5329. 714, 714, 714, 714, 714, 714, 714, 714,
  5330. 714, 714, 714, 714, 714, 714, 714, 714,
  5331. 714, 714, 714, 714, 714, 714, 714, 714,
  5332. 714, 714, 714, 714, 714, 714, 714, 714,
  5333. 714, 714, 714, 714, 714, 714, 714, 714,
  5334. 714, 714, 714, 714, 714, 714, 714, 714,
  5335. 714, 714, 714, 714, 714, 714, 714, 714,
  5336. 1, 714, 714, 714, 714, 714, 714, 714,
  5337. 714, 714, 714, 714, 714, 714, 714, 714,
  5338. 714, 1, 899, 899, 899, 899, 899, 899,
  5339. 899, 899, 899, 1, 899, 899, 900, 899,
  5340. 899, 899, 899, 899, 899, 899, 899, 899,
  5341. 899, 899, 899, 899, 899, 899, 899, 899,
  5342. 899, 899, 899, 901, 899, 899, 899, 899,
  5343. 899, 899, 899, 899, 899, 899, 899, 899,
  5344. 899, 899, 899, 899, 899, 899, 899, 899,
  5345. 899, 899, 899, 899, 899, 899, 899, 899,
  5346. 899, 899, 899, 899, 899, 899, 899, 899,
  5347. 899, 899, 899, 899, 899, 899, 899, 899,
  5348. 899, 899, 899, 899, 899, 899, 899, 899,
  5349. 899, 899, 899, 899, 899, 902, 899, 899,
  5350. 899, 899, 899, 899, 899, 899, 899, 899,
  5351. 899, 899, 899, 899, 899, 899, 899, 899,
  5352. 899, 899, 899, 899, 899, 899, 899, 899,
  5353. 899, 899, 899, 899, 899, 899, 899, 899,
  5354. 899, 1, 1, 1, 1, 1, 1, 1,
  5355. 1, 1, 1, 1, 1, 1, 1, 1,
  5356. 1, 1, 1, 1, 1, 1, 1, 1,
  5357. 1, 1, 1, 1, 1, 1, 1, 1,
  5358. 1, 1, 1, 1, 1, 1, 1, 1,
  5359. 1, 1, 1, 1, 1, 1, 1, 1,
  5360. 1, 1, 1, 1, 1, 1, 1, 1,
  5361. 1, 1, 1, 1, 1, 1, 1, 1,
  5362. 1, 1, 1, 903, 903, 903, 903, 903,
  5363. 903, 903, 903, 903, 903, 903, 903, 903,
  5364. 903, 903, 903, 903, 903, 903, 903, 903,
  5365. 903, 903, 903, 903, 903, 903, 903, 903,
  5366. 903, 904, 905, 905, 905, 905, 905, 905,
  5367. 905, 905, 905, 905, 905, 905, 906, 905,
  5368. 905, 907, 908, 908, 908, 909, 1, 910,
  5369. 910, 910, 910, 910, 910, 910, 910, 910,
  5370. 1, 910, 910, 911, 910, 910, 910, 910,
  5371. 910, 910, 910, 910, 910, 910, 910, 910,
  5372. 910, 910, 910, 910, 910, 910, 910, 910,
  5373. 912, 910, 910, 910, 910, 910, 910, 910,
  5374. 910, 910, 910, 910, 910, 910, 910, 910,
  5375. 910, 910, 910, 910, 910, 910, 910, 910,
  5376. 910, 910, 910, 910, 910, 910, 910, 910,
  5377. 910, 910, 910, 910, 910, 910, 910, 910,
  5378. 910, 910, 910, 910, 910, 910, 910, 910,
  5379. 910, 910, 910, 910, 910, 910, 910, 910,
  5380. 910, 910, 913, 910, 910, 910, 910, 910,
  5381. 910, 910, 910, 910, 910, 910, 910, 910,
  5382. 910, 910, 910, 910, 910, 910, 910, 910,
  5383. 910, 910, 910, 910, 910, 910, 910, 910,
  5384. 910, 910, 910, 910, 910, 910, 1, 1,
  5385. 1, 1, 1, 1, 1, 1, 1, 1,
  5386. 1, 1, 1, 1, 1, 1, 1, 1,
  5387. 1, 1, 1, 1, 1, 1, 1, 1,
  5388. 1, 1, 1, 1, 1, 1, 1, 1,
  5389. 1, 1, 1, 1, 1, 1, 1, 1,
  5390. 1, 1, 1, 1, 1, 1, 1, 1,
  5391. 1, 1, 1, 1, 1, 1, 1, 1,
  5392. 1, 1, 1, 1, 1, 1, 1, 1,
  5393. 914, 914, 914, 914, 914, 914, 914, 914,
  5394. 914, 914, 914, 914, 914, 914, 914, 914,
  5395. 914, 914, 914, 914, 914, 914, 914, 914,
  5396. 914, 914, 914, 914, 914, 914, 915, 916,
  5397. 916, 916, 916, 916, 916, 916, 916, 916,
  5398. 916, 916, 916, 917, 916, 916, 918, 919,
  5399. 919, 919, 920, 1, 921, 1, 910, 1,
  5400. 1, 1, 1, 1, 1, 1, 1, 1,
  5401. 1, 1, 1, 1, 1, 1, 1, 1,
  5402. 1, 1, 1, 1, 1, 910, 1, 910,
  5403. 910, 910, 910, 910, 910, 910, 910, 910,
  5404. 910, 910, 910, 910, 910, 910, 910, 910,
  5405. 910, 910, 910, 910, 910, 910, 910, 910,
  5406. 910, 910, 910, 910, 910, 910, 910, 910,
  5407. 910, 910, 910, 910, 910, 910, 910, 910,
  5408. 910, 910, 910, 910, 910, 910, 910, 910,
  5409. 910, 910, 910, 910, 910, 910, 910, 910,
  5410. 910, 910, 910, 910, 910, 910, 910, 910,
  5411. 910, 910, 910, 910, 910, 910, 910, 910,
  5412. 910, 910, 910, 910, 910, 910, 910, 910,
  5413. 910, 910, 910, 910, 910, 910, 910, 910,
  5414. 910, 910, 910, 910, 910, 910, 910, 910,
  5415. 910, 910, 910, 910, 910, 910, 910, 910,
  5416. 910, 910, 910, 910, 910, 910, 910, 910,
  5417. 910, 910, 910, 910, 910, 910, 910, 910,
  5418. 910, 910, 910, 910, 910, 910, 910, 1,
  5419. 1, 1, 1, 1, 1, 1, 1, 1,
  5420. 1, 1, 1, 1, 1, 1, 1, 1,
  5421. 1, 1, 1, 1, 1, 1, 1, 1,
  5422. 1, 1, 1, 1, 1, 1, 1, 1,
  5423. 1, 1, 1, 1, 1, 1, 1, 1,
  5424. 1, 1, 1, 1, 1, 1, 1, 1,
  5425. 1, 1, 1, 1, 1, 1, 1, 1,
  5426. 1, 1, 1, 1, 1, 1, 1, 1,
  5427. 1, 914, 914, 914, 914, 914, 914, 914,
  5428. 914, 914, 914, 914, 914, 914, 914, 914,
  5429. 914, 914, 914, 914, 914, 914, 914, 914,
  5430. 914, 914, 914, 914, 914, 914, 914, 915,
  5431. 916, 916, 916, 916, 916, 916, 916, 916,
  5432. 916, 916, 916, 916, 917, 916, 916, 918,
  5433. 919, 919, 919, 920, 1, 910, 910, 910,
  5434. 910, 910, 910, 910, 910, 910, 910, 910,
  5435. 910, 910, 910, 910, 910, 910, 910, 910,
  5436. 910, 910, 910, 910, 910, 910, 910, 910,
  5437. 910, 910, 910, 910, 910, 910, 910, 910,
  5438. 910, 910, 910, 910, 910, 910, 910, 910,
  5439. 910, 910, 910, 910, 910, 910, 910, 910,
  5440. 910, 910, 910, 910, 910, 910, 910, 910,
  5441. 910, 910, 910, 910, 910, 1, 914, 914,
  5442. 914, 914, 914, 914, 914, 914, 914, 914,
  5443. 914, 914, 914, 914, 914, 914, 914, 914,
  5444. 914, 914, 914, 914, 914, 914, 914, 914,
  5445. 914, 914, 914, 914, 914, 914, 1, 914,
  5446. 914, 914, 914, 914, 914, 914, 914, 914,
  5447. 914, 914, 914, 914, 914, 914, 914, 914,
  5448. 914, 914, 914, 914, 914, 914, 914, 914,
  5449. 914, 914, 914, 914, 914, 914, 914, 914,
  5450. 914, 914, 914, 914, 914, 914, 914, 914,
  5451. 914, 914, 914, 914, 914, 914, 914, 914,
  5452. 914, 914, 914, 914, 914, 914, 914, 914,
  5453. 914, 914, 914, 914, 914, 914, 914, 1,
  5454. 914, 914, 914, 914, 914, 914, 914, 914,
  5455. 914, 914, 914, 914, 914, 914, 914, 914,
  5456. 914, 914, 914, 914, 914, 914, 914, 914,
  5457. 914, 914, 914, 914, 914, 914, 914, 914,
  5458. 1, 916, 916, 916, 916, 916, 916, 916,
  5459. 916, 916, 916, 916, 916, 916, 916, 916,
  5460. 916, 916, 916, 916, 916, 916, 916, 916,
  5461. 916, 916, 916, 916, 916, 916, 916, 916,
  5462. 916, 916, 916, 916, 916, 916, 916, 916,
  5463. 916, 916, 916, 916, 916, 916, 916, 916,
  5464. 916, 1, 916, 916, 916, 916, 916, 916,
  5465. 916, 916, 916, 916, 916, 916, 916, 916,
  5466. 916, 916, 916, 916, 916, 916, 916, 916,
  5467. 916, 916, 916, 916, 916, 916, 916, 916,
  5468. 916, 916, 916, 916, 916, 916, 916, 916,
  5469. 916, 916, 916, 916, 916, 916, 916, 916,
  5470. 916, 916, 916, 916, 916, 916, 916, 916,
  5471. 916, 916, 916, 916, 916, 916, 916, 916,
  5472. 916, 916, 1, 916, 916, 916, 916, 916,
  5473. 916, 916, 916, 916, 916, 916, 916, 916,
  5474. 916, 916, 916, 1, 922, 1, 1, 1,
  5475. 923, 1, 1, 1, 1, 1, 1, 1,
  5476. 1, 1, 1, 1, 1, 1, 1, 1,
  5477. 1, 1, 1, 922, 924, 925, 924, 924,
  5478. 924, 924, 924, 926, 1, 924, 924, 1,
  5479. 924, 1, 924, 924, 924, 924, 924, 924,
  5480. 924, 924, 924, 924, 924, 1, 1, 550,
  5481. 924, 1, 924, 1, 924, 924, 924, 924,
  5482. 924, 924, 924, 924, 924, 924, 924, 924,
  5483. 924, 924, 924, 924, 924, 924, 924, 924,
  5484. 924, 924, 924, 924, 924, 924, 1, 1,
  5485. 1, 924, 924, 924, 924, 924, 924, 924,
  5486. 924, 924, 924, 924, 924, 924, 924, 924,
  5487. 924, 924, 924, 924, 924, 924, 924, 924,
  5488. 924, 924, 924, 924, 924, 924, 924, 924,
  5489. 924, 924, 1, 1, 1, 1, 1, 1,
  5490. 1, 1, 1, 1, 1, 1, 1, 1,
  5491. 1, 1, 1, 1, 1, 1, 1, 1,
  5492. 1, 1, 1, 1, 1, 1, 1, 1,
  5493. 1, 1, 1, 1, 1, 1, 1, 1,
  5494. 1, 1, 1, 1, 1, 1, 1, 1,
  5495. 1, 1, 1, 1, 1, 1, 1, 1,
  5496. 1, 1, 1, 1, 1, 1, 1, 1,
  5497. 1, 1, 1, 1, 1, 927, 927, 927,
  5498. 927, 927, 927, 927, 927, 927, 927, 927,
  5499. 927, 927, 927, 927, 927, 927, 927, 927,
  5500. 927, 927, 927, 927, 927, 927, 927, 927,
  5501. 927, 927, 927, 928, 929, 929, 929, 929,
  5502. 929, 929, 929, 929, 929, 929, 929, 929,
  5503. 930, 929, 929, 931, 932, 932, 932, 933,
  5504. 1, 934, 1, 1, 1, 935, 1, 1,
  5505. 1, 1, 1, 1, 1, 1, 1, 1,
  5506. 1, 1, 1, 1, 1, 1, 1, 1,
  5507. 934, 683, 467, 683, 683, 683, 683, 683,
  5508. 936, 1, 683, 683, 469, 683, 937, 683,
  5509. 683, 683, 683, 683, 683, 683, 683, 683,
  5510. 683, 683, 1, 215, 471, 683, 1, 683,
  5511. 472, 683, 683, 683, 683, 683, 683, 683,
  5512. 683, 683, 683, 683, 683, 683, 683, 683,
  5513. 683, 683, 683, 683, 683, 683, 683, 683,
  5514. 683, 683, 683, 1, 1, 1, 683, 683,
  5515. 683, 683, 683, 683, 683, 683, 683, 683,
  5516. 683, 683, 683, 683, 683, 683, 683, 683,
  5517. 683, 683, 683, 683, 683, 683, 683, 683,
  5518. 683, 683, 683, 683, 683, 683, 683, 1,
  5519. 1, 1, 1, 1, 1, 1, 1, 1,
  5520. 1, 1, 1, 1, 1, 1, 1, 1,
  5521. 1, 1, 1, 1, 1, 1, 1, 1,
  5522. 1, 1, 1, 1, 1, 1, 1, 1,
  5523. 1, 1, 1, 1, 1, 1, 1, 1,
  5524. 1, 1, 1, 1, 1, 1, 1, 1,
  5525. 1, 1, 1, 1, 1, 1, 1, 1,
  5526. 1, 1, 1, 1, 1, 1, 1, 1,
  5527. 1, 1, 687, 687, 687, 687, 687, 687,
  5528. 687, 687, 687, 687, 687, 687, 687, 687,
  5529. 687, 687, 687, 687, 687, 687, 687, 687,
  5530. 687, 687, 687, 687, 687, 687, 687, 687,
  5531. 688, 689, 689, 689, 689, 689, 689, 689,
  5532. 689, 689, 689, 689, 689, 690, 689, 689,
  5533. 691, 692, 692, 692, 693, 1, 938, 1,
  5534. 1, 1, 939, 1, 1, 1, 1, 1,
  5535. 1, 1, 1, 1, 1, 1, 1, 1,
  5536. 1, 1, 1, 1, 1, 938, 482, 483,
  5537. 482, 482, 482, 482, 482, 940, 1, 482,
  5538. 482, 485, 482, 500, 482, 482, 482, 482,
  5539. 482, 482, 482, 482, 482, 482, 482, 1,
  5540. 232, 471, 482, 1, 482, 487, 482, 482,
  5541. 482, 482, 482, 482, 482, 482, 482, 482,
  5542. 482, 482, 482, 482, 482, 482, 482, 482,
  5543. 482, 482, 482, 482, 482, 482, 482, 482,
  5544. 1, 1, 1, 482, 482, 482, 482, 482,
  5545. 482, 482, 482, 482, 482, 482, 482, 482,
  5546. 482, 482, 482, 482, 482, 482, 482, 482,
  5547. 482, 482, 482, 482, 482, 482, 482, 482,
  5548. 482, 482, 482, 482, 1, 1, 1, 1,
  5549. 1, 1, 1, 1, 1, 1, 1, 1,
  5550. 1, 1, 1, 1, 1, 1, 1, 1,
  5551. 1, 1, 1, 1, 1, 1, 1, 1,
  5552. 1, 1, 1, 1, 1, 1, 1, 1,
  5553. 1, 1, 1, 1, 1, 1, 1, 1,
  5554. 1, 1, 1, 1, 1, 1, 1, 1,
  5555. 1, 1, 1, 1, 1, 1, 1, 1,
  5556. 1, 1, 1, 1, 1, 1, 1, 488,
  5557. 488, 488, 488, 488, 488, 488, 488, 488,
  5558. 488, 488, 488, 488, 488, 488, 488, 488,
  5559. 488, 488, 488, 488, 488, 488, 488, 488,
  5560. 488, 488, 488, 488, 488, 489, 490, 490,
  5561. 490, 490, 490, 490, 490, 490, 490, 490,
  5562. 490, 490, 491, 490, 490, 492, 493, 493,
  5563. 493, 494, 1, 941, 1, 942, 1, 1,
  5564. 1, 1, 1, 1, 1, 1, 1, 1,
  5565. 1, 1, 1, 1, 1, 1, 1, 1,
  5566. 1, 1, 1, 1, 942, 1, 943, 1,
  5567. 1, 1, 944, 1, 1, 1, 1, 1,
  5568. 1, 1, 1, 1, 1, 1, 1, 1,
  5569. 1, 1, 1, 1, 1, 943, 527, 528,
  5570. 527, 527, 527, 527, 527, 945, 1, 527,
  5571. 527, 946, 527, 530, 527, 527, 527, 527,
  5572. 527, 527, 527, 527, 527, 527, 527, 1,
  5573. 947, 531, 527, 1, 527, 948, 527, 527,
  5574. 527, 527, 527, 527, 527, 527, 527, 527,
  5575. 527, 527, 527, 527, 527, 527, 527, 527,
  5576. 527, 527, 527, 527, 527, 527, 527, 527,
  5577. 1, 1, 1, 527, 527, 527, 527, 527,
  5578. 527, 527, 527, 527, 527, 527, 527, 527,
  5579. 527, 527, 527, 527, 527, 527, 527, 527,
  5580. 527, 527, 527, 527, 527, 527, 527, 527,
  5581. 527, 527, 527, 527, 1, 1, 1, 1,
  5582. 1, 1, 1, 1, 1, 1, 1, 1,
  5583. 1, 1, 1, 1, 1, 1, 1, 1,
  5584. 1, 1, 1, 1, 1, 1, 1, 1,
  5585. 1, 1, 1, 1, 1, 1, 1, 1,
  5586. 1, 1, 1, 1, 1, 1, 1, 1,
  5587. 1, 1, 1, 1, 1, 1, 1, 1,
  5588. 1, 1, 1, 1, 1, 1, 1, 1,
  5589. 1, 1, 1, 1, 1, 1, 1, 532,
  5590. 532, 532, 532, 532, 532, 532, 532, 532,
  5591. 532, 532, 532, 532, 532, 532, 532, 532,
  5592. 532, 532, 532, 532, 532, 532, 532, 532,
  5593. 532, 532, 532, 532, 532, 533, 534, 534,
  5594. 534, 534, 534, 534, 534, 534, 534, 534,
  5595. 534, 534, 535, 534, 534, 536, 537, 537,
  5596. 537, 538, 1, 949, 949, 949, 949, 949,
  5597. 949, 949, 949, 950, 1, 949, 949, 951,
  5598. 949, 949, 949, 949, 949, 949, 949, 949,
  5599. 949, 949, 949, 949, 949, 949, 949, 949,
  5600. 949, 949, 950, 949, 504, 949, 949, 949,
  5601. 949, 949, 949, 949, 949, 949, 949, 949,
  5602. 949, 949, 949, 949, 949, 949, 949, 949,
  5603. 949, 949, 949, 949, 949, 949, 949, 949,
  5604. 949, 949, 949, 949, 949, 949, 949, 949,
  5605. 949, 949, 949, 949, 949, 949, 949, 949,
  5606. 949, 949, 949, 949, 949, 949, 949, 949,
  5607. 949, 949, 949, 949, 949, 949, 952, 949,
  5608. 949, 949, 949, 949, 949, 949, 949, 949,
  5609. 949, 949, 949, 949, 949, 949, 949, 949,
  5610. 949, 949, 949, 949, 949, 949, 949, 949,
  5611. 949, 949, 949, 949, 949, 949, 949, 949,
  5612. 949, 949, 1, 1, 1, 1, 1, 1,
  5613. 1, 1, 1, 1, 1, 1, 1, 1,
  5614. 1, 1, 1, 1, 1, 1, 1, 1,
  5615. 1, 1, 1, 1, 1, 1, 1, 1,
  5616. 1, 1, 1, 1, 1, 1, 1, 1,
  5617. 1, 1, 1, 1, 1, 1, 1, 1,
  5618. 1, 1, 1, 1, 1, 1, 1, 1,
  5619. 1, 1, 1, 1, 1, 1, 1, 1,
  5620. 1, 1, 1, 1, 953, 953, 953, 953,
  5621. 953, 953, 953, 953, 953, 953, 953, 953,
  5622. 953, 953, 953, 953, 953, 953, 953, 953,
  5623. 953, 953, 953, 953, 953, 953, 953, 953,
  5624. 953, 953, 954, 955, 955, 955, 955, 955,
  5625. 955, 955, 955, 955, 955, 955, 955, 956,
  5626. 955, 955, 957, 958, 958, 958, 959, 1,
  5627. 960, 960, 960, 960, 960, 960, 960, 960,
  5628. 960, 1, 960, 960, 961, 960, 960, 960,
  5629. 960, 960, 960, 960, 960, 960, 960, 960,
  5630. 960, 960, 960, 960, 960, 960, 960, 960,
  5631. 960, 962, 960, 960, 960, 960, 960, 960,
  5632. 960, 960, 960, 960, 960, 960, 960, 960,
  5633. 960, 960, 960, 960, 960, 960, 960, 960,
  5634. 960, 960, 960, 960, 960, 960, 960, 960,
  5635. 960, 960, 960, 960, 960, 960, 960, 960,
  5636. 960, 960, 960, 960, 960, 960, 960, 960,
  5637. 960, 960, 960, 960, 960, 960, 960, 960,
  5638. 960, 960, 960, 963, 960, 960, 960, 960,
  5639. 960, 960, 960, 960, 960, 960, 960, 960,
  5640. 960, 960, 960, 960, 960, 960, 960, 960,
  5641. 960, 960, 960, 960, 960, 960, 960, 960,
  5642. 960, 960, 960, 960, 960, 960, 960, 1,
  5643. 1, 1, 1, 1, 1, 1, 1, 1,
  5644. 1, 1, 1, 1, 1, 1, 1, 1,
  5645. 1, 1, 1, 1, 1, 1, 1, 1,
  5646. 1, 1, 1, 1, 1, 1, 1, 1,
  5647. 1, 1, 1, 1, 1, 1, 1, 1,
  5648. 1, 1, 1, 1, 1, 1, 1, 1,
  5649. 1, 1, 1, 1, 1, 1, 1, 1,
  5650. 1, 1, 1, 1, 1, 1, 1, 1,
  5651. 1, 964, 964, 964, 964, 964, 964, 964,
  5652. 964, 964, 964, 964, 964, 964, 964, 964,
  5653. 964, 964, 964, 964, 964, 964, 964, 964,
  5654. 964, 964, 964, 964, 964, 964, 964, 965,
  5655. 966, 966, 966, 966, 966, 966, 966, 966,
  5656. 966, 966, 966, 966, 967, 966, 966, 968,
  5657. 969, 969, 969, 970, 1, 971, 1, 960,
  5658. 1, 1, 1, 1, 1, 1, 1, 1,
  5659. 1, 1, 1, 1, 1, 1, 1, 1,
  5660. 1, 1, 1, 1, 1, 1, 960, 1,
  5661. 960, 960, 960, 960, 960, 960, 960, 960,
  5662. 960, 960, 960, 960, 960, 960, 960, 960,
  5663. 960, 960, 960, 960, 960, 960, 960, 960,
  5664. 960, 960, 960, 960, 960, 960, 960, 960,
  5665. 960, 960, 960, 960, 960, 960, 960, 960,
  5666. 960, 960, 960, 960, 960, 960, 960, 960,
  5667. 960, 960, 960, 960, 960, 960, 960, 960,
  5668. 960, 960, 960, 960, 960, 960, 960, 960,
  5669. 960, 960, 960, 960, 960, 960, 960, 960,
  5670. 960, 960, 960, 960, 960, 960, 960, 960,
  5671. 960, 960, 960, 960, 960, 960, 960, 960,
  5672. 960, 960, 960, 960, 960, 960, 960, 960,
  5673. 960, 960, 960, 960, 960, 960, 960, 960,
  5674. 960, 960, 960, 960, 960, 960, 960, 960,
  5675. 960, 960, 960, 960, 960, 960, 960, 960,
  5676. 960, 960, 960, 960, 960, 960, 960, 960,
  5677. 1, 1, 1, 1, 1, 1, 1, 1,
  5678. 1, 1, 1, 1, 1, 1, 1, 1,
  5679. 1, 1, 1, 1, 1, 1, 1, 1,
  5680. 1, 1, 1, 1, 1, 1, 1, 1,
  5681. 1, 1, 1, 1, 1, 1, 1, 1,
  5682. 1, 1, 1, 1, 1, 1, 1, 1,
  5683. 1, 1, 1, 1, 1, 1, 1, 1,
  5684. 1, 1, 1, 1, 1, 1, 1, 1,
  5685. 1, 1, 964, 964, 964, 964, 964, 964,
  5686. 964, 964, 964, 964, 964, 964, 964, 964,
  5687. 964, 964, 964, 964, 964, 964, 964, 964,
  5688. 964, 964, 964, 964, 964, 964, 964, 964,
  5689. 965, 966, 966, 966, 966, 966, 966, 966,
  5690. 966, 966, 966, 966, 966, 967, 966, 966,
  5691. 968, 969, 969, 969, 970, 1, 960, 960,
  5692. 960, 960, 960, 960, 960, 960, 960, 960,
  5693. 960, 960, 960, 960, 960, 960, 960, 960,
  5694. 960, 960, 960, 960, 960, 960, 960, 960,
  5695. 960, 960, 960, 960, 960, 960, 960, 960,
  5696. 960, 960, 960, 960, 960, 960, 960, 960,
  5697. 960, 960, 960, 960, 960, 960, 960, 960,
  5698. 960, 960, 960, 960, 960, 960, 960, 960,
  5699. 960, 960, 960, 960, 960, 960, 1, 964,
  5700. 964, 964, 964, 964, 964, 964, 964, 964,
  5701. 964, 964, 964, 964, 964, 964, 964, 964,
  5702. 964, 964, 964, 964, 964, 964, 964, 964,
  5703. 964, 964, 964, 964, 964, 964, 964, 1,
  5704. 964, 964, 964, 964, 964, 964, 964, 964,
  5705. 964, 964, 964, 964, 964, 964, 964, 964,
  5706. 964, 964, 964, 964, 964, 964, 964, 964,
  5707. 964, 964, 964, 964, 964, 964, 964, 964,
  5708. 964, 964, 964, 964, 964, 964, 964, 964,
  5709. 964, 964, 964, 964, 964, 964, 964, 964,
  5710. 964, 964, 964, 964, 964, 964, 964, 964,
  5711. 964, 964, 964, 964, 964, 964, 964, 964,
  5712. 1, 964, 964, 964, 964, 964, 964, 964,
  5713. 964, 964, 964, 964, 964, 964, 964, 964,
  5714. 964, 964, 964, 964, 964, 964, 964, 964,
  5715. 964, 964, 964, 964, 964, 964, 964, 964,
  5716. 964, 1, 966, 966, 966, 966, 966, 966,
  5717. 966, 966, 966, 966, 966, 966, 966, 966,
  5718. 966, 966, 966, 966, 966, 966, 966, 966,
  5719. 966, 966, 966, 966, 966, 966, 966, 966,
  5720. 966, 966, 966, 966, 966, 966, 966, 966,
  5721. 966, 966, 966, 966, 966, 966, 966, 966,
  5722. 966, 966, 1, 966, 966, 966, 966, 966,
  5723. 966, 966, 966, 966, 966, 966, 966, 966,
  5724. 966, 966, 966, 966, 966, 966, 966, 966,
  5725. 966, 966, 966, 966, 966, 966, 966, 966,
  5726. 966, 966, 966, 966, 966, 966, 966, 966,
  5727. 966, 966, 966, 966, 966, 966, 966, 966,
  5728. 966, 966, 966, 966, 966, 966, 966, 966,
  5729. 966, 966, 966, 966, 966, 966, 966, 966,
  5730. 966, 966, 966, 1, 966, 966, 966, 966,
  5731. 966, 966, 966, 966, 966, 966, 966, 966,
  5732. 966, 966, 966, 966, 1, 960, 960, 960,
  5733. 960, 960, 960, 960, 960, 972, 1, 960,
  5734. 960, 973, 960, 960, 960, 960, 960, 960,
  5735. 960, 960, 960, 960, 960, 960, 960, 960,
  5736. 960, 960, 960, 960, 972, 960, 515, 960,
  5737. 960, 960, 960, 960, 960, 960, 960, 960,
  5738. 960, 960, 960, 960, 960, 960, 960, 960,
  5739. 960, 960, 960, 960, 960, 960, 960, 960,
  5740. 960, 960, 960, 960, 960, 960, 960, 960,
  5741. 960, 960, 960, 960, 960, 960, 960, 960,
  5742. 960, 960, 960, 960, 960, 960, 960, 960,
  5743. 960, 960, 960, 960, 960, 960, 960, 960,
  5744. 963, 960, 960, 960, 960, 960, 960, 960,
  5745. 960, 960, 960, 960, 960, 960, 960, 960,
  5746. 960, 960, 960, 960, 960, 960, 960, 960,
  5747. 960, 960, 960, 960, 960, 960, 960, 960,
  5748. 960, 960, 960, 960, 1, 1, 1, 1,
  5749. 1, 1, 1, 1, 1, 1, 1, 1,
  5750. 1, 1, 1, 1, 1, 1, 1, 1,
  5751. 1, 1, 1, 1, 1, 1, 1, 1,
  5752. 1, 1, 1, 1, 1, 1, 1, 1,
  5753. 1, 1, 1, 1, 1, 1, 1, 1,
  5754. 1, 1, 1, 1, 1, 1, 1, 1,
  5755. 1, 1, 1, 1, 1, 1, 1, 1,
  5756. 1, 1, 1, 1, 1, 1, 964, 964,
  5757. 964, 964, 964, 964, 964, 964, 964, 964,
  5758. 964, 964, 964, 964, 964, 964, 964, 964,
  5759. 964, 964, 964, 964, 964, 964, 964, 964,
  5760. 964, 964, 964, 964, 965, 966, 966, 966,
  5761. 966, 966, 966, 966, 966, 966, 966, 966,
  5762. 966, 967, 966, 966, 968, 969, 969, 969,
  5763. 970, 1, 974, 1, 972, 1, 1, 1,
  5764. 1, 1, 1, 1, 1, 1, 1, 1,
  5765. 1, 1, 1, 1, 1, 1, 1, 1,
  5766. 1, 1, 1, 972, 1, 975, 1, 1,
  5767. 1, 976, 1, 1, 1, 1, 1, 1,
  5768. 1, 1, 1, 1, 1, 1, 1, 1,
  5769. 1, 1, 1, 1, 975, 683, 467, 683,
  5770. 683, 683, 683, 683, 977, 1, 683, 683,
  5771. 469, 683, 937, 683, 683, 683, 683, 683,
  5772. 683, 683, 683, 683, 683, 683, 1, 215,
  5773. 471, 683, 1, 683, 472, 683, 683, 683,
  5774. 683, 683, 683, 683, 683, 683, 683, 683,
  5775. 683, 683, 683, 683, 683, 683, 683, 683,
  5776. 683, 683, 683, 683, 683, 683, 683, 1,
  5777. 1, 1, 683, 683, 683, 683, 683, 683,
  5778. 683, 683, 683, 683, 683, 683, 683, 683,
  5779. 683, 683, 683, 683, 683, 683, 683, 683,
  5780. 683, 683, 683, 683, 683, 683, 683, 683,
  5781. 683, 683, 683, 1, 1, 1, 1, 1,
  5782. 1, 1, 1, 1, 1, 1, 1, 1,
  5783. 1, 1, 1, 1, 1, 1, 1, 1,
  5784. 1, 1, 1, 1, 1, 1, 1, 1,
  5785. 1, 1, 1, 1, 1, 1, 1, 1,
  5786. 1, 1, 1, 1, 1, 1, 1, 1,
  5787. 1, 1, 1, 1, 1, 1, 1, 1,
  5788. 1, 1, 1, 1, 1, 1, 1, 1,
  5789. 1, 1, 1, 1, 1, 1, 687, 687,
  5790. 687, 687, 687, 687, 687, 687, 687, 687,
  5791. 687, 687, 687, 687, 687, 687, 687, 687,
  5792. 687, 687, 687, 687, 687, 687, 687, 687,
  5793. 687, 687, 687, 687, 688, 689, 689, 689,
  5794. 689, 689, 689, 689, 689, 689, 689, 689,
  5795. 689, 690, 689, 689, 691, 692, 692, 692,
  5796. 693, 1, 978, 1, 1, 1, 979, 1,
  5797. 1, 1, 1, 1, 1, 1, 1, 1,
  5798. 1, 1, 1, 1, 1, 1, 1, 1,
  5799. 1, 978, 482, 483, 482, 482, 482, 482,
  5800. 482, 980, 1, 482, 482, 485, 482, 1,
  5801. 482, 482, 482, 482, 482, 482, 482, 482,
  5802. 482, 482, 482, 1, 232, 545, 482, 1,
  5803. 482, 981, 482, 482, 482, 482, 482, 482,
  5804. 482, 482, 482, 482, 482, 482, 482, 482,
  5805. 482, 482, 482, 482, 482, 482, 482, 482,
  5806. 482, 482, 482, 482, 1, 1, 1, 482,
  5807. 482, 482, 482, 482, 482, 482, 482, 482,
  5808. 482, 482, 482, 482, 482, 482, 482, 482,
  5809. 482, 482, 482, 482, 482, 482, 482, 482,
  5810. 482, 482, 482, 482, 482, 482, 482, 482,
  5811. 1, 1, 1, 1, 1, 1, 1, 1,
  5812. 1, 1, 1, 1, 1, 1, 1, 1,
  5813. 1, 1, 1, 1, 1, 1, 1, 1,
  5814. 1, 1, 1, 1, 1, 1, 1, 1,
  5815. 1, 1, 1, 1, 1, 1, 1, 1,
  5816. 1, 1, 1, 1, 1, 1, 1, 1,
  5817. 1, 1, 1, 1, 1, 1, 1, 1,
  5818. 1, 1, 1, 1, 1, 1, 1, 1,
  5819. 1, 1, 1, 488, 488, 488, 488, 488,
  5820. 488, 488, 488, 488, 488, 488, 488, 488,
  5821. 488, 488, 488, 488, 488, 488, 488, 488,
  5822. 488, 488, 488, 488, 488, 488, 488, 488,
  5823. 488, 489, 490, 490, 490, 490, 490, 490,
  5824. 490, 490, 490, 490, 490, 490, 491, 490,
  5825. 490, 492, 493, 493, 493, 494, 1, 982,
  5826. 1, 978, 1, 1, 1, 1, 1, 1,
  5827. 1, 1, 1, 1, 1, 1, 1, 1,
  5828. 1, 1, 1, 1, 1, 1, 1, 1,
  5829. 978, 1, 983, 1, 1, 1, 984, 1,
  5830. 1, 1, 1, 1, 1, 1, 1, 1,
  5831. 1, 1, 1, 1, 1, 1, 1, 1,
  5832. 1, 983, 527, 528, 527, 527, 527, 527,
  5833. 527, 985, 1, 527, 527, 946, 527, 1,
  5834. 527, 527, 527, 527, 527, 527, 527, 527,
  5835. 527, 527, 527, 1, 947, 550, 527, 1,
  5836. 527, 986, 527, 527, 527, 527, 527, 527,
  5837. 527, 527, 527, 527, 527, 527, 527, 527,
  5838. 527, 527, 527, 527, 527, 527, 527, 527,
  5839. 527, 527, 527, 527, 1, 1, 1, 527,
  5840. 527, 527, 527, 527, 527, 527, 527, 527,
  5841. 527, 527, 527, 527, 527, 527, 527, 527,
  5842. 527, 527, 527, 527, 527, 527, 527, 527,
  5843. 527, 527, 527, 527, 527, 527, 527, 527,
  5844. 1, 1, 1, 1, 1, 1, 1, 1,
  5845. 1, 1, 1, 1, 1, 1, 1, 1,
  5846. 1, 1, 1, 1, 1, 1, 1, 1,
  5847. 1, 1, 1, 1, 1, 1, 1, 1,
  5848. 1, 1, 1, 1, 1, 1, 1, 1,
  5849. 1, 1, 1, 1, 1, 1, 1, 1,
  5850. 1, 1, 1, 1, 1, 1, 1, 1,
  5851. 1, 1, 1, 1, 1, 1, 1, 1,
  5852. 1, 1, 1, 532, 532, 532, 532, 532,
  5853. 532, 532, 532, 532, 532, 532, 532, 532,
  5854. 532, 532, 532, 532, 532, 532, 532, 532,
  5855. 532, 532, 532, 532, 532, 532, 532, 532,
  5856. 532, 533, 534, 534, 534, 534, 534, 534,
  5857. 534, 534, 534, 534, 534, 534, 535, 534,
  5858. 534, 536, 537, 537, 537, 538, 1, 987,
  5859. 1, 1, 1, 988, 1, 1, 1, 1,
  5860. 1, 1, 1, 1, 1, 1, 1, 1,
  5861. 1, 1, 1, 1, 1, 1, 987, 989,
  5862. 990, 989, 989, 989, 989, 989, 991, 1,
  5863. 989, 989, 1, 989, 992, 989, 989, 989,
  5864. 989, 989, 989, 989, 989, 989, 989, 989,
  5865. 1, 1, 1, 989, 1, 989, 1, 989,
  5866. 989, 989, 989, 989, 989, 989, 989, 989,
  5867. 989, 989, 989, 989, 989, 989, 989, 989,
  5868. 989, 989, 989, 989, 989, 989, 989, 989,
  5869. 989, 739, 1, 1, 989, 989, 989, 989,
  5870. 989, 989, 989, 989, 989, 989, 989, 989,
  5871. 989, 989, 989, 989, 989, 989, 989, 989,
  5872. 989, 989, 989, 989, 989, 989, 989, 989,
  5873. 989, 989, 989, 989, 989, 1, 1, 1,
  5874. 1, 1, 1, 1, 1, 1, 1, 1,
  5875. 1, 1, 1, 1, 1, 1, 1, 1,
  5876. 1, 1, 1, 1, 1, 1, 1, 1,
  5877. 1, 1, 1, 1, 1, 1, 1, 1,
  5878. 1, 1, 1, 1, 1, 1, 1, 1,
  5879. 1, 1, 1, 1, 1, 1, 1, 1,
  5880. 1, 1, 1, 1, 1, 1, 1, 1,
  5881. 1, 1, 1, 1, 1, 1, 1, 1,
  5882. 993, 993, 993, 993, 993, 993, 993, 993,
  5883. 993, 993, 993, 993, 993, 993, 993, 993,
  5884. 993, 993, 993, 993, 993, 993, 993, 993,
  5885. 993, 993, 993, 993, 993, 993, 994, 995,
  5886. 995, 995, 995, 995, 995, 995, 995, 995,
  5887. 995, 995, 995, 996, 995, 995, 997, 998,
  5888. 998, 998, 999, 1, 1000, 1, 1, 1,
  5889. 1001, 1, 1, 1, 1, 1, 1, 1,
  5890. 1, 1, 1, 1, 1, 1, 1, 1,
  5891. 1, 1, 1, 1000, 1002, 861, 1002, 1002,
  5892. 1002, 1002, 1002, 1003, 1, 1002, 1002, 1,
  5893. 1002, 752, 1002, 1002, 1002, 1002, 1002, 1002,
  5894. 1002, 1002, 1002, 1002, 1002, 1, 1, 1,
  5895. 1002, 1, 1002, 1, 1002, 1002, 1002, 1002,
  5896. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5897. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5898. 1002, 1002, 1002, 1002, 1002, 1002, 753, 1,
  5899. 1, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5900. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5901. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5902. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5903. 1002, 1002, 1, 1, 1, 1, 1, 1,
  5904. 1, 1, 1, 1, 1, 1, 1, 1,
  5905. 1, 1, 1, 1, 1, 1, 1, 1,
  5906. 1, 1, 1, 1, 1, 1, 1, 1,
  5907. 1, 1, 1, 1, 1, 1, 1, 1,
  5908. 1, 1, 1, 1, 1, 1, 1, 1,
  5909. 1, 1, 1, 1, 1, 1, 1, 1,
  5910. 1, 1, 1, 1, 1, 1, 1, 1,
  5911. 1, 1, 1, 1, 1, 1004, 1004, 1004,
  5912. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5913. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5914. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5915. 1004, 1004, 1004, 1005, 1006, 1006, 1006, 1006,
  5916. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  5917. 1007, 1006, 1006, 1008, 1009, 1009, 1009, 1010,
  5918. 1, 1011, 1, 1000, 1, 1, 1, 1,
  5919. 1, 1, 1, 1, 1, 1, 1, 1,
  5920. 1, 1, 1, 1, 1, 1, 1, 1,
  5921. 1, 1, 1000, 1, 1012, 1, 1, 1,
  5922. 1013, 1, 1, 1, 1, 1, 1, 1,
  5923. 1, 1, 1, 1, 1, 1, 1, 1,
  5924. 1, 1, 1, 1012, 1002, 861, 1002, 1002,
  5925. 1002, 1002, 1002, 1014, 1, 1002, 1002, 765,
  5926. 1002, 1015, 1002, 1002, 1002, 1002, 1002, 1002,
  5927. 1002, 1002, 1002, 1002, 1002, 1, 767, 1,
  5928. 1002, 1, 1002, 1, 1002, 1002, 1002, 1002,
  5929. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5930. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5931. 1002, 1002, 1002, 1002, 1002, 1002, 1, 1,
  5932. 1, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5933. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5934. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5935. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  5936. 1002, 1002, 1, 1, 1, 1, 1, 1,
  5937. 1, 1, 1, 1, 1, 1, 1, 1,
  5938. 1, 1, 1, 1, 1, 1, 1, 1,
  5939. 1, 1, 1, 1, 1, 1, 1, 1,
  5940. 1, 1, 1, 1, 1, 1, 1, 1,
  5941. 1, 1, 1, 1, 1, 1, 1, 1,
  5942. 1, 1, 1, 1, 1, 1, 1, 1,
  5943. 1, 1, 1, 1, 1, 1, 1, 1,
  5944. 1, 1, 1, 1, 1, 1004, 1004, 1004,
  5945. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5946. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5947. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  5948. 1004, 1004, 1004, 1005, 1006, 1006, 1006, 1006,
  5949. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  5950. 1007, 1006, 1006, 1008, 1009, 1009, 1009, 1010,
  5951. 1, 1012, 1, 1, 1, 1013, 1, 1,
  5952. 1, 1, 1, 1, 1, 1, 1, 1,
  5953. 1, 1, 1, 1, 1, 1, 1, 1,
  5954. 1012, 1, 1, 1, 1, 1, 1, 1,
  5955. 1014, 1, 1, 1, 765, 1, 1016, 1,
  5956. 1, 1, 1, 1, 1, 1, 1, 1,
  5957. 1, 1, 1, 767, 1, 1017, 1, 1012,
  5958. 1, 1, 1, 1, 1, 1, 1, 1,
  5959. 1, 1, 1, 1, 1, 1, 1, 1,
  5960. 1, 1, 1, 1, 1, 1, 1012, 1,
  5961. 1018, 1, 1, 1, 1019, 1, 1, 1,
  5962. 1, 1, 1, 1, 1, 1, 1, 1,
  5963. 1, 1, 1, 1, 1, 1, 1, 1018,
  5964. 1, 1, 1, 1, 1, 1, 1, 1020,
  5965. 1, 1, 1, 774, 1, 1021, 1, 1,
  5966. 1, 1, 1, 1, 1, 1, 1, 1,
  5967. 1, 1, 776, 1, 1016, 1, 1, 1,
  5968. 1022, 1, 1, 1, 1, 1, 1, 1,
  5969. 1, 1, 1, 1, 1, 1, 1, 1,
  5970. 1, 1, 1, 1016, 1023, 1, 1023, 1023,
  5971. 1023, 1023, 1023, 1024, 1, 1023, 1023, 1,
  5972. 1023, 1, 1023, 1023, 1023, 1023, 1023, 1023,
  5973. 1023, 1023, 1023, 1023, 1023, 1, 1, 1,
  5974. 1023, 1, 1023, 1, 1023, 1023, 1023, 1023,
  5975. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5976. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5977. 1023, 1023, 1023, 1023, 1023, 1023, 1, 1,
  5978. 1, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5979. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5980. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5981. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  5982. 1023, 1023, 1, 1, 1, 1, 1, 1,
  5983. 1, 1, 1, 1, 1, 1, 1, 1,
  5984. 1, 1, 1, 1, 1, 1, 1, 1,
  5985. 1, 1, 1, 1, 1, 1, 1, 1,
  5986. 1, 1, 1, 1, 1, 1, 1, 1,
  5987. 1, 1, 1, 1, 1, 1, 1, 1,
  5988. 1, 1, 1, 1, 1, 1, 1, 1,
  5989. 1, 1, 1, 1, 1, 1, 1, 1,
  5990. 1, 1, 1, 1, 1, 1025, 1025, 1025,
  5991. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  5992. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  5993. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  5994. 1025, 1025, 1025, 1026, 1027, 1027, 1027, 1027,
  5995. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  5996. 1028, 1027, 1027, 1029, 1030, 1030, 1030, 1031,
  5997. 1, 1032, 1, 1016, 1, 1, 1, 1,
  5998. 1, 1, 1, 1, 1, 1, 1, 1,
  5999. 1, 1, 1, 1, 1, 1, 1, 1,
  6000. 1, 1, 1016, 1, 1012, 1, 1, 1,
  6001. 1013, 1, 1, 1, 1, 1, 1, 1,
  6002. 1, 1, 1, 1, 1, 1, 1, 1,
  6003. 1, 1, 1, 1012, 1023, 1, 1023, 1023,
  6004. 1023, 1023, 1023, 1014, 1, 1023, 1023, 765,
  6005. 1023, 1016, 1023, 1023, 1023, 1023, 1023, 1023,
  6006. 1023, 1023, 1023, 1023, 1023, 1, 767, 1,
  6007. 1023, 1, 1023, 1, 1023, 1023, 1023, 1023,
  6008. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6009. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6010. 1023, 1023, 1023, 1023, 1023, 1023, 1, 1,
  6011. 1, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6012. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6013. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6014. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6015. 1023, 1023, 1, 1, 1, 1, 1, 1,
  6016. 1, 1, 1, 1, 1, 1, 1, 1,
  6017. 1, 1, 1, 1, 1, 1, 1, 1,
  6018. 1, 1, 1, 1, 1, 1, 1, 1,
  6019. 1, 1, 1, 1, 1, 1, 1, 1,
  6020. 1, 1, 1, 1, 1, 1, 1, 1,
  6021. 1, 1, 1, 1, 1, 1, 1, 1,
  6022. 1, 1, 1, 1, 1, 1, 1, 1,
  6023. 1, 1, 1, 1, 1, 1025, 1025, 1025,
  6024. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6025. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6026. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6027. 1025, 1025, 1025, 1026, 1027, 1027, 1027, 1027,
  6028. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6029. 1028, 1027, 1027, 1029, 1030, 1030, 1030, 1031,
  6030. 1, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6031. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6032. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6033. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6034. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6035. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6036. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6037. 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
  6038. 1023, 1, 1025, 1025, 1025, 1025, 1025, 1025,
  6039. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6040. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6041. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6042. 1025, 1025, 1, 1025, 1025, 1025, 1025, 1025,
  6043. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6044. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6045. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6046. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6047. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6048. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6049. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6050. 1025, 1025, 1025, 1, 1025, 1025, 1025, 1025,
  6051. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6052. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6053. 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
  6054. 1025, 1025, 1025, 1025, 1, 1027, 1027, 1027,
  6055. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6056. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6057. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6058. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6059. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6060. 1027, 1027, 1027, 1027, 1027, 1, 1027, 1027,
  6061. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6062. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6063. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6064. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6065. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6066. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6067. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6068. 1027, 1027, 1027, 1027, 1027, 1027, 1, 1027,
  6069. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  6070. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1,
  6071. 1021, 1, 1, 1, 1033, 1, 1, 1,
  6072. 1, 1, 1, 1, 1, 1, 1, 1,
  6073. 1, 1, 1, 1, 1, 1, 1, 1021,
  6074. 1034, 1, 1034, 1034, 1034, 1034, 1034, 1035,
  6075. 1, 1034, 1034, 1, 1034, 1, 1034, 1034,
  6076. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6077. 1034, 1, 1, 1, 1034, 1, 1034, 1,
  6078. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6079. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6080. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6081. 1034, 1034, 1, 1, 1, 1034, 1034, 1034,
  6082. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6083. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6084. 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
  6085. 1034, 1034, 1034, 1034, 1034, 1034, 1, 1,
  6086. 1, 1, 1, 1, 1, 1, 1, 1,
  6087. 1, 1, 1, 1, 1, 1, 1, 1,
  6088. 1, 1, 1, 1, 1, 1, 1, 1,
  6089. 1, 1, 1, 1, 1, 1, 1, 1,
  6090. 1, 1, 1, 1, 1, 1, 1, 1,
  6091. 1, 1, 1, 1, 1, 1, 1, 1,
  6092. 1, 1, 1, 1, 1, 1, 1, 1,
  6093. 1, 1, 1, 1, 1, 1, 1, 1,
  6094. 1, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  6095. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  6096. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  6097. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037,
  6098. 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
  6099. 1038, 1038, 1038, 1038, 1039, 1038, 1038, 1040,
  6100. 1041, 1041, 1041, 1042, 1, 1016, 1, 1,
  6101. 1, 1022, 1, 1, 1, 1, 1, 1,
  6102. 1, 1, 1, 1, 1, 1, 1, 1,
  6103. 1, 1, 1, 1, 1016, 1002, 861, 1002,
  6104. 1002, 1002, 1002, 1002, 1024, 1, 1002, 1002,
  6105. 1, 1002, 752, 1002, 1002, 1002, 1002, 1002,
  6106. 1002, 1002, 1002, 1002, 1002, 1002, 1, 1,
  6107. 1, 1002, 1, 1002, 1, 1002, 1002, 1002,
  6108. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6109. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6110. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1,
  6111. 1, 1, 1002, 1002, 1002, 1002, 1002, 1002,
  6112. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6113. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6114. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6115. 1002, 1002, 1002, 1, 1, 1, 1, 1,
  6116. 1, 1, 1, 1, 1, 1, 1, 1,
  6117. 1, 1, 1, 1, 1, 1, 1, 1,
  6118. 1, 1, 1, 1, 1, 1, 1, 1,
  6119. 1, 1, 1, 1, 1, 1, 1, 1,
  6120. 1, 1, 1, 1, 1, 1, 1, 1,
  6121. 1, 1, 1, 1, 1, 1, 1, 1,
  6122. 1, 1, 1, 1, 1, 1, 1, 1,
  6123. 1, 1, 1, 1, 1, 1, 1004, 1004,
  6124. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6125. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6126. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6127. 1004, 1004, 1004, 1004, 1005, 1006, 1006, 1006,
  6128. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6129. 1006, 1007, 1006, 1006, 1008, 1009, 1009, 1009,
  6130. 1010, 1, 1002, 1002, 1002, 1002, 1002, 1002,
  6131. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6132. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6133. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6134. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6135. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6136. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6137. 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
  6138. 1002, 1002, 1, 1004, 1004, 1004, 1004, 1004,
  6139. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6140. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6141. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6142. 1004, 1004, 1004, 1, 1004, 1004, 1004, 1004,
  6143. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6144. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6145. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6146. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6147. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6148. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6149. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6150. 1004, 1004, 1004, 1004, 1, 1004, 1004, 1004,
  6151. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6152. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6153. 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
  6154. 1004, 1004, 1004, 1004, 1004, 1, 1006, 1006,
  6155. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6156. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6157. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6158. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6159. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6160. 1006, 1006, 1006, 1006, 1006, 1006, 1, 1006,
  6161. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6162. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6163. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6164. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6165. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6166. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6167. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6168. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1,
  6169. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6170. 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006,
  6171. 1, 1043, 1, 1, 1, 1044, 1, 1,
  6172. 1, 1, 1, 1, 1, 1, 1, 1,
  6173. 1, 1, 1, 1, 1, 1, 1, 1,
  6174. 1043, 1045, 1046, 1045, 1045, 1045, 1045, 1045,
  6175. 1047, 1, 1045, 1045, 1, 1045, 851, 1045,
  6176. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6177. 1045, 1045, 1, 1, 1, 1045, 1, 1045,
  6178. 1, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6179. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6180. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6181. 1045, 1045, 1045, 852, 1, 1, 1045, 1045,
  6182. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6183. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6184. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  6185. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1,
  6186. 1, 1, 1, 1, 1, 1, 1, 1,
  6187. 1, 1, 1, 1, 1, 1, 1, 1,
  6188. 1, 1, 1, 1, 1, 1, 1, 1,
  6189. 1, 1, 1, 1, 1, 1, 1, 1,
  6190. 1, 1, 1, 1, 1, 1, 1, 1,
  6191. 1, 1, 1, 1, 1, 1, 1, 1,
  6192. 1, 1, 1, 1, 1, 1, 1, 1,
  6193. 1, 1, 1, 1, 1, 1, 1, 1,
  6194. 1, 1, 1048, 1048, 1048, 1048, 1048, 1048,
  6195. 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
  6196. 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
  6197. 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
  6198. 1049, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
  6199. 1050, 1050, 1050, 1050, 1050, 1051, 1050, 1050,
  6200. 1052, 1053, 1053, 1053, 1054, 1, 683, 683,
  6201. 683, 683, 683, 683, 683, 683, 683, 683,
  6202. 683, 683, 683, 683, 683, 683, 683, 683,
  6203. 683, 683, 683, 683, 683, 683, 683, 683,
  6204. 683, 683, 683, 683, 683, 683, 683, 683,
  6205. 683, 683, 683, 683, 683, 683, 683, 683,
  6206. 683, 683, 683, 683, 683, 683, 683, 683,
  6207. 683, 683, 683, 683, 683, 683, 683, 683,
  6208. 683, 683, 683, 683, 683, 683, 1, 687,
  6209. 687, 687, 687, 687, 687, 687, 687, 687,
  6210. 687, 687, 687, 687, 687, 687, 687, 687,
  6211. 687, 687, 687, 687, 687, 687, 687, 687,
  6212. 687, 687, 687, 687, 687, 687, 687, 1,
  6213. 687, 687, 687, 687, 687, 687, 687, 687,
  6214. 687, 687, 687, 687, 687, 687, 687, 687,
  6215. 687, 687, 687, 687, 687, 687, 687, 687,
  6216. 687, 687, 687, 687, 687, 687, 687, 687,
  6217. 687, 687, 687, 687, 687, 687, 687, 687,
  6218. 687, 687, 687, 687, 687, 687, 687, 687,
  6219. 687, 687, 687, 687, 687, 687, 687, 687,
  6220. 687, 687, 687, 687, 687, 687, 687, 687,
  6221. 1, 687, 687, 687, 687, 687, 687, 687,
  6222. 687, 687, 687, 687, 687, 687, 687, 687,
  6223. 687, 687, 687, 687, 687, 687, 687, 687,
  6224. 687, 687, 687, 687, 687, 687, 687, 687,
  6225. 687, 1, 689, 689, 689, 689, 689, 689,
  6226. 689, 689, 689, 689, 689, 689, 689, 689,
  6227. 689, 689, 689, 689, 689, 689, 689, 689,
  6228. 689, 689, 689, 689, 689, 689, 689, 689,
  6229. 689, 689, 689, 689, 689, 689, 689, 689,
  6230. 689, 689, 689, 689, 689, 689, 689, 689,
  6231. 689, 689, 1, 689, 689, 689, 689, 689,
  6232. 689, 689, 689, 689, 689, 689, 689, 689,
  6233. 689, 689, 689, 689, 689, 689, 689, 689,
  6234. 689, 689, 689, 689, 689, 689, 689, 689,
  6235. 689, 689, 689, 689, 689, 689, 689, 689,
  6236. 689, 689, 689, 689, 689, 689, 689, 689,
  6237. 689, 689, 689, 689, 689, 689, 689, 689,
  6238. 689, 689, 689, 689, 689, 689, 689, 689,
  6239. 689, 689, 689, 1, 689, 689, 689, 689,
  6240. 689, 689, 689, 689, 689, 689, 689, 689,
  6241. 689, 689, 689, 689, 1, 1055, 1, 1,
  6242. 1, 1056, 1, 1, 1, 1, 1, 1,
  6243. 1, 1, 1, 1, 1, 1, 1, 1,
  6244. 1, 1, 1, 1, 1055, 466, 1057, 466,
  6245. 466, 466, 466, 466, 1058, 1, 466, 466,
  6246. 469, 466, 937, 466, 466, 466, 466, 466,
  6247. 466, 466, 466, 466, 466, 466, 1, 215,
  6248. 471, 466, 1, 466, 472, 466, 466, 466,
  6249. 466, 466, 466, 466, 466, 466, 466, 466,
  6250. 466, 466, 466, 466, 466, 466, 466, 466,
  6251. 466, 466, 466, 466, 466, 466, 466, 1,
  6252. 1, 1, 466, 466, 466, 466, 466, 466,
  6253. 466, 466, 466, 466, 466, 466, 466, 466,
  6254. 466, 466, 466, 466, 466, 466, 466, 466,
  6255. 466, 466, 466, 466, 466, 466, 466, 466,
  6256. 466, 466, 466, 1, 1, 1, 1, 1,
  6257. 1, 1, 1, 1, 1, 1, 1, 1,
  6258. 1, 1, 1, 1, 1, 1, 1, 1,
  6259. 1, 1, 1, 1, 1, 1, 1, 1,
  6260. 1, 1, 1, 1, 1, 1, 1, 1,
  6261. 1, 1, 1, 1, 1, 1, 1, 1,
  6262. 1, 1, 1, 1, 1, 1, 1, 1,
  6263. 1, 1, 1, 1, 1, 1, 1, 1,
  6264. 1, 1, 1, 1, 1, 1, 473, 473,
  6265. 473, 473, 473, 473, 473, 473, 473, 473,
  6266. 473, 473, 473, 473, 473, 473, 473, 473,
  6267. 473, 473, 473, 473, 473, 473, 473, 473,
  6268. 473, 473, 473, 473, 474, 475, 475, 475,
  6269. 475, 475, 475, 475, 475, 475, 475, 475,
  6270. 475, 476, 475, 475, 477, 478, 478, 478,
  6271. 479, 1, 1059, 1, 1, 1, 1060, 1,
  6272. 1, 1, 1, 1, 1, 1, 1, 1,
  6273. 1, 1, 1, 1, 1, 1, 1, 1,
  6274. 1, 1059, 709, 710, 709, 709, 709, 709,
  6275. 709, 1061, 1, 709, 709, 485, 709, 1,
  6276. 709, 709, 709, 709, 709, 709, 709, 709,
  6277. 709, 709, 709, 1, 232, 545, 709, 1,
  6278. 709, 981, 709, 709, 709, 709, 709, 709,
  6279. 709, 709, 709, 709, 709, 709, 709, 709,
  6280. 709, 709, 709, 709, 709, 709, 709, 709,
  6281. 709, 709, 709, 709, 1, 1, 1, 709,
  6282. 709, 709, 709, 709, 709, 709, 709, 709,
  6283. 709, 709, 709, 709, 709, 709, 709, 709,
  6284. 709, 709, 709, 709, 709, 709, 709, 709,
  6285. 709, 709, 709, 709, 709, 709, 709, 709,
  6286. 1, 1, 1, 1, 1, 1, 1, 1,
  6287. 1, 1, 1, 1, 1, 1, 1, 1,
  6288. 1, 1, 1, 1, 1, 1, 1, 1,
  6289. 1, 1, 1, 1, 1, 1, 1, 1,
  6290. 1, 1, 1, 1, 1, 1, 1, 1,
  6291. 1, 1, 1, 1, 1, 1, 1, 1,
  6292. 1, 1, 1, 1, 1, 1, 1, 1,
  6293. 1, 1, 1, 1, 1, 1, 1, 1,
  6294. 1, 1, 1, 712, 712, 712, 712, 712,
  6295. 712, 712, 712, 712, 712, 712, 712, 712,
  6296. 712, 712, 712, 712, 712, 712, 712, 712,
  6297. 712, 712, 712, 712, 712, 712, 712, 712,
  6298. 712, 713, 714, 714, 714, 714, 714, 714,
  6299. 714, 714, 714, 714, 714, 714, 715, 714,
  6300. 714, 716, 717, 717, 717, 718, 1, 1062,
  6301. 1, 1059, 1, 1, 1, 1, 1, 1,
  6302. 1, 1, 1, 1, 1, 1, 1, 1,
  6303. 1, 1, 1, 1, 1, 1, 1, 1,
  6304. 1059, 1, 1063, 1, 1, 1, 1064, 1,
  6305. 1, 1, 1, 1, 1, 1, 1, 1,
  6306. 1, 1, 1, 1, 1, 1, 1, 1,
  6307. 1, 1063, 924, 925, 924, 924, 924, 924,
  6308. 924, 1065, 1, 924, 924, 946, 924, 1,
  6309. 924, 924, 924, 924, 924, 924, 924, 924,
  6310. 924, 924, 924, 1, 947, 550, 924, 1,
  6311. 924, 986, 924, 924, 924, 924, 924, 924,
  6312. 924, 924, 924, 924, 924, 924, 924, 924,
  6313. 924, 924, 924, 924, 924, 924, 924, 924,
  6314. 924, 924, 924, 924, 1, 1, 1, 924,
  6315. 924, 924, 924, 924, 924, 924, 924, 924,
  6316. 924, 924, 924, 924, 924, 924, 924, 924,
  6317. 924, 924, 924, 924, 924, 924, 924, 924,
  6318. 924, 924, 924, 924, 924, 924, 924, 924,
  6319. 1, 1, 1, 1, 1, 1, 1, 1,
  6320. 1, 1, 1, 1, 1, 1, 1, 1,
  6321. 1, 1, 1, 1, 1, 1, 1, 1,
  6322. 1, 1, 1, 1, 1, 1, 1, 1,
  6323. 1, 1, 1, 1, 1, 1, 1, 1,
  6324. 1, 1, 1, 1, 1, 1, 1, 1,
  6325. 1, 1, 1, 1, 1, 1, 1, 1,
  6326. 1, 1, 1, 1, 1, 1, 1, 1,
  6327. 1, 1, 1, 927, 927, 927, 927, 927,
  6328. 927, 927, 927, 927, 927, 927, 927, 927,
  6329. 927, 927, 927, 927, 927, 927, 927, 927,
  6330. 927, 927, 927, 927, 927, 927, 927, 927,
  6331. 927, 928, 929, 929, 929, 929, 929, 929,
  6332. 929, 929, 929, 929, 929, 929, 930, 929,
  6333. 929, 931, 932, 932, 932, 933, 1, 1066,
  6334. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1067,
  6335. 1, 1066, 1066, 1068, 1066, 1066, 1066, 1066,
  6336. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6337. 1066, 1066, 1066, 1066, 1066, 1066, 1067, 1066,
  6338. 901, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6339. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6340. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6341. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6342. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6343. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6344. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6345. 1066, 1066, 1069, 1066, 1066, 1066, 1066, 1066,
  6346. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6347. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6348. 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066,
  6349. 1066, 1066, 1066, 1066, 1066, 1066, 1, 1,
  6350. 1, 1, 1, 1, 1, 1, 1, 1,
  6351. 1, 1, 1, 1, 1, 1, 1, 1,
  6352. 1, 1, 1, 1, 1, 1, 1, 1,
  6353. 1, 1, 1, 1, 1, 1, 1, 1,
  6354. 1, 1, 1, 1, 1, 1, 1, 1,
  6355. 1, 1, 1, 1, 1, 1, 1, 1,
  6356. 1, 1, 1, 1, 1, 1, 1, 1,
  6357. 1, 1, 1, 1, 1, 1, 1, 1,
  6358. 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
  6359. 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
  6360. 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
  6361. 1070, 1070, 1070, 1070, 1070, 1070, 1071, 1072,
  6362. 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072,
  6363. 1072, 1072, 1072, 1073, 1072, 1072, 1074, 1075,
  6364. 1075, 1075, 1076, 1, 1077, 1077, 1077, 1077,
  6365. 1077, 1077, 1077, 1077, 1077, 1, 1077, 1077,
  6366. 1078, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6367. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6368. 1077, 1077, 1077, 1077, 1077, 1079, 1077, 1077,
  6369. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6370. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6371. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6372. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6373. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6374. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6375. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1080,
  6376. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6377. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6378. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6379. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6380. 1077, 1077, 1077, 1, 1, 1, 1, 1,
  6381. 1, 1, 1, 1, 1, 1, 1, 1,
  6382. 1, 1, 1, 1, 1, 1, 1, 1,
  6383. 1, 1, 1, 1, 1, 1, 1, 1,
  6384. 1, 1, 1, 1, 1, 1, 1, 1,
  6385. 1, 1, 1, 1, 1, 1, 1, 1,
  6386. 1, 1, 1, 1, 1, 1, 1, 1,
  6387. 1, 1, 1, 1, 1, 1, 1, 1,
  6388. 1, 1, 1, 1, 1, 1081, 1081, 1081,
  6389. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6390. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6391. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6392. 1081, 1081, 1081, 1082, 1083, 1083, 1083, 1083,
  6393. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6394. 1084, 1083, 1083, 1085, 1086, 1086, 1086, 1087,
  6395. 1, 1088, 1, 1077, 1, 1, 1, 1,
  6396. 1, 1, 1, 1, 1, 1, 1, 1,
  6397. 1, 1, 1, 1, 1, 1, 1, 1,
  6398. 1, 1, 1077, 1, 464, 1, 1, 1,
  6399. 465, 1, 1, 1, 1, 1, 1, 1,
  6400. 1, 1, 1, 1, 1, 1, 1, 1,
  6401. 1, 1, 1, 464, 683, 467, 683, 683,
  6402. 683, 683, 683, 468, 1, 683, 683, 469,
  6403. 683, 470, 683, 683, 683, 683, 683, 683,
  6404. 683, 683, 683, 683, 683, 1, 215, 471,
  6405. 683, 1, 683, 472, 683, 683, 683, 683,
  6406. 683, 683, 683, 683, 683, 683, 683, 683,
  6407. 683, 683, 683, 683, 683, 683, 683, 683,
  6408. 683, 683, 683, 683, 683, 683, 1, 1,
  6409. 1, 683, 683, 683, 683, 683, 683, 683,
  6410. 683, 683, 683, 683, 683, 683, 683, 683,
  6411. 683, 683, 683, 683, 683, 683, 683, 683,
  6412. 683, 683, 683, 683, 683, 683, 683, 683,
  6413. 683, 683, 1, 1, 1, 1, 1, 1,
  6414. 1, 1, 1, 1, 1, 1, 1, 1,
  6415. 1, 1, 1, 1, 1, 1, 1, 1,
  6416. 1, 1, 1, 1, 1, 1, 1, 1,
  6417. 1, 1, 1, 1, 1, 1, 1, 1,
  6418. 1, 1, 1, 1, 1, 1, 1, 1,
  6419. 1, 1, 1, 1, 1, 1, 1, 1,
  6420. 1, 1, 1, 1, 1, 1, 1, 1,
  6421. 1, 1, 1, 1, 1, 687, 687, 687,
  6422. 687, 687, 687, 687, 687, 687, 687, 687,
  6423. 687, 687, 687, 687, 687, 687, 687, 687,
  6424. 687, 687, 687, 687, 687, 687, 687, 687,
  6425. 687, 687, 687, 688, 689, 689, 689, 689,
  6426. 689, 689, 689, 689, 689, 689, 689, 689,
  6427. 690, 689, 689, 691, 692, 692, 692, 693,
  6428. 1, 1089, 1, 1, 1, 1090, 1, 1,
  6429. 1, 1, 1, 1, 1, 1, 1, 1,
  6430. 1, 1, 1, 1, 1, 1, 1, 1,
  6431. 1089, 527, 528, 527, 527, 527, 527, 527,
  6432. 1091, 1, 527, 527, 946, 527, 705, 527,
  6433. 527, 527, 527, 527, 527, 527, 527, 527,
  6434. 527, 527, 1, 947, 531, 527, 1, 527,
  6435. 948, 527, 527, 527, 527, 527, 527, 527,
  6436. 527, 527, 527, 527, 527, 527, 527, 527,
  6437. 527, 527, 527, 527, 527, 527, 527, 527,
  6438. 527, 527, 527, 1, 1, 1, 527, 527,
  6439. 527, 527, 527, 527, 527, 527, 527, 527,
  6440. 527, 527, 527, 527, 527, 527, 527, 527,
  6441. 527, 527, 527, 527, 527, 527, 527, 527,
  6442. 527, 527, 527, 527, 527, 527, 527, 1,
  6443. 1, 1, 1, 1, 1, 1, 1, 1,
  6444. 1, 1, 1, 1, 1, 1, 1, 1,
  6445. 1, 1, 1, 1, 1, 1, 1, 1,
  6446. 1, 1, 1, 1, 1, 1, 1, 1,
  6447. 1, 1, 1, 1, 1, 1, 1, 1,
  6448. 1, 1, 1, 1, 1, 1, 1, 1,
  6449. 1, 1, 1, 1, 1, 1, 1, 1,
  6450. 1, 1, 1, 1, 1, 1, 1, 1,
  6451. 1, 1, 532, 532, 532, 532, 532, 532,
  6452. 532, 532, 532, 532, 532, 532, 532, 532,
  6453. 532, 532, 532, 532, 532, 532, 532, 532,
  6454. 532, 532, 532, 532, 532, 532, 532, 532,
  6455. 533, 534, 534, 534, 534, 534, 534, 534,
  6456. 534, 534, 534, 534, 534, 535, 534, 534,
  6457. 536, 537, 537, 537, 538, 1, 1077, 1077,
  6458. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6459. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6460. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6461. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6462. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6463. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6464. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6465. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6466. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6467. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6468. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6469. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6470. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6471. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6472. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6473. 1077, 1077, 1077, 1077, 1077, 1077, 1, 1,
  6474. 1, 1, 1, 1, 1, 1, 1, 1,
  6475. 1, 1, 1, 1, 1, 1, 1, 1,
  6476. 1, 1, 1, 1, 1, 1, 1, 1,
  6477. 1, 1, 1, 1, 1, 1, 1, 1,
  6478. 1, 1, 1, 1, 1, 1, 1, 1,
  6479. 1, 1, 1, 1, 1, 1, 1, 1,
  6480. 1, 1, 1, 1, 1, 1, 1, 1,
  6481. 1, 1, 1, 1, 1, 1, 1, 1,
  6482. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6483. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6484. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6485. 1081, 1081, 1081, 1081, 1081, 1081, 1082, 1083,
  6486. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6487. 1083, 1083, 1083, 1084, 1083, 1083, 1085, 1086,
  6488. 1086, 1086, 1087, 1, 1077, 1077, 1077, 1077,
  6489. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6490. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6491. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6492. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6493. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6494. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6495. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6496. 1077, 1077, 1077, 1077, 1, 1081, 1081, 1081,
  6497. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6498. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6499. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6500. 1081, 1081, 1081, 1081, 1081, 1, 1081, 1081,
  6501. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6502. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6503. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6504. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6505. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6506. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6507. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6508. 1081, 1081, 1081, 1081, 1081, 1081, 1, 1081,
  6509. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6510. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6511. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6512. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1,
  6513. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6514. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6515. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6516. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6517. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6518. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6519. 1, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6520. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6521. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6522. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6523. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6524. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6525. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6526. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6527. 1083, 1, 1083, 1083, 1083, 1083, 1083, 1083,
  6528. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  6529. 1083, 1083, 1, 1077, 1077, 1077, 1077, 1077,
  6530. 1077, 1077, 1077, 1092, 1, 1077, 1077, 1093,
  6531. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6532. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6533. 1077, 1077, 1092, 1077, 912, 1077, 1077, 1077,
  6534. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6535. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6536. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6537. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6538. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6539. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6540. 1077, 1077, 1077, 1077, 1077, 1077, 1080, 1077,
  6541. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6542. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6543. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6544. 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
  6545. 1077, 1077, 1, 1, 1, 1, 1, 1,
  6546. 1, 1, 1, 1, 1, 1, 1, 1,
  6547. 1, 1, 1, 1, 1, 1, 1, 1,
  6548. 1, 1, 1, 1, 1, 1, 1, 1,
  6549. 1, 1, 1, 1, 1, 1, 1, 1,
  6550. 1, 1, 1, 1, 1, 1, 1, 1,
  6551. 1, 1, 1, 1, 1, 1, 1, 1,
  6552. 1, 1, 1, 1, 1, 1, 1, 1,
  6553. 1, 1, 1, 1, 1081, 1081, 1081, 1081,
  6554. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6555. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6556. 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
  6557. 1081, 1081, 1082, 1083, 1083, 1083, 1083, 1083,
  6558. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084,
  6559. 1083, 1083, 1085, 1086, 1086, 1086, 1087, 1,
  6560. 1094, 1, 1092, 1, 1, 1, 1, 1,
  6561. 1, 1, 1, 1, 1, 1, 1, 1,
  6562. 1, 1, 1, 1, 1, 1, 1, 1,
  6563. 1, 1092, 1, 466, 466, 466, 466, 466,
  6564. 466, 466, 466, 466, 466, 466, 466, 466,
  6565. 466, 466, 466, 466, 466, 466, 466, 466,
  6566. 466, 466, 466, 466, 466, 466, 466, 466,
  6567. 466, 466, 466, 466, 466, 466, 466, 466,
  6568. 466, 466, 466, 466, 466, 466, 466, 466,
  6569. 466, 466, 466, 466, 466, 466, 466, 466,
  6570. 466, 466, 466, 466, 466, 466, 466, 466,
  6571. 466, 466, 466, 1, 473, 473, 473, 473,
  6572. 473, 473, 473, 473, 473, 473, 473, 473,
  6573. 473, 473, 473, 473, 473, 473, 473, 473,
  6574. 473, 473, 473, 473, 473, 473, 473, 473,
  6575. 473, 473, 473, 473, 1, 473, 473, 473,
  6576. 473, 473, 473, 473, 473, 473, 473, 473,
  6577. 473, 473, 473, 473, 473, 473, 473, 473,
  6578. 473, 473, 473, 473, 473, 473, 473, 473,
  6579. 473, 473, 473, 473, 473, 473, 473, 473,
  6580. 473, 473, 473, 473, 473, 473, 473, 473,
  6581. 473, 473, 473, 473, 473, 473, 473, 473,
  6582. 473, 473, 473, 473, 473, 473, 473, 473,
  6583. 473, 473, 473, 473, 473, 1, 473, 473,
  6584. 473, 473, 473, 473, 473, 473, 473, 473,
  6585. 473, 473, 473, 473, 473, 473, 473, 473,
  6586. 473, 473, 473, 473, 473, 473, 473, 473,
  6587. 473, 473, 473, 473, 473, 473, 1, 475,
  6588. 475, 475, 475, 475, 475, 475, 475, 475,
  6589. 475, 475, 475, 475, 475, 475, 475, 475,
  6590. 475, 475, 475, 475, 475, 475, 475, 475,
  6591. 475, 475, 475, 475, 475, 475, 475, 475,
  6592. 475, 475, 475, 475, 475, 475, 475, 475,
  6593. 475, 475, 475, 475, 475, 475, 475, 1,
  6594. 475, 475, 475, 475, 475, 475, 475, 475,
  6595. 475, 475, 475, 475, 475, 475, 475, 475,
  6596. 475, 475, 475, 475, 475, 475, 475, 475,
  6597. 475, 475, 475, 475, 475, 475, 475, 475,
  6598. 475, 475, 475, 475, 475, 475, 475, 475,
  6599. 475, 475, 475, 475, 475, 475, 475, 475,
  6600. 475, 475, 475, 475, 475, 475, 475, 475,
  6601. 475, 475, 475, 475, 475, 475, 475, 475,
  6602. 1, 475, 475, 475, 475, 475, 475, 475,
  6603. 475, 475, 475, 475, 475, 475, 475, 475,
  6604. 475, 1, 669, 669, 669, 669, 669, 669,
  6605. 669, 669, 669, 669, 669, 669, 669, 669,
  6606. 669, 669, 669, 669, 669, 669, 669, 669,
  6607. 669, 669, 669, 669, 669, 669, 669, 669,
  6608. 669, 669, 669, 669, 669, 669, 669, 669,
  6609. 669, 669, 669, 669, 669, 669, 669, 669,
  6610. 669, 669, 669, 669, 669, 669, 669, 669,
  6611. 669, 669, 669, 669, 669, 669, 669, 669,
  6612. 669, 669, 669, 669, 669, 669, 669, 669,
  6613. 669, 669, 669, 669, 669, 669, 669, 669,
  6614. 669, 669, 669, 669, 669, 669, 669, 669,
  6615. 669, 669, 669, 669, 669, 669, 669, 669,
  6616. 669, 669, 669, 669, 669, 669, 669, 669,
  6617. 669, 669, 669, 669, 669, 669, 669, 669,
  6618. 669, 669, 669, 669, 669, 669, 669, 669,
  6619. 669, 669, 669, 669, 669, 669, 669, 669,
  6620. 669, 669, 1, 1, 1, 1, 1, 1,
  6621. 1, 1, 1, 1, 1, 1, 1, 1,
  6622. 1, 1, 1, 1, 1, 1, 1, 1,
  6623. 1, 1, 1, 1, 1, 1, 1, 1,
  6624. 1, 1, 1, 1, 1, 1, 1, 1,
  6625. 1, 1, 1, 1, 1, 1, 1, 1,
  6626. 1, 1, 1, 1, 1, 1, 1, 1,
  6627. 1, 1, 1, 1, 1, 1, 1, 1,
  6628. 1, 1, 1, 1, 673, 673, 673, 673,
  6629. 673, 673, 673, 673, 673, 673, 673, 673,
  6630. 673, 673, 673, 673, 673, 673, 673, 673,
  6631. 673, 673, 673, 673, 673, 673, 673, 673,
  6632. 673, 673, 674, 675, 675, 675, 675, 675,
  6633. 675, 675, 675, 675, 675, 675, 675, 676,
  6634. 675, 675, 677, 678, 678, 678, 679, 1,
  6635. 669, 669, 669, 669, 669, 669, 669, 669,
  6636. 669, 669, 669, 669, 669, 669, 669, 669,
  6637. 669, 669, 669, 669, 669, 669, 669, 669,
  6638. 669, 669, 669, 669, 669, 669, 669, 669,
  6639. 669, 669, 669, 669, 669, 669, 669, 669,
  6640. 669, 669, 669, 669, 669, 669, 669, 669,
  6641. 669, 669, 669, 669, 669, 669, 669, 669,
  6642. 669, 669, 669, 669, 669, 669, 669, 669,
  6643. 1, 673, 673, 673, 673, 673, 673, 673,
  6644. 673, 673, 673, 673, 673, 673, 673, 673,
  6645. 673, 673, 673, 673, 673, 673, 673, 673,
  6646. 673, 673, 673, 673, 673, 673, 673, 673,
  6647. 673, 1, 673, 673, 673, 673, 673, 673,
  6648. 673, 673, 673, 673, 673, 673, 673, 673,
  6649. 673, 673, 673, 673, 673, 673, 673, 673,
  6650. 673, 673, 673, 673, 673, 673, 673, 673,
  6651. 673, 673, 673, 673, 673, 673, 673, 673,
  6652. 673, 673, 673, 673, 673, 673, 673, 673,
  6653. 673, 673, 673, 673, 673, 673, 673, 673,
  6654. 673, 673, 673, 673, 673, 673, 673, 673,
  6655. 673, 673, 1, 673, 673, 673, 673, 673,
  6656. 673, 673, 673, 673, 673, 673, 673, 673,
  6657. 673, 673, 673, 673, 673, 673, 673, 673,
  6658. 673, 673, 673, 673, 673, 673, 673, 673,
  6659. 673, 673, 673, 1, 675, 675, 675, 675,
  6660. 675, 675, 675, 675, 675, 675, 675, 675,
  6661. 675, 675, 675, 675, 675, 675, 675, 675,
  6662. 675, 675, 675, 675, 675, 675, 675, 675,
  6663. 675, 675, 675, 675, 675, 675, 675, 675,
  6664. 675, 675, 675, 675, 675, 675, 675, 675,
  6665. 675, 675, 675, 675, 1, 675, 675, 675,
  6666. 675, 675, 675, 675, 675, 675, 675, 675,
  6667. 675, 675, 675, 675, 675, 675, 675, 675,
  6668. 675, 675, 675, 675, 675, 675, 675, 675,
  6669. 675, 675, 675, 675, 675, 675, 675, 675,
  6670. 675, 675, 675, 675, 675, 675, 675, 675,
  6671. 675, 675, 675, 675, 675, 675, 675, 675,
  6672. 675, 675, 675, 675, 675, 675, 675, 675,
  6673. 675, 675, 675, 675, 675, 1, 675, 675,
  6674. 675, 675, 675, 675, 675, 675, 675, 675,
  6675. 675, 675, 675, 675, 675, 675, 1, 669,
  6676. 669, 669, 669, 669, 669, 669, 669, 1095,
  6677. 1, 669, 669, 1096, 669, 669, 669, 669,
  6678. 669, 669, 669, 669, 669, 669, 669, 669,
  6679. 669, 669, 669, 669, 669, 669, 1095, 669,
  6680. 1097, 669, 669, 669, 669, 669, 669, 669,
  6681. 669, 669, 669, 669, 669, 669, 669, 669,
  6682. 669, 669, 669, 669, 669, 669, 669, 669,
  6683. 669, 669, 669, 669, 669, 669, 669, 669,
  6684. 669, 669, 669, 669, 669, 669, 669, 669,
  6685. 669, 669, 669, 669, 669, 669, 669, 669,
  6686. 669, 669, 669, 669, 669, 669, 669, 669,
  6687. 669, 669, 672, 669, 669, 669, 669, 669,
  6688. 669, 669, 669, 669, 669, 669, 669, 669,
  6689. 669, 669, 669, 669, 669, 669, 669, 669,
  6690. 669, 669, 669, 669, 669, 669, 669, 669,
  6691. 669, 669, 669, 669, 669, 669, 1, 1,
  6692. 1, 1, 1, 1, 1, 1, 1, 1,
  6693. 1, 1, 1, 1, 1, 1, 1, 1,
  6694. 1, 1, 1, 1, 1, 1, 1, 1,
  6695. 1, 1, 1, 1, 1, 1, 1, 1,
  6696. 1, 1, 1, 1, 1, 1, 1, 1,
  6697. 1, 1, 1, 1, 1, 1, 1, 1,
  6698. 1, 1, 1, 1, 1, 1, 1, 1,
  6699. 1, 1, 1, 1, 1, 1, 1, 1,
  6700. 673, 673, 673, 673, 673, 673, 673, 673,
  6701. 673, 673, 673, 673, 673, 673, 673, 673,
  6702. 673, 673, 673, 673, 673, 673, 673, 673,
  6703. 673, 673, 673, 673, 673, 673, 674, 675,
  6704. 675, 675, 675, 675, 675, 675, 675, 675,
  6705. 675, 675, 675, 676, 675, 675, 677, 678,
  6706. 678, 678, 679, 1, 1098, 1, 1095, 1,
  6707. 1, 1, 1, 1, 1, 1, 1, 1,
  6708. 1, 1, 1, 1, 1, 1, 1, 1,
  6709. 1, 1, 1, 1, 1, 1095, 1, 1099,
  6710. 1, 1, 1, 1100, 1, 1, 1, 1,
  6711. 1, 1, 1, 1, 1, 1, 1, 1,
  6712. 1, 1, 1, 1, 1, 1, 1099, 482,
  6713. 483, 482, 482, 482, 482, 482, 1101, 1,
  6714. 482, 482, 1102, 482, 486, 482, 482, 482,
  6715. 482, 482, 482, 482, 482, 482, 482, 482,
  6716. 1, 1103, 471, 482, 1, 482, 1104, 482,
  6717. 482, 482, 482, 482, 482, 482, 482, 482,
  6718. 482, 482, 482, 482, 482, 482, 482, 482,
  6719. 482, 482, 482, 482, 482, 482, 482, 482,
  6720. 482, 1, 1, 1, 482, 482, 482, 482,
  6721. 482, 482, 482, 482, 482, 482, 482, 482,
  6722. 482, 482, 482, 482, 482, 482, 482, 482,
  6723. 482, 482, 482, 482, 482, 482, 482, 482,
  6724. 482, 482, 482, 482, 482, 1, 1, 1,
  6725. 1, 1, 1, 1, 1, 1, 1, 1,
  6726. 1, 1, 1, 1, 1, 1, 1, 1,
  6727. 1, 1, 1, 1, 1, 1, 1, 1,
  6728. 1, 1, 1, 1, 1, 1, 1, 1,
  6729. 1, 1, 1, 1, 1, 1, 1, 1,
  6730. 1, 1, 1, 1, 1, 1, 1, 1,
  6731. 1, 1, 1, 1, 1, 1, 1, 1,
  6732. 1, 1, 1, 1, 1, 1, 1, 1,
  6733. 488, 488, 488, 488, 488, 488, 488, 488,
  6734. 488, 488, 488, 488, 488, 488, 488, 488,
  6735. 488, 488, 488, 488, 488, 488, 488, 488,
  6736. 488, 488, 488, 488, 488, 488, 489, 490,
  6737. 490, 490, 490, 490, 490, 490, 490, 490,
  6738. 490, 490, 490, 491, 490, 490, 492, 493,
  6739. 493, 493, 494, 1, 1105, 1, 1106, 1,
  6740. 1, 1, 1, 1, 1, 1, 1, 1,
  6741. 1, 1, 1, 1, 1, 1, 1, 1,
  6742. 1, 1, 1, 1, 1, 1106, 1, 1107,
  6743. 1, 1, 1, 1108, 1, 1, 1, 1,
  6744. 1, 1, 1, 1, 1, 1, 1, 1,
  6745. 1, 1, 1, 1, 1, 1, 1107, 527,
  6746. 528, 527, 527, 527, 527, 527, 1109, 1,
  6747. 527, 527, 1110, 527, 705, 527, 527, 527,
  6748. 527, 527, 527, 527, 527, 527, 527, 527,
  6749. 1, 1111, 531, 527, 1, 527, 1112, 527,
  6750. 527, 527, 527, 527, 527, 527, 527, 527,
  6751. 527, 527, 527, 527, 527, 527, 527, 527,
  6752. 527, 527, 527, 527, 527, 527, 527, 527,
  6753. 527, 1, 1, 1, 527, 527, 527, 527,
  6754. 527, 527, 527, 527, 527, 527, 527, 527,
  6755. 527, 527, 527, 527, 527, 527, 527, 527,
  6756. 527, 527, 527, 527, 527, 527, 527, 527,
  6757. 527, 527, 527, 527, 527, 1, 1, 1,
  6758. 1, 1, 1, 1, 1, 1, 1, 1,
  6759. 1, 1, 1, 1, 1, 1, 1, 1,
  6760. 1, 1, 1, 1, 1, 1, 1, 1,
  6761. 1, 1, 1, 1, 1, 1, 1, 1,
  6762. 1, 1, 1, 1, 1, 1, 1, 1,
  6763. 1, 1, 1, 1, 1, 1, 1, 1,
  6764. 1, 1, 1, 1, 1, 1, 1, 1,
  6765. 1, 1, 1, 1, 1, 1, 1, 1,
  6766. 532, 532, 532, 532, 532, 532, 532, 532,
  6767. 532, 532, 532, 532, 532, 532, 532, 532,
  6768. 532, 532, 532, 532, 532, 532, 532, 532,
  6769. 532, 532, 532, 532, 532, 532, 533, 534,
  6770. 534, 534, 534, 534, 534, 534, 534, 534,
  6771. 534, 534, 534, 535, 534, 534, 536, 537,
  6772. 537, 537, 538, 1, 1113, 1, 1, 1,
  6773. 1114, 1, 1, 1, 1, 1, 1, 1,
  6774. 1, 1, 1, 1, 1, 1, 1, 1,
  6775. 1, 1, 1, 1113, 1115, 1116, 1115, 1115,
  6776. 1115, 1115, 1115, 1117, 1, 1115, 1115, 1,
  6777. 1115, 1118, 1115, 1115, 1115, 1115, 1115, 1115,
  6778. 1115, 1115, 1115, 1115, 1115, 1, 1, 550,
  6779. 1115, 1, 1115, 1, 1115, 1115, 1115, 1115,
  6780. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6781. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6782. 1115, 1115, 1115, 1115, 1115, 1115, 1, 1,
  6783. 1, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6784. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6785. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6786. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  6787. 1115, 1115, 1, 1, 1, 1, 1, 1,
  6788. 1, 1, 1, 1, 1, 1, 1, 1,
  6789. 1, 1, 1, 1, 1, 1, 1, 1,
  6790. 1, 1, 1, 1, 1, 1, 1, 1,
  6791. 1, 1, 1, 1, 1, 1, 1, 1,
  6792. 1, 1, 1, 1, 1, 1, 1, 1,
  6793. 1, 1, 1, 1, 1, 1, 1, 1,
  6794. 1, 1, 1, 1, 1, 1, 1, 1,
  6795. 1, 1, 1, 1, 1, 1119, 1119, 1119,
  6796. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  6797. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  6798. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  6799. 1119, 1119, 1119, 1120, 1121, 1121, 1121, 1121,
  6800. 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121,
  6801. 1122, 1121, 1121, 1123, 1124, 1124, 1124, 1125,
  6802. 1, 1126, 1127, 1126, 1126, 1126, 1126, 1126,
  6803. 1, 1, 1126, 1126, 1, 1126, 1128, 1126,
  6804. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6805. 1126, 1126, 1, 1, 1, 1126, 1, 1126,
  6806. 1, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6807. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6808. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6809. 1126, 1126, 1126, 1, 1, 1, 1126, 1126,
  6810. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6811. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6812. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6813. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1,
  6814. 1, 1, 1, 1, 1, 1, 1, 1,
  6815. 1, 1, 1, 1, 1, 1, 1, 1,
  6816. 1, 1, 1, 1, 1, 1, 1, 1,
  6817. 1, 1, 1, 1, 1, 1, 1, 1,
  6818. 1, 1, 1, 1, 1, 1, 1, 1,
  6819. 1, 1, 1, 1, 1, 1, 1, 1,
  6820. 1, 1, 1, 1, 1, 1, 1, 1,
  6821. 1, 1, 1, 1, 1, 1, 1, 1,
  6822. 1, 1, 1129, 1129, 1129, 1129, 1129, 1129,
  6823. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6824. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6825. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6826. 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  6827. 1131, 1131, 1131, 1131, 1131, 1132, 1131, 1131,
  6828. 1133, 1134, 1134, 1134, 1135, 1, 1136, 1,
  6829. 1, 1, 1137, 1, 1, 1, 1, 1,
  6830. 1, 1, 1, 1, 1, 1, 1, 1,
  6831. 1, 1, 1, 1, 1, 1136, 1126, 1127,
  6832. 1126, 1126, 1126, 1126, 1126, 1138, 1, 1126,
  6833. 1126, 469, 1126, 1126, 1126, 1126, 1126, 1126,
  6834. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1,
  6835. 215, 1, 1126, 1, 1126, 1139, 1126, 1126,
  6836. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6837. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6838. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6839. 1, 1, 1, 1126, 1126, 1126, 1126, 1126,
  6840. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6841. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6842. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  6843. 1126, 1126, 1126, 1126, 1, 1, 1, 1,
  6844. 1, 1, 1, 1, 1, 1, 1, 1,
  6845. 1, 1, 1, 1, 1, 1, 1, 1,
  6846. 1, 1, 1, 1, 1, 1, 1, 1,
  6847. 1, 1, 1, 1, 1, 1, 1, 1,
  6848. 1, 1, 1, 1, 1, 1, 1, 1,
  6849. 1, 1, 1, 1, 1, 1, 1, 1,
  6850. 1, 1, 1, 1, 1, 1, 1, 1,
  6851. 1, 1, 1, 1, 1, 1, 1, 1129,
  6852. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6853. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6854. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  6855. 1129, 1129, 1129, 1129, 1129, 1130, 1131, 1131,
  6856. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  6857. 1131, 1131, 1132, 1131, 1131, 1133, 1134, 1134,
  6858. 1134, 1135, 1, 1140, 1, 1, 1, 1141,
  6859. 1, 1, 1, 1, 1, 1, 1, 1,
  6860. 1, 1, 1, 1, 1, 1, 1, 1,
  6861. 1, 1, 1140, 1, 1, 1, 1, 1,
  6862. 1, 1, 1142, 1, 1, 1, 485, 1,
  6863. 1, 1, 1, 1, 1, 1, 1, 1,
  6864. 1, 1, 1, 1, 1, 232, 1, 1,
  6865. 1, 1, 981, 1, 1143, 1, 1140, 1,
  6866. 1, 1, 1, 1, 1, 1, 1, 1,
  6867. 1, 1, 1, 1, 1, 1, 1, 1,
  6868. 1, 1, 1, 1, 1, 1140, 1, 1144,
  6869. 1, 1, 1, 1145, 1, 1, 1, 1,
  6870. 1, 1, 1, 1, 1, 1, 1, 1,
  6871. 1, 1, 1, 1, 1, 1, 1144, 1,
  6872. 1, 1, 1, 1, 1, 1, 1146, 1,
  6873. 1, 1, 946, 1, 1, 1, 1, 1,
  6874. 1, 1, 1, 1, 1, 1, 1, 1,
  6875. 1, 947, 1, 1, 1, 1, 986, 1,
  6876. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6877. 1127, 1, 1147, 1147, 1148, 1147, 1147, 1147,
  6878. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6879. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1127,
  6880. 1147, 1, 1147, 1147, 1147, 1147, 1147, 1147,
  6881. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6882. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6883. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6884. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6885. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6886. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6887. 1147, 1147, 1147, 1149, 1147, 1147, 1147, 1147,
  6888. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6889. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6890. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6891. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1,
  6892. 1, 1, 1, 1, 1, 1, 1, 1,
  6893. 1, 1, 1, 1, 1, 1, 1, 1,
  6894. 1, 1, 1, 1, 1, 1, 1, 1,
  6895. 1, 1, 1, 1, 1, 1, 1, 1,
  6896. 1, 1, 1, 1, 1, 1, 1, 1,
  6897. 1, 1, 1, 1, 1, 1, 1, 1,
  6898. 1, 1, 1, 1, 1, 1, 1, 1,
  6899. 1, 1, 1, 1, 1, 1, 1, 1,
  6900. 1, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6901. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6902. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6903. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1151,
  6904. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6905. 1152, 1152, 1152, 1152, 1153, 1152, 1152, 1154,
  6906. 1155, 1155, 1155, 1156, 1, 1147, 1147, 1147,
  6907. 1147, 1147, 1147, 1147, 1147, 1147, 1, 1147,
  6908. 1147, 1157, 1147, 1147, 1147, 1147, 1147, 1147,
  6909. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6910. 1147, 1147, 1147, 1147, 1147, 1147, 1126, 1147,
  6911. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6912. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6913. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6914. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6915. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6916. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6917. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6918. 1149, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6919. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6920. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6921. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6922. 1147, 1147, 1147, 1147, 1, 1, 1, 1,
  6923. 1, 1, 1, 1, 1, 1, 1, 1,
  6924. 1, 1, 1, 1, 1, 1, 1, 1,
  6925. 1, 1, 1, 1, 1, 1, 1, 1,
  6926. 1, 1, 1, 1, 1, 1, 1, 1,
  6927. 1, 1, 1, 1, 1, 1, 1, 1,
  6928. 1, 1, 1, 1, 1, 1, 1, 1,
  6929. 1, 1, 1, 1, 1, 1, 1, 1,
  6930. 1, 1, 1, 1, 1, 1, 1150, 1150,
  6931. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6932. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6933. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6934. 1150, 1150, 1150, 1150, 1151, 1152, 1152, 1152,
  6935. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6936. 1152, 1153, 1152, 1152, 1154, 1155, 1155, 1155,
  6937. 1156, 1, 1158, 1, 1147, 1, 1, 1,
  6938. 1, 1, 1, 1, 1, 1, 1, 1,
  6939. 1, 1, 1, 1, 1, 1, 1, 1,
  6940. 1, 1, 1, 1147, 1, 1147, 1147, 1147,
  6941. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6942. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6943. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6944. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6945. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6946. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6947. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6948. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6949. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6950. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6951. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6952. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6953. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6954. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6955. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6956. 1147, 1147, 1147, 1147, 1147, 1, 1, 1,
  6957. 1, 1, 1, 1, 1, 1, 1, 1,
  6958. 1, 1, 1, 1, 1, 1, 1, 1,
  6959. 1, 1, 1, 1, 1, 1, 1, 1,
  6960. 1, 1, 1, 1, 1, 1, 1, 1,
  6961. 1, 1, 1, 1, 1, 1, 1, 1,
  6962. 1, 1, 1, 1, 1, 1, 1, 1,
  6963. 1, 1, 1, 1, 1, 1, 1, 1,
  6964. 1, 1, 1, 1, 1, 1, 1, 1150,
  6965. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6966. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6967. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6968. 1150, 1150, 1150, 1150, 1150, 1151, 1152, 1152,
  6969. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6970. 1152, 1152, 1153, 1152, 1152, 1154, 1155, 1155,
  6971. 1155, 1156, 1, 1147, 1147, 1147, 1147, 1147,
  6972. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6973. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6974. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6975. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6976. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6977. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6978. 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
  6979. 1147, 1147, 1147, 1, 1150, 1150, 1150, 1150,
  6980. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6981. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6982. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6983. 1150, 1150, 1150, 1150, 1, 1150, 1150, 1150,
  6984. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6985. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6986. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6987. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6988. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6989. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6990. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6991. 1150, 1150, 1150, 1150, 1150, 1, 1150, 1150,
  6992. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6993. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6994. 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
  6995. 1150, 1150, 1150, 1150, 1150, 1150, 1, 1152,
  6996. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6997. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6998. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  6999. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7000. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7001. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1,
  7002. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7003. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7004. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7005. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7006. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7007. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7008. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7009. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7010. 1, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7011. 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
  7012. 1152, 1, 1159, 1, 1127, 1, 1, 1,
  7013. 1, 1, 1, 1, 1, 1, 1, 1,
  7014. 1, 1, 1, 1, 1, 1, 1, 1,
  7015. 1, 1, 1, 1127, 1, 1126, 1126, 1126,
  7016. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7017. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7018. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7019. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7020. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7021. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7022. 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126,
  7023. 1126, 1126, 1126, 1126, 1126, 1, 1129, 1129,
  7024. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7025. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7026. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7027. 1129, 1129, 1129, 1129, 1129, 1129, 1, 1129,
  7028. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7029. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7030. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7031. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7032. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7033. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7034. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7035. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1,
  7036. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7037. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7038. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7039. 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
  7040. 1, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7041. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7042. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7043. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7044. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7045. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7046. 1131, 1, 1131, 1131, 1131, 1131, 1131, 1131,
  7047. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7048. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7049. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7050. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7051. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7052. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7053. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7054. 1131, 1131, 1, 1131, 1131, 1131, 1131, 1131,
  7055. 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
  7056. 1131, 1131, 1131, 1, 539, 1, 1, 1,
  7057. 540, 1, 1, 1, 1, 1, 1, 1,
  7058. 1, 1, 1, 1, 1, 1, 1, 1,
  7059. 1, 1, 1, 539, 683, 467, 683, 683,
  7060. 683, 683, 683, 541, 1, 683, 683, 1,
  7061. 683, 1160, 683, 683, 683, 683, 683, 683,
  7062. 683, 683, 683, 683, 683, 1, 1, 471,
  7063. 683, 1, 683, 500, 683, 683, 683, 683,
  7064. 683, 683, 683, 683, 683, 683, 683, 683,
  7065. 683, 683, 683, 683, 683, 683, 683, 683,
  7066. 683, 683, 683, 683, 683, 683, 1, 1,
  7067. 1, 683, 683, 683, 683, 683, 683, 683,
  7068. 683, 683, 683, 683, 683, 683, 683, 683,
  7069. 683, 683, 683, 683, 683, 683, 683, 683,
  7070. 683, 683, 683, 683, 683, 683, 683, 683,
  7071. 683, 683, 1, 1, 1, 1, 1, 1,
  7072. 1, 1, 1, 1, 1, 1, 1, 1,
  7073. 1, 1, 1, 1, 1, 1, 1, 1,
  7074. 1, 1, 1, 1, 1, 1, 1, 1,
  7075. 1, 1, 1, 1, 1, 1, 1, 1,
  7076. 1, 1, 1, 1, 1, 1, 1, 1,
  7077. 1, 1, 1, 1, 1, 1, 1, 1,
  7078. 1, 1, 1, 1, 1, 1, 1, 1,
  7079. 1, 1, 1, 1, 1, 687, 687, 687,
  7080. 687, 687, 687, 687, 687, 687, 687, 687,
  7081. 687, 687, 687, 687, 687, 687, 687, 687,
  7082. 687, 687, 687, 687, 687, 687, 687, 687,
  7083. 687, 687, 687, 688, 689, 689, 689, 689,
  7084. 689, 689, 689, 689, 689, 689, 689, 689,
  7085. 690, 689, 689, 691, 692, 692, 692, 693,
  7086. 1, 1161, 1, 1, 1, 1162, 1, 1,
  7087. 1, 1, 1, 1, 1, 1, 1, 1,
  7088. 1, 1, 1, 1, 1, 1, 1, 1,
  7089. 1161, 1163, 1164, 1163, 1163, 1163, 1163, 1163,
  7090. 1165, 1, 1163, 1163, 1, 1163, 1166, 1163,
  7091. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7092. 1163, 1163, 1, 1, 1, 1163, 1, 1163,
  7093. 1, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7094. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7095. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7096. 1163, 1163, 1163, 1167, 1, 1, 1163, 1163,
  7097. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7098. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7099. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163,
  7100. 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1,
  7101. 1, 1, 1, 1, 1, 1, 1, 1,
  7102. 1, 1, 1, 1, 1, 1, 1, 1,
  7103. 1, 1, 1, 1, 1, 1, 1, 1,
  7104. 1, 1, 1, 1, 1, 1, 1, 1,
  7105. 1, 1, 1, 1, 1, 1, 1, 1,
  7106. 1, 1, 1, 1, 1, 1, 1, 1,
  7107. 1, 1, 1, 1, 1, 1, 1, 1,
  7108. 1, 1, 1, 1, 1, 1, 1, 1,
  7109. 1, 1, 1168, 1168, 1168, 1168, 1168, 1168,
  7110. 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
  7111. 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
  7112. 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
  7113. 1169, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
  7114. 1170, 1170, 1170, 1170, 1170, 1171, 1170, 1170,
  7115. 1172, 1173, 1173, 1173, 1174, 1, 1175, 1,
  7116. 1, 1, 1176, 1, 1, 1, 1, 1,
  7117. 1, 1, 1, 1, 1, 1, 1, 1,
  7118. 1, 1, 1, 1, 1, 1175, 1177, 1178,
  7119. 1177, 1177, 1177, 1177, 1177, 1179, 1, 1177,
  7120. 1177, 1, 1177, 1180, 1177, 1177, 1177, 1177,
  7121. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1,
  7122. 1, 1, 1177, 1, 1177, 1, 1177, 1177,
  7123. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7124. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7125. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7126. 1181, 1, 1, 1177, 1177, 1177, 1177, 1177,
  7127. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7128. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7129. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7130. 1177, 1177, 1177, 1177, 1, 1, 1, 1,
  7131. 1, 1, 1, 1, 1, 1, 1, 1,
  7132. 1, 1, 1, 1, 1, 1, 1, 1,
  7133. 1, 1, 1, 1, 1, 1, 1, 1,
  7134. 1, 1, 1, 1, 1, 1, 1, 1,
  7135. 1, 1, 1, 1, 1, 1, 1, 1,
  7136. 1, 1, 1, 1, 1, 1, 1, 1,
  7137. 1, 1, 1, 1, 1, 1, 1, 1,
  7138. 1, 1, 1, 1, 1, 1, 1, 1182,
  7139. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7140. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7141. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7142. 1182, 1182, 1182, 1182, 1182, 1183, 1184, 1184,
  7143. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7144. 1184, 1184, 1185, 1184, 1184, 1186, 1187, 1187,
  7145. 1187, 1188, 1, 1189, 1, 1175, 1, 1,
  7146. 1, 1, 1, 1, 1, 1, 1, 1,
  7147. 1, 1, 1, 1, 1, 1, 1, 1,
  7148. 1, 1, 1, 1, 1175, 1, 1190, 1,
  7149. 1, 1, 1191, 1, 1, 1, 1, 1,
  7150. 1, 1, 1, 1, 1, 1, 1, 1,
  7151. 1, 1, 1, 1, 1, 1190, 1177, 1178,
  7152. 1177, 1177, 1177, 1177, 1177, 1192, 1, 1177,
  7153. 1177, 1, 1177, 1193, 1177, 1177, 1177, 1177,
  7154. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1,
  7155. 1, 1, 1177, 1194, 1177, 1, 1177, 1177,
  7156. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7157. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7158. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7159. 1, 1, 1, 1177, 1177, 1177, 1177, 1177,
  7160. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7161. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7162. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7163. 1177, 1177, 1177, 1177, 1, 1, 1, 1,
  7164. 1, 1, 1, 1, 1, 1, 1, 1,
  7165. 1, 1, 1, 1, 1, 1, 1, 1,
  7166. 1, 1, 1, 1, 1, 1, 1, 1,
  7167. 1, 1, 1, 1, 1, 1, 1, 1,
  7168. 1, 1, 1, 1, 1, 1, 1, 1,
  7169. 1, 1, 1, 1, 1, 1, 1, 1,
  7170. 1, 1, 1, 1, 1, 1, 1, 1,
  7171. 1, 1, 1, 1, 1, 1, 1, 1182,
  7172. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7173. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7174. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7175. 1182, 1182, 1182, 1182, 1182, 1183, 1184, 1184,
  7176. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7177. 1184, 1184, 1185, 1184, 1184, 1186, 1187, 1187,
  7178. 1187, 1188, 1, 1190, 1, 1, 1, 1191,
  7179. 1, 1, 1, 1, 1, 1, 1, 1,
  7180. 1, 1, 1, 1, 1, 1, 1, 1,
  7181. 1, 1, 1190, 1, 1, 1, 1, 1,
  7182. 1, 1, 1192, 1, 1, 1, 1, 1,
  7183. 1195, 1, 1, 1, 1, 1, 1, 1,
  7184. 1, 1, 1, 1, 1, 1, 1, 1,
  7185. 1194, 1, 1196, 1, 1190, 1, 1, 1,
  7186. 1, 1, 1, 1, 1, 1, 1, 1,
  7187. 1, 1, 1, 1, 1, 1, 1, 1,
  7188. 1, 1, 1, 1190, 1, 1197, 1, 1,
  7189. 1, 1198, 1, 1, 1, 1, 1, 1,
  7190. 1, 1, 1, 1, 1, 1, 1, 1,
  7191. 1, 1, 1, 1, 1197, 1, 1, 1,
  7192. 1, 1, 1, 1, 1199, 1, 1, 1,
  7193. 1, 1, 1200, 1, 1, 1, 1, 1,
  7194. 1, 1, 1, 1, 1, 1, 1, 1,
  7195. 1, 1, 1201, 1, 1195, 1, 1, 1,
  7196. 1202, 1, 1, 1, 1, 1, 1, 1,
  7197. 1, 1, 1, 1, 1, 1, 1, 1,
  7198. 1, 1, 1, 1195, 1203, 1, 1203, 1203,
  7199. 1203, 1203, 1203, 1204, 1, 1203, 1203, 1,
  7200. 1203, 1, 1203, 1203, 1203, 1203, 1203, 1203,
  7201. 1203, 1203, 1203, 1203, 1203, 1, 1, 1,
  7202. 1203, 1, 1203, 1, 1203, 1203, 1203, 1203,
  7203. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7204. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7205. 1203, 1203, 1203, 1203, 1203, 1203, 1, 1,
  7206. 1, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7207. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7208. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7209. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7210. 1203, 1203, 1, 1, 1, 1, 1, 1,
  7211. 1, 1, 1, 1, 1, 1, 1, 1,
  7212. 1, 1, 1, 1, 1, 1, 1, 1,
  7213. 1, 1, 1, 1, 1, 1, 1, 1,
  7214. 1, 1, 1, 1, 1, 1, 1, 1,
  7215. 1, 1, 1, 1, 1, 1, 1, 1,
  7216. 1, 1, 1, 1, 1, 1, 1, 1,
  7217. 1, 1, 1, 1, 1, 1, 1, 1,
  7218. 1, 1, 1, 1, 1, 1205, 1205, 1205,
  7219. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7220. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7221. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7222. 1205, 1205, 1205, 1206, 1207, 1207, 1207, 1207,
  7223. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7224. 1208, 1207, 1207, 1209, 1210, 1210, 1210, 1211,
  7225. 1, 1212, 1, 1195, 1, 1, 1, 1,
  7226. 1, 1, 1, 1, 1, 1, 1, 1,
  7227. 1, 1, 1, 1, 1, 1, 1, 1,
  7228. 1, 1, 1195, 1, 1190, 1, 1, 1,
  7229. 1191, 1, 1, 1, 1, 1, 1, 1,
  7230. 1, 1, 1, 1, 1, 1, 1, 1,
  7231. 1, 1, 1, 1190, 1203, 1, 1203, 1203,
  7232. 1203, 1203, 1203, 1192, 1, 1203, 1203, 1,
  7233. 1203, 1195, 1203, 1203, 1203, 1203, 1203, 1203,
  7234. 1203, 1203, 1203, 1203, 1203, 1, 1, 1,
  7235. 1203, 1194, 1203, 1, 1203, 1203, 1203, 1203,
  7236. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7237. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7238. 1203, 1203, 1203, 1203, 1203, 1203, 1, 1,
  7239. 1, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7240. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7241. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7242. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7243. 1203, 1203, 1, 1, 1, 1, 1, 1,
  7244. 1, 1, 1, 1, 1, 1, 1, 1,
  7245. 1, 1, 1, 1, 1, 1, 1, 1,
  7246. 1, 1, 1, 1, 1, 1, 1, 1,
  7247. 1, 1, 1, 1, 1, 1, 1, 1,
  7248. 1, 1, 1, 1, 1, 1, 1, 1,
  7249. 1, 1, 1, 1, 1, 1, 1, 1,
  7250. 1, 1, 1, 1, 1, 1, 1, 1,
  7251. 1, 1, 1, 1, 1, 1205, 1205, 1205,
  7252. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7253. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7254. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7255. 1205, 1205, 1205, 1206, 1207, 1207, 1207, 1207,
  7256. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7257. 1208, 1207, 1207, 1209, 1210, 1210, 1210, 1211,
  7258. 1, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7259. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7260. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7261. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7262. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7263. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7264. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7265. 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
  7266. 1203, 1, 1205, 1205, 1205, 1205, 1205, 1205,
  7267. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7268. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7269. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7270. 1205, 1205, 1, 1205, 1205, 1205, 1205, 1205,
  7271. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7272. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7273. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7274. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7275. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7276. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7277. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7278. 1205, 1205, 1205, 1, 1205, 1205, 1205, 1205,
  7279. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7280. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7281. 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
  7282. 1205, 1205, 1205, 1205, 1, 1207, 1207, 1207,
  7283. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7284. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7285. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7286. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7287. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7288. 1207, 1207, 1207, 1207, 1207, 1, 1207, 1207,
  7289. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7290. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7291. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7292. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7293. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7294. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7295. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7296. 1207, 1207, 1207, 1207, 1207, 1207, 1, 1207,
  7297. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  7298. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1,
  7299. 1200, 1, 1, 1, 1213, 1, 1, 1,
  7300. 1, 1, 1, 1, 1, 1, 1, 1,
  7301. 1, 1, 1, 1, 1, 1, 1, 1200,
  7302. 1214, 1, 1214, 1214, 1214, 1214, 1214, 1215,
  7303. 1, 1214, 1214, 1, 1214, 1, 1214, 1214,
  7304. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7305. 1214, 1, 1, 1, 1214, 1, 1214, 1,
  7306. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7307. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7308. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7309. 1214, 1214, 1, 1, 1, 1214, 1214, 1214,
  7310. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7311. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7312. 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
  7313. 1214, 1214, 1214, 1214, 1214, 1214, 1, 1,
  7314. 1, 1, 1, 1, 1, 1, 1, 1,
  7315. 1, 1, 1, 1, 1, 1, 1, 1,
  7316. 1, 1, 1, 1, 1, 1, 1, 1,
  7317. 1, 1, 1, 1, 1, 1, 1, 1,
  7318. 1, 1, 1, 1, 1, 1, 1, 1,
  7319. 1, 1, 1, 1, 1, 1, 1, 1,
  7320. 1, 1, 1, 1, 1, 1, 1, 1,
  7321. 1, 1, 1, 1, 1, 1, 1, 1,
  7322. 1, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
  7323. 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
  7324. 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
  7325. 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217,
  7326. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  7327. 1218, 1218, 1218, 1218, 1219, 1218, 1218, 1220,
  7328. 1221, 1221, 1221, 1222, 1, 1223, 1223, 1223,
  7329. 1223, 1223, 1223, 1223, 1223, 1178, 1, 1223,
  7330. 1223, 1224, 1223, 1223, 1223, 1223, 1223, 1223,
  7331. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7332. 1223, 1223, 1223, 1223, 1178, 1223, 1, 1223,
  7333. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7334. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7335. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7336. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7337. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7338. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7339. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7340. 1225, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7341. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7342. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7343. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7344. 1223, 1223, 1223, 1223, 1, 1, 1, 1,
  7345. 1, 1, 1, 1, 1, 1, 1, 1,
  7346. 1, 1, 1, 1, 1, 1, 1, 1,
  7347. 1, 1, 1, 1, 1, 1, 1, 1,
  7348. 1, 1, 1, 1, 1, 1, 1, 1,
  7349. 1, 1, 1, 1, 1, 1, 1, 1,
  7350. 1, 1, 1, 1, 1, 1, 1, 1,
  7351. 1, 1, 1, 1, 1, 1, 1, 1,
  7352. 1, 1, 1, 1, 1, 1, 1226, 1226,
  7353. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7354. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7355. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7356. 1226, 1226, 1226, 1226, 1227, 1228, 1228, 1228,
  7357. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7358. 1228, 1229, 1228, 1228, 1230, 1231, 1231, 1231,
  7359. 1232, 1, 1223, 1223, 1223, 1223, 1223, 1223,
  7360. 1223, 1223, 1223, 1, 1223, 1223, 1233, 1223,
  7361. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7362. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7363. 1223, 1223, 1223, 1234, 1223, 1223, 1223, 1223,
  7364. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7365. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7366. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7367. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7368. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7369. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7370. 1223, 1223, 1223, 1223, 1223, 1225, 1223, 1223,
  7371. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7372. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7373. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7374. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7375. 1223, 1, 1, 1, 1, 1, 1, 1,
  7376. 1, 1, 1, 1, 1, 1, 1, 1,
  7377. 1, 1, 1, 1, 1, 1, 1, 1,
  7378. 1, 1, 1, 1, 1, 1, 1, 1,
  7379. 1, 1, 1, 1, 1, 1, 1, 1,
  7380. 1, 1, 1, 1, 1, 1, 1, 1,
  7381. 1, 1, 1, 1, 1, 1, 1, 1,
  7382. 1, 1, 1, 1, 1, 1, 1, 1,
  7383. 1, 1, 1, 1226, 1226, 1226, 1226, 1226,
  7384. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7385. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7386. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7387. 1226, 1227, 1228, 1228, 1228, 1228, 1228, 1228,
  7388. 1228, 1228, 1228, 1228, 1228, 1228, 1229, 1228,
  7389. 1228, 1230, 1231, 1231, 1231, 1232, 1, 1235,
  7390. 1, 1223, 1, 1, 1, 1, 1, 1,
  7391. 1, 1, 1, 1, 1, 1, 1, 1,
  7392. 1, 1, 1, 1, 1, 1, 1, 1,
  7393. 1223, 1, 1236, 1, 1, 1, 1237, 1,
  7394. 1, 1, 1, 1, 1, 1, 1, 1,
  7395. 1, 1, 1, 1, 1, 1, 1, 1,
  7396. 1, 1236, 1234, 1178, 1234, 1234, 1234, 1234,
  7397. 1234, 1238, 1, 1234, 1234, 1, 1234, 1180,
  7398. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7399. 1234, 1234, 1234, 1, 1, 1, 1234, 1194,
  7400. 1234, 1, 1234, 1234, 1234, 1234, 1234, 1234,
  7401. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7402. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7403. 1234, 1234, 1234, 1234, 1, 1, 1, 1234,
  7404. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7405. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7406. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7407. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7408. 1, 1, 1, 1, 1, 1, 1, 1,
  7409. 1, 1, 1, 1, 1, 1, 1, 1,
  7410. 1, 1, 1, 1, 1, 1, 1, 1,
  7411. 1, 1, 1, 1, 1, 1, 1, 1,
  7412. 1, 1, 1, 1, 1, 1, 1, 1,
  7413. 1, 1, 1, 1, 1, 1, 1, 1,
  7414. 1, 1, 1, 1, 1, 1, 1, 1,
  7415. 1, 1, 1, 1, 1, 1, 1, 1,
  7416. 1, 1, 1, 1239, 1239, 1239, 1239, 1239,
  7417. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7418. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7419. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7420. 1239, 1240, 1241, 1241, 1241, 1241, 1241, 1241,
  7421. 1241, 1241, 1241, 1241, 1241, 1241, 1242, 1241,
  7422. 1241, 1243, 1244, 1244, 1244, 1245, 1, 1236,
  7423. 1, 1, 1, 1237, 1, 1, 1, 1,
  7424. 1, 1, 1, 1, 1, 1, 1, 1,
  7425. 1, 1, 1, 1, 1, 1, 1236, 1,
  7426. 1, 1, 1, 1, 1, 1, 1238, 1,
  7427. 1, 1, 1, 1, 1, 1, 1, 1,
  7428. 1, 1, 1, 1, 1, 1, 1, 1,
  7429. 1, 1, 1, 1, 1194, 1, 1246, 1,
  7430. 1236, 1, 1, 1, 1, 1, 1, 1,
  7431. 1, 1, 1, 1, 1, 1, 1, 1,
  7432. 1, 1, 1, 1, 1, 1, 1, 1236,
  7433. 1, 1247, 1, 1, 1, 1248, 1, 1,
  7434. 1, 1, 1, 1, 1, 1, 1, 1,
  7435. 1, 1, 1, 1, 1, 1, 1, 1,
  7436. 1247, 1, 1, 1, 1, 1, 1, 1,
  7437. 1249, 1, 1, 1, 1, 1, 1, 1,
  7438. 1, 1, 1, 1, 1, 1, 1, 1,
  7439. 1, 1, 1, 1, 1, 1, 1201, 1,
  7440. 1234, 1178, 1234, 1234, 1234, 1234, 1234, 1,
  7441. 1, 1234, 1234, 1, 1234, 1180, 1234, 1234,
  7442. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7443. 1234, 1, 1, 1, 1234, 1, 1234, 1,
  7444. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7445. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7446. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7447. 1234, 1234, 1, 1, 1, 1234, 1234, 1234,
  7448. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7449. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7450. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7451. 1234, 1234, 1234, 1234, 1234, 1234, 1, 1,
  7452. 1, 1, 1, 1, 1, 1, 1, 1,
  7453. 1, 1, 1, 1, 1, 1, 1, 1,
  7454. 1, 1, 1, 1, 1, 1, 1, 1,
  7455. 1, 1, 1, 1, 1, 1, 1, 1,
  7456. 1, 1, 1, 1, 1, 1, 1, 1,
  7457. 1, 1, 1, 1, 1, 1, 1, 1,
  7458. 1, 1, 1, 1, 1, 1, 1, 1,
  7459. 1, 1, 1, 1, 1, 1, 1, 1,
  7460. 1, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7461. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7462. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7463. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1240,
  7464. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7465. 1241, 1241, 1241, 1241, 1242, 1241, 1241, 1243,
  7466. 1244, 1244, 1244, 1245, 1, 1234, 1234, 1234,
  7467. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7468. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7469. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7470. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7471. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7472. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7473. 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
  7474. 1234, 1234, 1234, 1234, 1234, 1, 1239, 1239,
  7475. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7476. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7477. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7478. 1239, 1239, 1239, 1239, 1239, 1239, 1, 1239,
  7479. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7480. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7481. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7482. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7483. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7484. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7485. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7486. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1,
  7487. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7488. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7489. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7490. 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
  7491. 1, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7492. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7493. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7494. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7495. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7496. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7497. 1241, 1, 1241, 1241, 1241, 1241, 1241, 1241,
  7498. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7499. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7500. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7501. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7502. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7503. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7504. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7505. 1241, 1241, 1, 1241, 1241, 1241, 1241, 1241,
  7506. 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
  7507. 1241, 1241, 1241, 1, 1223, 1223, 1223, 1223,
  7508. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7509. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7510. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7511. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7512. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7513. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7514. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7515. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7516. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7517. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7518. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7519. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7520. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7521. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7522. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7523. 1223, 1223, 1223, 1223, 1, 1, 1, 1,
  7524. 1, 1, 1, 1, 1, 1, 1, 1,
  7525. 1, 1, 1, 1, 1, 1, 1, 1,
  7526. 1, 1, 1, 1, 1, 1, 1, 1,
  7527. 1, 1, 1, 1, 1, 1, 1, 1,
  7528. 1, 1, 1, 1, 1, 1, 1, 1,
  7529. 1, 1, 1, 1, 1, 1, 1, 1,
  7530. 1, 1, 1, 1, 1, 1, 1, 1,
  7531. 1, 1, 1, 1, 1, 1, 1226, 1226,
  7532. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7533. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7534. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7535. 1226, 1226, 1226, 1226, 1227, 1228, 1228, 1228,
  7536. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7537. 1228, 1229, 1228, 1228, 1230, 1231, 1231, 1231,
  7538. 1232, 1, 1223, 1223, 1223, 1223, 1223, 1223,
  7539. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7540. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7541. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7542. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7543. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7544. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7545. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  7546. 1223, 1223, 1, 1226, 1226, 1226, 1226, 1226,
  7547. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7548. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7549. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7550. 1226, 1226, 1226, 1, 1226, 1226, 1226, 1226,
  7551. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7552. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7553. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7554. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7555. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7556. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7557. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7558. 1226, 1226, 1226, 1226, 1, 1226, 1226, 1226,
  7559. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7560. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7561. 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
  7562. 1226, 1226, 1226, 1226, 1226, 1, 1228, 1228,
  7563. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7564. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7565. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7566. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7567. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7568. 1228, 1228, 1228, 1228, 1228, 1228, 1, 1228,
  7569. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7570. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7571. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7572. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7573. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7574. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7575. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7576. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1,
  7577. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7578. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  7579. 1, 1250, 1, 1178, 1, 1, 1, 1,
  7580. 1, 1, 1, 1, 1, 1, 1, 1,
  7581. 1, 1, 1, 1, 1, 1, 1, 1,
  7582. 1, 1, 1178, 1, 1195, 1, 1, 1,
  7583. 1202, 1, 1, 1, 1, 1, 1, 1,
  7584. 1, 1, 1, 1, 1, 1, 1, 1,
  7585. 1, 1, 1, 1195, 1177, 1178, 1177, 1177,
  7586. 1177, 1177, 1177, 1204, 1, 1177, 1177, 1,
  7587. 1177, 1180, 1177, 1177, 1177, 1177, 1177, 1177,
  7588. 1177, 1177, 1177, 1177, 1177, 1, 1, 1,
  7589. 1177, 1, 1177, 1, 1177, 1177, 1177, 1177,
  7590. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7591. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7592. 1177, 1177, 1177, 1177, 1177, 1177, 1, 1,
  7593. 1, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7594. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7595. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7596. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7597. 1177, 1177, 1, 1, 1, 1, 1, 1,
  7598. 1, 1, 1, 1, 1, 1, 1, 1,
  7599. 1, 1, 1, 1, 1, 1, 1, 1,
  7600. 1, 1, 1, 1, 1, 1, 1, 1,
  7601. 1, 1, 1, 1, 1, 1, 1, 1,
  7602. 1, 1, 1, 1, 1, 1, 1, 1,
  7603. 1, 1, 1, 1, 1, 1, 1, 1,
  7604. 1, 1, 1, 1, 1, 1, 1, 1,
  7605. 1, 1, 1, 1, 1, 1182, 1182, 1182,
  7606. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7607. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7608. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7609. 1182, 1182, 1182, 1183, 1184, 1184, 1184, 1184,
  7610. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7611. 1185, 1184, 1184, 1186, 1187, 1187, 1187, 1188,
  7612. 1, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7613. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7614. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7615. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7616. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7617. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7618. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7619. 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
  7620. 1177, 1, 1182, 1182, 1182, 1182, 1182, 1182,
  7621. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7622. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7623. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7624. 1182, 1182, 1, 1182, 1182, 1182, 1182, 1182,
  7625. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7626. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7627. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7628. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7629. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7630. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7631. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7632. 1182, 1182, 1182, 1, 1182, 1182, 1182, 1182,
  7633. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7634. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7635. 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
  7636. 1182, 1182, 1182, 1182, 1, 1184, 1184, 1184,
  7637. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7638. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7639. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7640. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7641. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7642. 1184, 1184, 1184, 1184, 1184, 1, 1184, 1184,
  7643. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7644. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7645. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7646. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7647. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7648. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7649. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7650. 1184, 1184, 1184, 1184, 1184, 1184, 1, 1184,
  7651. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  7652. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1,
  7653. 1251, 1, 1, 1, 1252, 1, 1, 1,
  7654. 1, 1, 1, 1, 1, 1, 1, 1,
  7655. 1, 1, 1, 1, 1, 1, 1, 1251,
  7656. 1253, 1254, 1253, 1253, 1253, 1253, 1253, 1255,
  7657. 1, 1253, 1253, 1, 1253, 1256, 1253, 1253,
  7658. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7659. 1253, 1, 1, 1, 1253, 1, 1253, 1,
  7660. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7661. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7662. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7663. 1253, 1253, 1257, 1, 1, 1253, 1253, 1253,
  7664. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7665. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7666. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  7667. 1253, 1253, 1253, 1253, 1253, 1253, 1, 1,
  7668. 1, 1, 1, 1, 1, 1, 1, 1,
  7669. 1, 1, 1, 1, 1, 1, 1, 1,
  7670. 1, 1, 1, 1, 1, 1, 1, 1,
  7671. 1, 1, 1, 1, 1, 1, 1, 1,
  7672. 1, 1, 1, 1, 1, 1, 1, 1,
  7673. 1, 1, 1, 1, 1, 1, 1, 1,
  7674. 1, 1, 1, 1, 1, 1, 1, 1,
  7675. 1, 1, 1, 1, 1, 1, 1, 1,
  7676. 1, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
  7677. 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
  7678. 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
  7679. 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1259,
  7680. 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
  7681. 1260, 1260, 1260, 1260, 1261, 1260, 1260, 1262,
  7682. 1263, 1263, 1263, 1264, 1, 1181, 1181, 1181,
  7683. 1181, 1181, 1181, 1181, 1181, 1181, 1, 1181,
  7684. 1181, 1265, 1181, 1181, 1181, 1181, 1181, 1181,
  7685. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7686. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7687. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7688. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7689. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7690. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7691. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7692. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7693. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1,
  7694. 1266, 1236, 1181, 1181, 1181, 1181, 1181, 1181,
  7695. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7696. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7697. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7698. 1181, 1181, 1181, 1181, 1, 1, 1, 1,
  7699. 1, 1, 1, 1, 1, 1, 1, 1,
  7700. 1, 1, 1, 1, 1, 1, 1, 1,
  7701. 1, 1, 1, 1, 1, 1, 1, 1,
  7702. 1, 1, 1, 1, 1, 1, 1, 1,
  7703. 1, 1, 1, 1, 1, 1, 1, 1,
  7704. 1, 1, 1, 1, 1, 1, 1, 1,
  7705. 1, 1, 1, 1, 1, 1, 1, 1,
  7706. 1, 1, 1, 1, 1, 1, 1267, 1267,
  7707. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7708. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7709. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7710. 1267, 1267, 1267, 1267, 1268, 1269, 1269, 1269,
  7711. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7712. 1269, 1270, 1269, 1269, 1271, 1272, 1272, 1272,
  7713. 1273, 1, 1274, 1, 1181, 1, 1, 1,
  7714. 1, 1, 1, 1, 1, 1, 1, 1,
  7715. 1, 1, 1, 1, 1, 1, 1, 1,
  7716. 1, 1, 1, 1181, 1, 1181, 1181, 1181,
  7717. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7718. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7719. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7720. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7721. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7722. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7723. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7724. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7725. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7726. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7727. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7728. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7729. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7730. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7731. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7732. 1181, 1181, 1181, 1181, 1181, 1, 1, 1,
  7733. 1, 1, 1, 1, 1, 1, 1, 1,
  7734. 1, 1, 1, 1, 1, 1, 1, 1,
  7735. 1, 1, 1, 1, 1, 1, 1, 1,
  7736. 1, 1, 1, 1, 1, 1, 1, 1,
  7737. 1, 1, 1, 1, 1, 1, 1, 1,
  7738. 1, 1, 1, 1, 1, 1, 1, 1,
  7739. 1, 1, 1, 1, 1, 1, 1, 1,
  7740. 1, 1, 1, 1, 1, 1, 1, 1267,
  7741. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7742. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7743. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7744. 1267, 1267, 1267, 1267, 1267, 1268, 1269, 1269,
  7745. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7746. 1269, 1269, 1270, 1269, 1269, 1271, 1272, 1272,
  7747. 1272, 1273, 1, 1181, 1181, 1181, 1181, 1181,
  7748. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7749. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7750. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7751. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7752. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7753. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7754. 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
  7755. 1181, 1181, 1181, 1, 1267, 1267, 1267, 1267,
  7756. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7757. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7758. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7759. 1267, 1267, 1267, 1267, 1, 1267, 1267, 1267,
  7760. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7761. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7762. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7763. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7764. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7765. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7766. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7767. 1267, 1267, 1267, 1267, 1267, 1, 1267, 1267,
  7768. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7769. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7770. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  7771. 1267, 1267, 1267, 1267, 1267, 1267, 1, 1269,
  7772. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7773. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7774. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7775. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7776. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7777. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1,
  7778. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7779. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7780. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7781. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7782. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7783. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7784. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7785. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7786. 1, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7787. 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
  7788. 1269, 1, 601, 601, 601, 601, 601, 601,
  7789. 601, 601, 601, 601, 601, 601, 601, 601,
  7790. 601, 601, 601, 601, 601, 601, 601, 601,
  7791. 601, 601, 601, 601, 601, 601, 601, 601,
  7792. 601, 601, 601, 601, 601, 601, 601, 601,
  7793. 601, 601, 601, 601, 601, 601, 601, 601,
  7794. 601, 601, 601, 601, 601, 601, 601, 601,
  7795. 601, 601, 601, 601, 601, 601, 601, 601,
  7796. 601, 601, 1, 604, 604, 604, 604, 604,
  7797. 604, 604, 604, 604, 604, 604, 604, 604,
  7798. 604, 604, 604, 604, 604, 604, 604, 604,
  7799. 604, 604, 604, 604, 604, 604, 604, 604,
  7800. 604, 604, 604, 1, 604, 604, 604, 604,
  7801. 604, 604, 604, 604, 604, 604, 604, 604,
  7802. 604, 604, 604, 604, 604, 604, 604, 604,
  7803. 604, 604, 604, 604, 604, 604, 604, 604,
  7804. 604, 604, 604, 604, 604, 604, 604, 604,
  7805. 604, 604, 604, 604, 604, 604, 604, 604,
  7806. 604, 604, 604, 604, 604, 604, 604, 604,
  7807. 604, 604, 604, 604, 604, 604, 604, 604,
  7808. 604, 604, 604, 604, 1, 604, 604, 604,
  7809. 604, 604, 604, 604, 604, 604, 604, 604,
  7810. 604, 604, 604, 604, 604, 604, 604, 604,
  7811. 604, 604, 604, 604, 604, 604, 604, 604,
  7812. 604, 604, 604, 604, 604, 1, 606, 606,
  7813. 606, 606, 606, 606, 606, 606, 606, 606,
  7814. 606, 606, 606, 606, 606, 606, 606, 606,
  7815. 606, 606, 606, 606, 606, 606, 606, 606,
  7816. 606, 606, 606, 606, 606, 606, 606, 606,
  7817. 606, 606, 606, 606, 606, 606, 606, 606,
  7818. 606, 606, 606, 606, 606, 606, 1, 606,
  7819. 606, 606, 606, 606, 606, 606, 606, 606,
  7820. 606, 606, 606, 606, 606, 606, 606, 606,
  7821. 606, 606, 606, 606, 606, 606, 606, 606,
  7822. 606, 606, 606, 606, 606, 606, 606, 606,
  7823. 606, 606, 606, 606, 606, 606, 606, 606,
  7824. 606, 606, 606, 606, 606, 606, 606, 606,
  7825. 606, 606, 606, 606, 606, 606, 606, 606,
  7826. 606, 606, 606, 606, 606, 606, 606, 1,
  7827. 606, 606, 606, 606, 606, 606, 606, 606,
  7828. 606, 606, 606, 606, 606, 606, 606, 606,
  7829. 1, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7830. 1275, 1275, 1, 1275, 1275, 1276, 1275, 1275,
  7831. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7832. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7833. 1275, 1275, 1277, 1275, 1275, 1275, 1275, 1275,
  7834. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7835. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7836. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7837. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7838. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7839. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7840. 1275, 1275, 1275, 1275, 1278, 1275, 1275, 1275,
  7841. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7842. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7843. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7844. 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
  7845. 1, 1, 1, 1, 1, 1, 1, 1,
  7846. 1, 1, 1, 1, 1, 1, 1, 1,
  7847. 1, 1, 1, 1, 1, 1, 1, 1,
  7848. 1, 1, 1, 1, 1, 1, 1, 1,
  7849. 1, 1, 1, 1, 1, 1, 1, 1,
  7850. 1, 1, 1, 1, 1, 1, 1, 1,
  7851. 1, 1, 1, 1, 1, 1, 1, 1,
  7852. 1, 1, 1, 1, 1, 1, 1, 1,
  7853. 1, 1, 1279, 1279, 1279, 1279, 1279, 1279,
  7854. 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279,
  7855. 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279,
  7856. 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279,
  7857. 1280, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
  7858. 1281, 1281, 1281, 1281, 1281, 1282, 1281, 1281,
  7859. 1283, 1284, 1284, 1284, 1285, 1, 1286, 1286,
  7860. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1,
  7861. 1286, 1286, 1287, 1286, 1286, 1286, 1286, 1286,
  7862. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7863. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1288,
  7864. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7865. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7866. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7867. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7868. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7869. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7870. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7871. 1286, 1289, 1286, 1286, 1286, 1286, 1286, 1286,
  7872. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7873. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7874. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7875. 1286, 1286, 1286, 1286, 1286, 1, 1, 1,
  7876. 1, 1, 1, 1, 1, 1, 1, 1,
  7877. 1, 1, 1, 1, 1, 1, 1, 1,
  7878. 1, 1, 1, 1, 1, 1, 1, 1,
  7879. 1, 1, 1, 1, 1, 1, 1, 1,
  7880. 1, 1, 1, 1, 1, 1, 1, 1,
  7881. 1, 1, 1, 1, 1, 1, 1, 1,
  7882. 1, 1, 1, 1, 1, 1, 1, 1,
  7883. 1, 1, 1, 1, 1, 1, 1, 1290,
  7884. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7885. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7886. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7887. 1290, 1290, 1290, 1290, 1290, 1291, 1292, 1292,
  7888. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7889. 1292, 1292, 1293, 1292, 1292, 1294, 1295, 1295,
  7890. 1295, 1296, 1, 1297, 1, 1286, 1, 1,
  7891. 1, 1, 1, 1, 1, 1, 1, 1,
  7892. 1, 1, 1, 1, 1, 1, 1, 1,
  7893. 1, 1, 1, 1, 1286, 1, 1286, 1286,
  7894. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7895. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7896. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7897. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7898. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7899. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7900. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7901. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7902. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7903. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7904. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7905. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7906. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7907. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7908. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7909. 1286, 1286, 1286, 1286, 1286, 1286, 1, 1,
  7910. 1, 1, 1, 1, 1, 1, 1, 1,
  7911. 1, 1, 1, 1, 1, 1, 1, 1,
  7912. 1, 1, 1, 1, 1, 1, 1, 1,
  7913. 1, 1, 1, 1, 1, 1, 1, 1,
  7914. 1, 1, 1, 1, 1, 1, 1, 1,
  7915. 1, 1, 1, 1, 1, 1, 1, 1,
  7916. 1, 1, 1, 1, 1, 1, 1, 1,
  7917. 1, 1, 1, 1, 1, 1, 1, 1,
  7918. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7919. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7920. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7921. 1290, 1290, 1290, 1290, 1290, 1290, 1291, 1292,
  7922. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7923. 1292, 1292, 1292, 1293, 1292, 1292, 1294, 1295,
  7924. 1295, 1295, 1296, 1, 1286, 1286, 1286, 1286,
  7925. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7926. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7927. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7928. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7929. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7930. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7931. 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
  7932. 1286, 1286, 1286, 1286, 1, 1290, 1290, 1290,
  7933. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7934. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7935. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7936. 1290, 1290, 1290, 1290, 1290, 1, 1290, 1290,
  7937. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7938. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7939. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7940. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7941. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7942. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7943. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7944. 1290, 1290, 1290, 1290, 1290, 1290, 1, 1290,
  7945. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7946. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7947. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  7948. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1,
  7949. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7950. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7951. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7952. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7953. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7954. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7955. 1, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7956. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7957. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7958. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7959. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7960. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7961. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7962. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7963. 1292, 1, 1292, 1292, 1292, 1292, 1292, 1292,
  7964. 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
  7965. 1292, 1292, 1, 597, 1, 1, 1, 1298,
  7966. 1, 1, 1, 1, 1, 1, 1, 1,
  7967. 1, 1, 1, 1, 1, 1, 1, 1,
  7968. 1, 1, 597, 1299, 1300, 1299, 1299, 1299,
  7969. 1299, 1299, 1301, 1, 1299, 1299, 1, 1299,
  7970. 1, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7971. 1299, 1299, 1299, 1299, 1, 1, 1, 1299,
  7972. 1, 1299, 1, 1299, 1299, 1299, 1299, 1299,
  7973. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7974. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7975. 1299, 1299, 1299, 1299, 1299, 1, 1, 1,
  7976. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7977. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7978. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7979. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  7980. 1299, 1, 1, 1, 1, 1, 1, 1,
  7981. 1, 1, 1, 1, 1, 1, 1, 1,
  7982. 1, 1, 1, 1, 1, 1, 1, 1,
  7983. 1, 1, 1, 1, 1, 1, 1, 1,
  7984. 1, 1, 1, 1, 1, 1, 1, 1,
  7985. 1, 1, 1, 1, 1, 1, 1, 1,
  7986. 1, 1, 1, 1, 1, 1, 1, 1,
  7987. 1, 1, 1, 1, 1, 1, 1, 1,
  7988. 1, 1, 1, 1, 1302, 1302, 1302, 1302,
  7989. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  7990. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  7991. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  7992. 1302, 1302, 1303, 1304, 1304, 1304, 1304, 1304,
  7993. 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1305,
  7994. 1304, 1304, 1306, 1307, 1307, 1307, 1308, 1,
  7995. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  7996. 575, 1, 1309, 1309, 1310, 1309, 1309, 1309,
  7997. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  7998. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 575,
  7999. 1309, 1, 1309, 1309, 1309, 1309, 1309, 1309,
  8000. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8001. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8002. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8003. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8004. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8005. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8006. 1309, 1309, 1309, 1311, 1309, 1309, 1309, 1309,
  8007. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8008. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8009. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8010. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1,
  8011. 1, 1, 1, 1, 1, 1, 1, 1,
  8012. 1, 1, 1, 1, 1, 1, 1, 1,
  8013. 1, 1, 1, 1, 1, 1, 1, 1,
  8014. 1, 1, 1, 1, 1, 1, 1, 1,
  8015. 1, 1, 1, 1, 1, 1, 1, 1,
  8016. 1, 1, 1, 1, 1, 1, 1, 1,
  8017. 1, 1, 1, 1, 1, 1, 1, 1,
  8018. 1, 1, 1, 1, 1, 1, 1, 1,
  8019. 1, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8020. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8021. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8022. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1313,
  8023. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8024. 1314, 1314, 1314, 1314, 1315, 1314, 1314, 1316,
  8025. 1317, 1317, 1317, 1318, 1, 1309, 1309, 1309,
  8026. 1309, 1309, 1309, 1309, 1309, 1309, 1, 1309,
  8027. 1309, 1319, 1309, 1309, 1309, 1309, 1309, 1309,
  8028. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8029. 1309, 1309, 1309, 1309, 1309, 1309, 1320, 1309,
  8030. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8031. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8032. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8033. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8034. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8035. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8036. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8037. 1311, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8038. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8039. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8040. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8041. 1309, 1309, 1309, 1309, 1, 1, 1, 1,
  8042. 1, 1, 1, 1, 1, 1, 1, 1,
  8043. 1, 1, 1, 1, 1, 1, 1, 1,
  8044. 1, 1, 1, 1, 1, 1, 1, 1,
  8045. 1, 1, 1, 1, 1, 1, 1, 1,
  8046. 1, 1, 1, 1, 1, 1, 1, 1,
  8047. 1, 1, 1, 1, 1, 1, 1, 1,
  8048. 1, 1, 1, 1, 1, 1, 1, 1,
  8049. 1, 1, 1, 1, 1, 1, 1312, 1312,
  8050. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8051. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8052. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8053. 1312, 1312, 1312, 1312, 1313, 1314, 1314, 1314,
  8054. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8055. 1314, 1315, 1314, 1314, 1316, 1317, 1317, 1317,
  8056. 1318, 1, 1321, 1, 1309, 1, 1, 1,
  8057. 1, 1, 1, 1, 1, 1, 1, 1,
  8058. 1, 1, 1, 1, 1, 1, 1, 1,
  8059. 1, 1, 1, 1309, 1, 1322, 1, 1,
  8060. 1, 1323, 1, 1, 1, 1, 1, 1,
  8061. 1, 1, 1, 1, 1, 1, 1, 1,
  8062. 1, 1, 1, 1, 1322, 1320, 575, 1320,
  8063. 1320, 1320, 1320, 1320, 1324, 1, 1320, 1320,
  8064. 1, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8065. 1320, 1320, 1320, 1320, 1320, 1320, 1, 1,
  8066. 1, 1320, 578, 1320, 579, 1320, 1320, 1320,
  8067. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8068. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8069. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1,
  8070. 1, 1, 1320, 1320, 1320, 1320, 1320, 1320,
  8071. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8072. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8073. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8074. 1320, 1320, 1320, 1, 1, 1, 1, 1,
  8075. 1, 1, 1, 1, 1, 1, 1, 1,
  8076. 1, 1, 1, 1, 1, 1, 1, 1,
  8077. 1, 1, 1, 1, 1, 1, 1, 1,
  8078. 1, 1, 1, 1, 1, 1, 1, 1,
  8079. 1, 1, 1, 1, 1, 1, 1, 1,
  8080. 1, 1, 1, 1, 1, 1, 1, 1,
  8081. 1, 1, 1, 1, 1, 1, 1, 1,
  8082. 1, 1, 1, 1, 1, 1, 1325, 1325,
  8083. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8084. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8085. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8086. 1325, 1325, 1325, 1325, 1326, 1327, 1327, 1327,
  8087. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8088. 1327, 1328, 1327, 1327, 1329, 1330, 1330, 1330,
  8089. 1331, 1, 1332, 1, 1, 1, 1333, 1,
  8090. 1, 1, 1, 1, 1, 1, 1, 1,
  8091. 1, 1, 1, 1, 1, 1, 1, 1,
  8092. 1, 1332, 1, 1, 1, 1, 1, 1,
  8093. 1, 1334, 1, 1, 1, 1, 1, 1,
  8094. 1, 1, 1, 1, 1, 1, 1, 1,
  8095. 1, 1, 1, 1, 1, 1, 1, 591,
  8096. 1, 592, 1, 1335, 1, 1332, 1, 1,
  8097. 1, 1, 1, 1, 1, 1, 1, 1,
  8098. 1, 1, 1, 1, 1, 1, 1, 1,
  8099. 1, 1, 1, 1, 1332, 1, 1336, 1,
  8100. 1, 1, 1337, 1, 1, 1, 1, 1,
  8101. 1, 1, 1, 1, 1, 1, 1, 1,
  8102. 1, 1, 1, 1, 1, 1336, 1, 1,
  8103. 1, 1, 1, 1, 1, 1338, 1, 1,
  8104. 1, 1, 1, 1, 1, 1, 1, 1,
  8105. 1, 1, 1, 1, 1, 1, 1, 1,
  8106. 1, 1, 1, 598, 1, 599, 1, 1320,
  8107. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8108. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8109. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8110. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8111. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8112. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8113. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8114. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1,
  8115. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8116. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8117. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8118. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8119. 1, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8120. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8121. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8122. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8123. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8124. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8125. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8126. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8127. 1325, 1, 1325, 1325, 1325, 1325, 1325, 1325,
  8128. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8129. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8130. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8131. 1325, 1325, 1, 1327, 1327, 1327, 1327, 1327,
  8132. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8133. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8134. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8135. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8136. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8137. 1327, 1327, 1327, 1, 1327, 1327, 1327, 1327,
  8138. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8139. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8140. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8141. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8142. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8143. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8144. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8145. 1327, 1327, 1327, 1327, 1, 1327, 1327, 1327,
  8146. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8147. 1327, 1327, 1327, 1327, 1327, 1, 1309, 1309,
  8148. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8149. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8150. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8151. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8152. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8153. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8154. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8155. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8156. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8157. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8158. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8159. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8160. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8161. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8162. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8163. 1309, 1309, 1309, 1309, 1309, 1309, 1, 1,
  8164. 1, 1, 1, 1, 1, 1, 1, 1,
  8165. 1, 1, 1, 1, 1, 1, 1, 1,
  8166. 1, 1, 1, 1, 1, 1, 1, 1,
  8167. 1, 1, 1, 1, 1, 1, 1, 1,
  8168. 1, 1, 1, 1, 1, 1, 1, 1,
  8169. 1, 1, 1, 1, 1, 1, 1, 1,
  8170. 1, 1, 1, 1, 1, 1, 1, 1,
  8171. 1, 1, 1, 1, 1, 1, 1, 1,
  8172. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8173. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8174. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8175. 1312, 1312, 1312, 1312, 1312, 1312, 1313, 1314,
  8176. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8177. 1314, 1314, 1314, 1315, 1314, 1314, 1316, 1317,
  8178. 1317, 1317, 1318, 1, 1309, 1309, 1309, 1309,
  8179. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8180. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8181. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8182. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8183. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8184. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8185. 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
  8186. 1309, 1309, 1309, 1309, 1, 1312, 1312, 1312,
  8187. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8188. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8189. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8190. 1312, 1312, 1312, 1312, 1312, 1, 1312, 1312,
  8191. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8192. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8193. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8194. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8195. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8196. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8197. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8198. 1312, 1312, 1312, 1312, 1312, 1312, 1, 1312,
  8199. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8200. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8201. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
  8202. 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1,
  8203. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8204. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8205. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8206. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8207. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8208. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8209. 1, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8210. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8211. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8212. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8213. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8214. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8215. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8216. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8217. 1314, 1, 1314, 1314, 1314, 1314, 1314, 1314,
  8218. 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314,
  8219. 1314, 1314, 1, 1339, 1, 575, 1, 1,
  8220. 1, 1, 1, 1, 1, 1, 1, 1,
  8221. 1, 1, 1, 1, 1, 1, 1, 1,
  8222. 1, 1, 1, 1, 575, 1, 1340, 1,
  8223. 1, 1, 1341, 1, 1, 1, 1, 1,
  8224. 1, 1, 1, 1, 1, 1, 1, 1,
  8225. 1, 1, 1, 1, 1, 1340, 574, 1342,
  8226. 574, 574, 574, 574, 574, 1343, 1, 574,
  8227. 574, 1, 574, 1320, 574, 574, 574, 574,
  8228. 574, 574, 574, 574, 574, 574, 574, 1,
  8229. 1, 1, 574, 578, 574, 579, 574, 574,
  8230. 574, 574, 574, 574, 574, 574, 574, 574,
  8231. 574, 574, 574, 574, 574, 574, 574, 574,
  8232. 574, 574, 574, 574, 574, 574, 574, 574,
  8233. 1, 1, 1, 574, 574, 574, 574, 574,
  8234. 574, 574, 574, 574, 574, 574, 574, 574,
  8235. 574, 574, 574, 574, 574, 574, 574, 574,
  8236. 574, 574, 574, 574, 574, 574, 574, 574,
  8237. 574, 574, 574, 574, 1, 1, 1, 1,
  8238. 1, 1, 1, 1, 1, 1, 1, 1,
  8239. 1, 1, 1, 1, 1, 1, 1, 1,
  8240. 1, 1, 1, 1, 1, 1, 1, 1,
  8241. 1, 1, 1, 1, 1, 1, 1, 1,
  8242. 1, 1, 1, 1, 1, 1, 1, 1,
  8243. 1, 1, 1, 1, 1, 1, 1, 1,
  8244. 1, 1, 1, 1, 1, 1, 1, 1,
  8245. 1, 1, 1, 1, 1, 1, 1, 580,
  8246. 580, 580, 580, 580, 580, 580, 580, 580,
  8247. 580, 580, 580, 580, 580, 580, 580, 580,
  8248. 580, 580, 580, 580, 580, 580, 580, 580,
  8249. 580, 580, 580, 580, 580, 581, 582, 582,
  8250. 582, 582, 582, 582, 582, 582, 582, 582,
  8251. 582, 582, 583, 582, 582, 584, 585, 585,
  8252. 585, 586, 1, 1344, 1, 1, 1, 1345,
  8253. 1, 1, 1, 1, 1, 1, 1, 1,
  8254. 1, 1, 1, 1, 1, 1, 1, 1,
  8255. 1, 1, 1344, 601, 602, 601, 601, 601,
  8256. 601, 601, 1346, 1, 601, 601, 1, 601,
  8257. 1, 601, 601, 601, 601, 601, 601, 601,
  8258. 601, 601, 601, 601, 1, 1, 1, 601,
  8259. 591, 601, 592, 601, 601, 601, 601, 601,
  8260. 601, 601, 601, 601, 601, 601, 601, 601,
  8261. 601, 601, 601, 601, 601, 601, 601, 601,
  8262. 601, 601, 601, 601, 601, 1, 1, 1,
  8263. 601, 601, 601, 601, 601, 601, 601, 601,
  8264. 601, 601, 601, 601, 601, 601, 601, 601,
  8265. 601, 601, 601, 601, 601, 601, 601, 601,
  8266. 601, 601, 601, 601, 601, 601, 601, 601,
  8267. 601, 1, 1, 1, 1, 1, 1, 1,
  8268. 1, 1, 1, 1, 1, 1, 1, 1,
  8269. 1, 1, 1, 1, 1, 1, 1, 1,
  8270. 1, 1, 1, 1, 1, 1, 1, 1,
  8271. 1, 1, 1, 1, 1, 1, 1, 1,
  8272. 1, 1, 1, 1, 1, 1, 1, 1,
  8273. 1, 1, 1, 1, 1, 1, 1, 1,
  8274. 1, 1, 1, 1, 1, 1, 1, 1,
  8275. 1, 1, 1, 1, 604, 604, 604, 604,
  8276. 604, 604, 604, 604, 604, 604, 604, 604,
  8277. 604, 604, 604, 604, 604, 604, 604, 604,
  8278. 604, 604, 604, 604, 604, 604, 604, 604,
  8279. 604, 604, 605, 606, 606, 606, 606, 606,
  8280. 606, 606, 606, 606, 606, 606, 606, 607,
  8281. 606, 606, 608, 609, 609, 609, 610, 1,
  8282. 1347, 1, 1344, 1, 1, 1, 1, 1,
  8283. 1, 1, 1, 1, 1, 1, 1, 1,
  8284. 1, 1, 1, 1, 1, 1, 1, 1,
  8285. 1, 1344, 1, 1348, 1, 1, 1, 1349,
  8286. 1, 1, 1, 1, 1, 1, 1, 1,
  8287. 1, 1, 1, 1, 1, 1, 1, 1,
  8288. 1, 1, 1348, 1299, 1300, 1299, 1299, 1299,
  8289. 1299, 1299, 1350, 1, 1299, 1299, 1, 1299,
  8290. 1, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8291. 1299, 1299, 1299, 1299, 1, 1, 1, 1299,
  8292. 598, 1299, 599, 1299, 1299, 1299, 1299, 1299,
  8293. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8294. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8295. 1299, 1299, 1299, 1299, 1299, 1, 1, 1,
  8296. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8297. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8298. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8299. 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
  8300. 1299, 1, 1, 1, 1, 1, 1, 1,
  8301. 1, 1, 1, 1, 1, 1, 1, 1,
  8302. 1, 1, 1, 1, 1, 1, 1, 1,
  8303. 1, 1, 1, 1, 1, 1, 1, 1,
  8304. 1, 1, 1, 1, 1, 1, 1, 1,
  8305. 1, 1, 1, 1, 1, 1, 1, 1,
  8306. 1, 1, 1, 1, 1, 1, 1, 1,
  8307. 1, 1, 1, 1, 1, 1, 1, 1,
  8308. 1, 1, 1, 1, 1302, 1302, 1302, 1302,
  8309. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  8310. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  8311. 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
  8312. 1302, 1302, 1303, 1304, 1304, 1304, 1304, 1304,
  8313. 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1305,
  8314. 1304, 1304, 1306, 1307, 1307, 1307, 1308, 1,
  8315. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8316. 1352, 1, 1351, 1351, 1353, 1351, 1351, 1351,
  8317. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8318. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1352,
  8319. 1351, 1277, 1351, 1351, 1351, 1351, 1351, 1351,
  8320. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8321. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8322. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8323. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8324. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8325. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8326. 1351, 1351, 1351, 1354, 1351, 1351, 1351, 1351,
  8327. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8328. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8329. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
  8330. 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1,
  8331. 1, 1, 1, 1, 1, 1, 1, 1,
  8332. 1, 1, 1, 1, 1, 1, 1, 1,
  8333. 1, 1, 1, 1, 1, 1, 1, 1,
  8334. 1, 1, 1, 1, 1, 1, 1, 1,
  8335. 1, 1, 1, 1, 1, 1, 1, 1,
  8336. 1, 1, 1, 1, 1, 1, 1, 1,
  8337. 1, 1, 1, 1, 1, 1, 1, 1,
  8338. 1, 1, 1, 1, 1, 1, 1, 1,
  8339. 1, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
  8340. 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
  8341. 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
  8342. 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1356,
  8343. 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
  8344. 1357, 1357, 1357, 1357, 1358, 1357, 1357, 1359,
  8345. 1360, 1360, 1360, 1361, 1, 1362, 1362, 1362,
  8346. 1362, 1362, 1362, 1362, 1362, 1362, 1, 1362,
  8347. 1362, 1363, 1362, 1362, 1362, 1362, 1362, 1362,
  8348. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8349. 1362, 1362, 1362, 1362, 1362, 1362, 1364, 1362,
  8350. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8351. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8352. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8353. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8354. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8355. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8356. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8357. 1365, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8358. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8359. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8360. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8361. 1362, 1362, 1362, 1362, 1, 1, 1, 1,
  8362. 1, 1, 1, 1, 1, 1, 1, 1,
  8363. 1, 1, 1, 1, 1, 1, 1, 1,
  8364. 1, 1, 1, 1, 1, 1, 1, 1,
  8365. 1, 1, 1, 1, 1, 1, 1, 1,
  8366. 1, 1, 1, 1, 1, 1, 1, 1,
  8367. 1, 1, 1, 1, 1, 1, 1, 1,
  8368. 1, 1, 1, 1, 1, 1, 1, 1,
  8369. 1, 1, 1, 1, 1, 1, 1366, 1366,
  8370. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8371. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8372. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8373. 1366, 1366, 1366, 1366, 1367, 1368, 1368, 1368,
  8374. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8375. 1368, 1369, 1368, 1368, 1370, 1371, 1371, 1371,
  8376. 1372, 1, 1373, 1, 1362, 1, 1, 1,
  8377. 1, 1, 1, 1, 1, 1, 1, 1,
  8378. 1, 1, 1, 1, 1, 1, 1, 1,
  8379. 1, 1, 1, 1362, 1, 572, 1, 1,
  8380. 1, 573, 1, 1, 1, 1, 1, 1,
  8381. 1, 1, 1, 1, 1, 1, 1, 1,
  8382. 1, 1, 1, 1, 572, 1320, 575, 1320,
  8383. 1320, 1320, 1320, 1320, 576, 1, 1320, 1320,
  8384. 1, 1320, 577, 1320, 1320, 1320, 1320, 1320,
  8385. 1320, 1320, 1320, 1320, 1320, 1320, 1, 1,
  8386. 1, 1320, 578, 1320, 579, 1320, 1320, 1320,
  8387. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8388. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8389. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1,
  8390. 1, 1, 1320, 1320, 1320, 1320, 1320, 1320,
  8391. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8392. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8393. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8394. 1320, 1320, 1320, 1, 1, 1, 1, 1,
  8395. 1, 1, 1, 1, 1, 1, 1, 1,
  8396. 1, 1, 1, 1, 1, 1, 1, 1,
  8397. 1, 1, 1, 1, 1, 1, 1, 1,
  8398. 1, 1, 1, 1, 1, 1, 1, 1,
  8399. 1, 1, 1, 1, 1, 1, 1, 1,
  8400. 1, 1, 1, 1, 1, 1, 1, 1,
  8401. 1, 1, 1, 1, 1, 1, 1, 1,
  8402. 1, 1, 1, 1, 1, 1, 1325, 1325,
  8403. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8404. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8405. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8406. 1325, 1325, 1325, 1325, 1326, 1327, 1327, 1327,
  8407. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  8408. 1327, 1328, 1327, 1327, 1329, 1330, 1330, 1330,
  8409. 1331, 1, 1362, 1362, 1362, 1362, 1362, 1362,
  8410. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8411. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8412. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8413. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8414. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8415. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8416. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8417. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8418. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8419. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8420. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8421. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8422. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8423. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8424. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8425. 1362, 1362, 1, 1, 1, 1, 1, 1,
  8426. 1, 1, 1, 1, 1, 1, 1, 1,
  8427. 1, 1, 1, 1, 1, 1, 1, 1,
  8428. 1, 1, 1, 1, 1, 1, 1, 1,
  8429. 1, 1, 1, 1, 1, 1, 1, 1,
  8430. 1, 1, 1, 1, 1, 1, 1, 1,
  8431. 1, 1, 1, 1, 1, 1, 1, 1,
  8432. 1, 1, 1, 1, 1, 1, 1, 1,
  8433. 1, 1, 1, 1, 1366, 1366, 1366, 1366,
  8434. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8435. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8436. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8437. 1366, 1366, 1367, 1368, 1368, 1368, 1368, 1368,
  8438. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1369,
  8439. 1368, 1368, 1370, 1371, 1371, 1371, 1372, 1,
  8440. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8441. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8442. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8443. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8444. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8445. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8446. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8447. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8448. 1, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8449. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8450. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8451. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8452. 1366, 1, 1366, 1366, 1366, 1366, 1366, 1366,
  8453. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8454. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8455. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8456. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8457. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8458. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8459. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8460. 1366, 1366, 1, 1366, 1366, 1366, 1366, 1366,
  8461. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8462. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8463. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8464. 1366, 1366, 1366, 1, 1368, 1368, 1368, 1368,
  8465. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8466. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8467. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8468. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8469. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8470. 1368, 1368, 1368, 1368, 1, 1368, 1368, 1368,
  8471. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8472. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8473. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8474. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8475. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8476. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8477. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8478. 1368, 1368, 1368, 1368, 1368, 1, 1368, 1368,
  8479. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8480. 1368, 1368, 1368, 1368, 1368, 1368, 1, 1362,
  8481. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1374,
  8482. 1, 1362, 1362, 1375, 1362, 1362, 1362, 1362,
  8483. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8484. 1362, 1362, 1362, 1362, 1362, 1362, 1374, 1362,
  8485. 1288, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8486. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8487. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8488. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8489. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8490. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8491. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8492. 1362, 1362, 1365, 1362, 1362, 1362, 1362, 1362,
  8493. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8494. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8495. 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362,
  8496. 1362, 1362, 1362, 1362, 1362, 1362, 1, 1,
  8497. 1, 1, 1, 1, 1, 1, 1, 1,
  8498. 1, 1, 1, 1, 1, 1, 1, 1,
  8499. 1, 1, 1, 1, 1, 1, 1, 1,
  8500. 1, 1, 1, 1, 1, 1, 1, 1,
  8501. 1, 1, 1, 1, 1, 1, 1, 1,
  8502. 1, 1, 1, 1, 1, 1, 1, 1,
  8503. 1, 1, 1, 1, 1, 1, 1, 1,
  8504. 1, 1, 1, 1, 1, 1, 1, 1,
  8505. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8506. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8507. 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
  8508. 1366, 1366, 1366, 1366, 1366, 1366, 1367, 1368,
  8509. 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
  8510. 1368, 1368, 1368, 1369, 1368, 1368, 1370, 1371,
  8511. 1371, 1371, 1372, 1, 1376, 1, 1374, 1,
  8512. 1, 1, 1, 1, 1, 1, 1, 1,
  8513. 1, 1, 1, 1, 1, 1, 1, 1,
  8514. 1, 1, 1, 1, 1, 1374, 1, 574,
  8515. 574, 574, 574, 574, 574, 574, 574, 574,
  8516. 574, 574, 574, 574, 574, 574, 574, 574,
  8517. 574, 574, 574, 574, 574, 574, 574, 574,
  8518. 574, 574, 574, 574, 574, 574, 574, 574,
  8519. 574, 574, 574, 574, 574, 574, 574, 574,
  8520. 574, 574, 574, 574, 574, 574, 574, 574,
  8521. 574, 574, 574, 574, 574, 574, 574, 574,
  8522. 574, 574, 574, 574, 574, 574, 574, 1,
  8523. 580, 580, 580, 580, 580, 580, 580, 580,
  8524. 580, 580, 580, 580, 580, 580, 580, 580,
  8525. 580, 580, 580, 580, 580, 580, 580, 580,
  8526. 580, 580, 580, 580, 580, 580, 580, 580,
  8527. 1, 580, 580, 580, 580, 580, 580, 580,
  8528. 580, 580, 580, 580, 580, 580, 580, 580,
  8529. 580, 580, 580, 580, 580, 580, 580, 580,
  8530. 580, 580, 580, 580, 580, 580, 580, 580,
  8531. 580, 580, 580, 580, 580, 580, 580, 580,
  8532. 580, 580, 580, 580, 580, 580, 580, 580,
  8533. 580, 580, 580, 580, 580, 580, 580, 580,
  8534. 580, 580, 580, 580, 580, 580, 580, 580,
  8535. 580, 1, 580, 580, 580, 580, 580, 580,
  8536. 580, 580, 580, 580, 580, 580, 580, 580,
  8537. 580, 580, 580, 580, 580, 580, 580, 580,
  8538. 580, 580, 580, 580, 580, 580, 580, 580,
  8539. 580, 580, 1, 582, 582, 582, 582, 582,
  8540. 582, 582, 582, 582, 582, 582, 582, 582,
  8541. 582, 582, 582, 582, 582, 582, 582, 582,
  8542. 582, 582, 582, 582, 582, 582, 582, 582,
  8543. 582, 582, 582, 582, 582, 582, 582, 582,
  8544. 582, 582, 582, 582, 582, 582, 582, 582,
  8545. 582, 582, 582, 1, 582, 582, 582, 582,
  8546. 582, 582, 582, 582, 582, 582, 582, 582,
  8547. 582, 582, 582, 582, 582, 582, 582, 582,
  8548. 582, 582, 582, 582, 582, 582, 582, 582,
  8549. 582, 582, 582, 582, 582, 582, 582, 582,
  8550. 582, 582, 582, 582, 582, 582, 582, 582,
  8551. 582, 582, 582, 582, 582, 582, 582, 582,
  8552. 582, 582, 582, 582, 582, 582, 582, 582,
  8553. 582, 582, 582, 582, 1, 582, 582, 582,
  8554. 582, 582, 582, 582, 582, 582, 582, 582,
  8555. 582, 582, 582, 582, 582, 1, 1377, 1377,
  8556. 1377, 1377, 1377, 1377, 1377, 1377, 1378, 1,
  8557. 1377, 1377, 1379, 1377, 1377, 1377, 1377, 1377,
  8558. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8559. 1377, 1377, 1377, 1377, 1377, 1378, 1377, 1380,
  8560. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8561. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8562. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8563. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8564. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8565. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8566. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8567. 1377, 1381, 1377, 1377, 1377, 1377, 1377, 1377,
  8568. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8569. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8570. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
  8571. 1377, 1377, 1377, 1377, 1377, 1, 1, 1,
  8572. 1, 1, 1, 1, 1, 1, 1, 1,
  8573. 1, 1, 1, 1, 1, 1, 1, 1,
  8574. 1, 1, 1, 1, 1, 1, 1, 1,
  8575. 1, 1, 1, 1, 1, 1, 1, 1,
  8576. 1, 1, 1, 1, 1, 1, 1, 1,
  8577. 1, 1, 1, 1, 1, 1, 1, 1,
  8578. 1, 1, 1, 1, 1, 1, 1, 1,
  8579. 1, 1, 1, 1, 1, 1, 1, 1382,
  8580. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  8581. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  8582. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  8583. 1382, 1382, 1382, 1382, 1382, 1383, 1384, 1384,
  8584. 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384,
  8585. 1384, 1384, 1385, 1384, 1384, 1386, 1387, 1387,
  8586. 1387, 1388, 1, 1389, 1389, 1389, 1389, 1389,
  8587. 1389, 1389, 1389, 1389, 1, 1389, 1389, 1390,
  8588. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8589. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8590. 1389, 1389, 1389, 1389, 1391, 1389, 1389, 1389,
  8591. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8592. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8593. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8594. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8595. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8596. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8597. 1389, 1389, 1389, 1389, 1389, 1389, 1392, 1389,
  8598. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8599. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8600. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8601. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8602. 1389, 1389, 1, 1, 1, 1, 1, 1,
  8603. 1, 1, 1, 1, 1, 1, 1, 1,
  8604. 1, 1, 1, 1, 1, 1, 1, 1,
  8605. 1, 1, 1, 1, 1, 1, 1, 1,
  8606. 1, 1, 1, 1, 1, 1, 1, 1,
  8607. 1, 1, 1, 1, 1, 1, 1, 1,
  8608. 1, 1, 1, 1, 1, 1, 1, 1,
  8609. 1, 1, 1, 1, 1, 1, 1, 1,
  8610. 1, 1, 1, 1, 1393, 1393, 1393, 1393,
  8611. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8612. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8613. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8614. 1393, 1393, 1394, 1395, 1395, 1395, 1395, 1395,
  8615. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1396,
  8616. 1395, 1395, 1397, 1398, 1398, 1398, 1399, 1,
  8617. 1400, 1, 1389, 1, 1, 1, 1, 1,
  8618. 1, 1, 1, 1, 1, 1, 1, 1,
  8619. 1, 1, 1, 1, 1, 1, 1, 1,
  8620. 1, 1389, 1, 1401, 1, 1, 1, 1402,
  8621. 1, 1, 1, 1, 1, 1, 1, 1,
  8622. 1, 1, 1, 1, 1, 1, 1, 1,
  8623. 1, 1, 1401, 1320, 575, 1320, 1320, 1320,
  8624. 1320, 1320, 1403, 1, 1320, 1320, 1, 1320,
  8625. 577, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8626. 1320, 1320, 1320, 1320, 1, 1, 1, 1320,
  8627. 578, 1320, 1404, 1320, 1320, 1320, 1320, 1320,
  8628. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8629. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8630. 1320, 1320, 1320, 1320, 1320, 1, 1, 1,
  8631. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8632. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8633. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8634. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  8635. 1320, 1, 1, 1, 1, 1, 1, 1,
  8636. 1, 1, 1, 1, 1, 1, 1, 1,
  8637. 1, 1, 1, 1, 1, 1, 1, 1,
  8638. 1, 1, 1, 1, 1, 1, 1, 1,
  8639. 1, 1, 1, 1, 1, 1, 1, 1,
  8640. 1, 1, 1, 1, 1, 1, 1, 1,
  8641. 1, 1, 1, 1, 1, 1, 1, 1,
  8642. 1, 1, 1, 1, 1, 1, 1, 1,
  8643. 1, 1, 1, 1, 1325, 1325, 1325, 1325,
  8644. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8645. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8646. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  8647. 1325, 1325, 1326, 1327, 1327, 1327, 1327, 1327,
  8648. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1328,
  8649. 1327, 1327, 1329, 1330, 1330, 1330, 1331, 1,
  8650. 1405, 1, 1, 1, 1406, 1, 1, 1,
  8651. 1, 1, 1, 1, 1, 1, 1, 1,
  8652. 1, 1, 1, 1, 1, 1, 1, 1405,
  8653. 1, 1, 1, 1, 1, 1, 1, 1407,
  8654. 1, 1, 1, 1, 1, 590, 1, 1,
  8655. 1, 1, 1, 1, 1, 1, 1, 1,
  8656. 1, 1, 1, 1, 1, 591, 1, 1408,
  8657. 1, 1409, 1, 1405, 1, 1, 1, 1,
  8658. 1, 1, 1, 1, 1, 1, 1, 1,
  8659. 1, 1, 1, 1, 1, 1, 1, 1,
  8660. 1, 1, 1405, 1, 1410, 1, 1, 1,
  8661. 1411, 1, 1, 1, 1, 1, 1, 1,
  8662. 1, 1, 1, 1, 1, 1, 1, 1,
  8663. 1, 1, 1, 1410, 1, 1, 1, 1,
  8664. 1, 1, 1, 1412, 1, 1, 1, 1,
  8665. 1, 597, 1, 1, 1, 1, 1, 1,
  8666. 1, 1, 1, 1, 1, 1, 1, 1,
  8667. 1, 598, 1, 1413, 1, 1389, 1389, 1389,
  8668. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8669. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8670. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8671. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8672. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8673. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8674. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8675. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8676. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8677. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8678. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8679. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8680. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8681. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8682. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8683. 1389, 1389, 1389, 1389, 1389, 1, 1, 1,
  8684. 1, 1, 1, 1, 1, 1, 1, 1,
  8685. 1, 1, 1, 1, 1, 1, 1, 1,
  8686. 1, 1, 1, 1, 1, 1, 1, 1,
  8687. 1, 1, 1, 1, 1, 1, 1, 1,
  8688. 1, 1, 1, 1, 1, 1, 1, 1,
  8689. 1, 1, 1, 1, 1, 1, 1, 1,
  8690. 1, 1, 1, 1, 1, 1, 1, 1,
  8691. 1, 1, 1, 1, 1, 1, 1, 1393,
  8692. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8693. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8694. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8695. 1393, 1393, 1393, 1393, 1393, 1394, 1395, 1395,
  8696. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8697. 1395, 1395, 1396, 1395, 1395, 1397, 1398, 1398,
  8698. 1398, 1399, 1, 1389, 1389, 1389, 1389, 1389,
  8699. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8700. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8701. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8702. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8703. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8704. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8705. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8706. 1389, 1389, 1389, 1, 1393, 1393, 1393, 1393,
  8707. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8708. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8709. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8710. 1393, 1393, 1393, 1393, 1, 1393, 1393, 1393,
  8711. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8712. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8713. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8714. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8715. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8716. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8717. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8718. 1393, 1393, 1393, 1393, 1393, 1, 1393, 1393,
  8719. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8720. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8721. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8722. 1393, 1393, 1393, 1393, 1393, 1393, 1, 1395,
  8723. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8724. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8725. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8726. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8727. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8728. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1,
  8729. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8730. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8731. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8732. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8733. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8734. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8735. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8736. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8737. 1, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8738. 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
  8739. 1395, 1, 1389, 1389, 1389, 1389, 1389, 1389,
  8740. 1389, 1389, 1414, 1, 1389, 1389, 1415, 1389,
  8741. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8742. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8743. 1389, 1414, 1389, 1416, 1389, 1389, 1389, 1389,
  8744. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8745. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8746. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8747. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8748. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8749. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8750. 1389, 1389, 1389, 1389, 1389, 1392, 1389, 1389,
  8751. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8752. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8753. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8754. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  8755. 1389, 1, 1, 1, 1, 1, 1, 1,
  8756. 1, 1, 1, 1, 1, 1, 1, 1,
  8757. 1, 1, 1, 1, 1, 1, 1, 1,
  8758. 1, 1, 1, 1, 1, 1, 1, 1,
  8759. 1, 1, 1, 1, 1, 1, 1, 1,
  8760. 1, 1, 1, 1, 1, 1, 1, 1,
  8761. 1, 1, 1, 1, 1, 1, 1, 1,
  8762. 1, 1, 1, 1, 1, 1, 1, 1,
  8763. 1, 1, 1, 1393, 1393, 1393, 1393, 1393,
  8764. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8765. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8766. 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
  8767. 1393, 1394, 1395, 1395, 1395, 1395, 1395, 1395,
  8768. 1395, 1395, 1395, 1395, 1395, 1395, 1396, 1395,
  8769. 1395, 1397, 1398, 1398, 1398, 1399, 1, 1417,
  8770. 1, 1414, 1, 1, 1, 1, 1, 1,
  8771. 1, 1, 1, 1, 1, 1, 1, 1,
  8772. 1, 1, 1, 1, 1, 1, 1, 1,
  8773. 1414, 1, 1418, 1, 1, 1, 1419, 1,
  8774. 1, 1, 1, 1, 1, 1, 1, 1,
  8775. 1, 1, 1, 1, 1, 1, 1, 1,
  8776. 1, 1418, 1, 1, 1, 1, 1, 1,
  8777. 1, 1420, 1, 1, 1, 1, 1, 590,
  8778. 1, 1, 1, 1, 1, 1, 1, 1,
  8779. 1, 1, 1, 1, 1, 1, 1, 591,
  8780. 1, 1421, 1, 1422, 1, 1418, 1, 1,
  8781. 1, 1, 1, 1, 1, 1, 1, 1,
  8782. 1, 1, 1, 1, 1, 1, 1, 1,
  8783. 1, 1, 1, 1, 1418, 1, 1423, 1,
  8784. 1, 1, 1424, 1, 1, 1, 1, 1,
  8785. 1, 1, 1, 1, 1, 1, 1, 1,
  8786. 1, 1, 1, 1, 1, 1423, 1, 1,
  8787. 1, 1, 1, 1, 1, 1425, 1, 1,
  8788. 1, 1, 1, 597, 1, 1, 1, 1,
  8789. 1, 1, 1, 1, 1, 1, 1, 1,
  8790. 1, 1, 1, 598, 1, 1426, 1, 1427,
  8791. 1, 1, 1, 1428, 1, 1, 1, 1,
  8792. 1, 1, 1, 1, 1, 1, 1, 1,
  8793. 1, 1, 1, 1, 1, 1, 1427, 1429,
  8794. 1430, 1429, 1429, 1429, 1429, 1429, 1431, 1,
  8795. 1429, 1429, 1432, 1429, 1433, 1429, 1429, 1429,
  8796. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8797. 1, 1, 1, 1429, 1, 1429, 1434, 1429,
  8798. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8799. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8800. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8801. 1429, 1, 1, 1, 1429, 1429, 1429, 1429,
  8802. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8803. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8804. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  8805. 1429, 1429, 1429, 1429, 1429, 1, 1, 1,
  8806. 1, 1, 1, 1, 1, 1, 1, 1,
  8807. 1, 1, 1, 1, 1, 1, 1, 1,
  8808. 1, 1, 1, 1, 1, 1, 1, 1,
  8809. 1, 1, 1, 1, 1, 1, 1, 1,
  8810. 1, 1, 1, 1, 1, 1, 1, 1,
  8811. 1, 1, 1, 1, 1, 1, 1, 1,
  8812. 1, 1, 1, 1, 1, 1, 1, 1,
  8813. 1, 1, 1, 1, 1, 1, 1, 1,
  8814. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  8815. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  8816. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  8817. 1435, 1435, 1435, 1435, 1435, 1435, 1436, 1437,
  8818. 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
  8819. 1437, 1437, 1437, 1438, 1437, 1437, 1439, 1440,
  8820. 1440, 1440, 1441, 1, 569, 1, 1, 1,
  8821. 1442, 1, 1, 1, 1, 1, 1, 1,
  8822. 1, 1, 1, 1, 1, 1, 1, 1,
  8823. 1, 1, 1, 569, 1, 1, 1, 1,
  8824. 1, 1, 1, 1443, 1, 1, 1, 569,
  8825. 1, 1, 1, 1, 1, 1, 1, 1,
  8826. 1, 1, 1, 1, 1, 1, 1, 1,
  8827. 1, 1, 1, 570, 1, 1444, 1, 569,
  8828. 1, 1, 1, 1, 1, 1, 1, 1,
  8829. 1, 1, 1, 1, 1, 1, 1, 1,
  8830. 1, 1, 1, 1, 1, 1, 569, 1,
  8831. 1432, 1, 1, 1, 1445, 1, 1, 1,
  8832. 1, 1, 1, 1, 1, 1, 1, 1,
  8833. 1, 1, 1, 1, 1, 1, 1, 1432,
  8834. 1, 1, 1, 1, 1, 1, 1, 1446,
  8835. 1, 1, 1, 1432, 1, 1, 1, 1,
  8836. 1, 1, 1, 1, 1, 1, 1, 1,
  8837. 1, 1, 1, 1, 1, 1, 1, 1434,
  8838. 1, 1447, 1, 1, 1, 1448, 1, 1,
  8839. 1, 1, 1, 1, 1, 1, 1, 1,
  8840. 1, 1, 1, 1, 1, 1, 1, 1,
  8841. 1447, 1449, 1450, 1449, 1449, 1449, 1449, 1449,
  8842. 1451, 1, 1449, 1449, 1, 1449, 1452, 1449,
  8843. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8844. 1449, 1449, 1, 1, 1, 1449, 1, 1449,
  8845. 1, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8846. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8847. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8848. 1449, 1449, 1449, 1453, 1, 1, 1449, 1449,
  8849. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8850. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8851. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
  8852. 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1,
  8853. 1, 1, 1, 1, 1, 1, 1, 1,
  8854. 1, 1, 1, 1, 1, 1, 1, 1,
  8855. 1, 1, 1, 1, 1, 1, 1, 1,
  8856. 1, 1, 1, 1, 1, 1, 1, 1,
  8857. 1, 1, 1, 1, 1, 1, 1, 1,
  8858. 1, 1, 1, 1, 1, 1, 1, 1,
  8859. 1, 1, 1, 1, 1, 1, 1, 1,
  8860. 1, 1, 1, 1, 1, 1, 1, 1,
  8861. 1, 1, 1454, 1454, 1454, 1454, 1454, 1454,
  8862. 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454,
  8863. 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454,
  8864. 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454,
  8865. 1455, 1456, 1456, 1456, 1456, 1456, 1456, 1456,
  8866. 1456, 1456, 1456, 1456, 1456, 1457, 1456, 1456,
  8867. 1458, 1459, 1459, 1459, 1460, 1, 1461, 1,
  8868. 1, 1, 1462, 1, 1, 1, 1, 1,
  8869. 1, 1, 1, 1, 1, 1, 1, 1,
  8870. 1, 1, 1, 1, 1, 1461, 1463, 1464,
  8871. 1463, 1463, 1463, 1463, 1463, 1465, 1, 1463,
  8872. 1463, 1, 1463, 1466, 1463, 1463, 1463, 1463,
  8873. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1,
  8874. 1, 1, 1463, 1, 1463, 1, 1463, 1463,
  8875. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8876. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8877. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8878. 1467, 1, 1, 1463, 1463, 1463, 1463, 1463,
  8879. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8880. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8881. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8882. 1463, 1463, 1463, 1463, 1, 1, 1, 1,
  8883. 1, 1, 1, 1, 1, 1, 1, 1,
  8884. 1, 1, 1, 1, 1, 1, 1, 1,
  8885. 1, 1, 1, 1, 1, 1, 1, 1,
  8886. 1, 1, 1, 1, 1, 1, 1, 1,
  8887. 1, 1, 1, 1, 1, 1, 1, 1,
  8888. 1, 1, 1, 1, 1, 1, 1, 1,
  8889. 1, 1, 1, 1, 1, 1, 1, 1,
  8890. 1, 1, 1, 1, 1, 1, 1, 1468,
  8891. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8892. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8893. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8894. 1468, 1468, 1468, 1468, 1468, 1469, 1470, 1470,
  8895. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  8896. 1470, 1470, 1471, 1470, 1470, 1472, 1473, 1473,
  8897. 1473, 1474, 1, 1475, 1, 1461, 1, 1,
  8898. 1, 1, 1, 1, 1, 1, 1, 1,
  8899. 1, 1, 1, 1, 1, 1, 1, 1,
  8900. 1, 1, 1, 1, 1461, 1, 1476, 1,
  8901. 1, 1, 1477, 1, 1, 1, 1, 1,
  8902. 1, 1, 1, 1, 1, 1, 1, 1,
  8903. 1, 1, 1, 1, 1, 1476, 1463, 1464,
  8904. 1463, 1463, 1463, 1463, 1463, 1478, 1, 1463,
  8905. 1463, 1479, 1463, 1480, 1463, 1463, 1463, 1463,
  8906. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1481,
  8907. 1, 1, 1463, 1, 1463, 1, 1463, 1463,
  8908. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8909. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8910. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8911. 1, 1, 1, 1463, 1463, 1463, 1463, 1463,
  8912. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8913. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8914. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  8915. 1463, 1463, 1463, 1463, 1, 1, 1, 1,
  8916. 1, 1, 1, 1, 1, 1, 1, 1,
  8917. 1, 1, 1, 1, 1, 1, 1, 1,
  8918. 1, 1, 1, 1, 1, 1, 1, 1,
  8919. 1, 1, 1, 1, 1, 1, 1, 1,
  8920. 1, 1, 1, 1, 1, 1, 1, 1,
  8921. 1, 1, 1, 1, 1, 1, 1, 1,
  8922. 1, 1, 1, 1, 1, 1, 1, 1,
  8923. 1, 1, 1, 1, 1, 1, 1, 1468,
  8924. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8925. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8926. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  8927. 1468, 1468, 1468, 1468, 1468, 1469, 1470, 1470,
  8928. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  8929. 1470, 1470, 1471, 1470, 1470, 1472, 1473, 1473,
  8930. 1473, 1474, 1, 1476, 1, 1, 1, 1477,
  8931. 1, 1, 1, 1, 1, 1, 1, 1,
  8932. 1, 1, 1, 1, 1, 1, 1, 1,
  8933. 1, 1, 1476, 1, 1, 1, 1, 1,
  8934. 1, 1, 1478, 1, 1, 1, 1479, 1,
  8935. 1482, 1, 1, 1, 1, 1, 1, 1,
  8936. 1, 1, 1, 1, 1481, 1, 1483, 1,
  8937. 1476, 1, 1, 1, 1, 1, 1, 1,
  8938. 1, 1, 1, 1, 1, 1, 1, 1,
  8939. 1, 1, 1, 1, 1, 1, 1, 1476,
  8940. 1, 1484, 1, 1, 1, 1485, 1, 1,
  8941. 1, 1, 1, 1, 1, 1, 1, 1,
  8942. 1, 1, 1, 1, 1, 1, 1, 1,
  8943. 1484, 1, 1, 1, 1, 1, 1, 1,
  8944. 1486, 1, 1, 1, 1487, 1, 1488, 1,
  8945. 1, 1, 1, 1, 1, 1, 1, 1,
  8946. 1, 1, 1489, 1, 1490, 1, 1, 1,
  8947. 1491, 1, 1, 1, 1, 1, 1, 1,
  8948. 1, 1, 1, 1, 1, 1, 1, 1,
  8949. 1, 1, 1, 1490, 1, 1, 1, 1,
  8950. 1, 1, 1, 1492, 1, 1, 1, 1490,
  8951. 1, 1, 1, 1, 1, 1, 1, 1,
  8952. 1, 1, 1, 1, 1, 1493, 1, 1,
  8953. 1, 1, 1, 570, 1, 1494, 1, 1490,
  8954. 1, 1, 1, 1, 1, 1, 1, 1,
  8955. 1, 1, 1, 1, 1, 1, 1, 1,
  8956. 1, 1, 1, 1, 1, 1, 1490, 1,
  8957. 1495, 1, 1, 1, 1496, 1, 1, 1,
  8958. 1, 1, 1, 1, 1, 1, 1, 1,
  8959. 1, 1, 1, 1, 1, 1, 1, 1495,
  8960. 1, 1, 1, 1, 1, 1, 1, 1497,
  8961. 1, 1, 1, 1495, 1, 1, 1, 1,
  8962. 1, 1, 1, 1, 1, 1, 1, 1,
  8963. 1, 1498, 1, 1, 1, 1, 1, 1434,
  8964. 1, 1499, 1, 1, 1, 1500, 1, 1,
  8965. 1, 1, 1, 1, 1, 1, 1, 1,
  8966. 1, 1, 1, 1, 1, 1, 1, 1,
  8967. 1499, 1501, 1502, 1501, 1501, 1501, 1501, 1501,
  8968. 1503, 1, 1501, 1501, 1, 1501, 1504, 1501,
  8969. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8970. 1501, 1501, 1, 1, 1, 1501, 1, 1501,
  8971. 1, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8972. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8973. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8974. 1501, 1501, 1501, 1, 1, 1, 1501, 1501,
  8975. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8976. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8977. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
  8978. 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1,
  8979. 1, 1, 1, 1, 1, 1, 1, 1,
  8980. 1, 1, 1, 1, 1, 1, 1, 1,
  8981. 1, 1, 1, 1, 1, 1, 1, 1,
  8982. 1, 1, 1, 1, 1, 1, 1, 1,
  8983. 1, 1, 1, 1, 1, 1, 1, 1,
  8984. 1, 1, 1, 1, 1, 1, 1, 1,
  8985. 1, 1, 1, 1, 1, 1, 1, 1,
  8986. 1, 1, 1, 1, 1, 1, 1, 1,
  8987. 1, 1, 1505, 1505, 1505, 1505, 1505, 1505,
  8988. 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
  8989. 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
  8990. 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505,
  8991. 1506, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
  8992. 1507, 1507, 1507, 1507, 1507, 1508, 1507, 1507,
  8993. 1509, 1510, 1510, 1510, 1511, 1, 1512, 1,
  8994. 1, 1, 1513, 1, 1, 1, 1, 1,
  8995. 1, 1, 1, 1, 1, 1, 1, 1,
  8996. 1, 1, 1, 1, 1, 1512, 553, 554,
  8997. 553, 553, 553, 553, 553, 1514, 1, 553,
  8998. 553, 1, 553, 557, 553, 553, 553, 553,
  8999. 553, 553, 553, 553, 553, 553, 553, 1,
  9000. 1, 1, 553, 1, 553, 1, 553, 553,
  9001. 553, 553, 553, 553, 553, 553, 553, 553,
  9002. 553, 553, 553, 553, 553, 553, 553, 553,
  9003. 553, 553, 553, 553, 553, 553, 553, 553,
  9004. 1, 1, 1, 553, 553, 553, 553, 553,
  9005. 553, 553, 553, 553, 553, 553, 553, 553,
  9006. 553, 553, 553, 553, 553, 553, 553, 553,
  9007. 553, 553, 553, 553, 553, 553, 553, 553,
  9008. 553, 553, 553, 553, 1, 1, 1, 1,
  9009. 1, 1, 1, 1, 1, 1, 1, 1,
  9010. 1, 1, 1, 1, 1, 1, 1, 1,
  9011. 1, 1, 1, 1, 1, 1, 1, 1,
  9012. 1, 1, 1, 1, 1, 1, 1, 1,
  9013. 1, 1, 1, 1, 1, 1, 1, 1,
  9014. 1, 1, 1, 1, 1, 1, 1, 1,
  9015. 1, 1, 1, 1, 1, 1, 1, 1,
  9016. 1, 1, 1, 1, 1, 1, 1, 559,
  9017. 559, 559, 559, 559, 559, 559, 559, 559,
  9018. 559, 559, 559, 559, 559, 559, 559, 559,
  9019. 559, 559, 559, 559, 559, 559, 559, 559,
  9020. 559, 559, 559, 559, 559, 560, 561, 561,
  9021. 561, 561, 561, 561, 561, 561, 561, 561,
  9022. 561, 561, 562, 561, 561, 563, 564, 564,
  9023. 564, 565, 1, 1515, 1, 1512, 1, 1,
  9024. 1, 1, 1, 1, 1, 1, 1, 1,
  9025. 1, 1, 1, 1, 1, 1, 1, 1,
  9026. 1, 1, 1, 1, 1512, 1, 1516, 1,
  9027. 1, 1, 1517, 1, 1, 1, 1, 1,
  9028. 1, 1, 1, 1, 1, 1, 1, 1,
  9029. 1, 1, 1, 1, 1, 1516, 1429, 1430,
  9030. 1429, 1429, 1429, 1429, 1429, 1518, 1, 1429,
  9031. 1429, 1, 1429, 1433, 1429, 1429, 1429, 1429,
  9032. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1,
  9033. 1, 1, 1429, 1, 1429, 1, 1429, 1429,
  9034. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9035. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9036. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9037. 1, 1, 1, 1429, 1429, 1429, 1429, 1429,
  9038. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9039. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9040. 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
  9041. 1429, 1429, 1429, 1429, 1, 1, 1, 1,
  9042. 1, 1, 1, 1, 1, 1, 1, 1,
  9043. 1, 1, 1, 1, 1, 1, 1, 1,
  9044. 1, 1, 1, 1, 1, 1, 1, 1,
  9045. 1, 1, 1, 1, 1, 1, 1, 1,
  9046. 1, 1, 1, 1, 1, 1, 1, 1,
  9047. 1, 1, 1, 1, 1, 1, 1, 1,
  9048. 1, 1, 1, 1, 1, 1, 1, 1,
  9049. 1, 1, 1, 1, 1, 1, 1, 1435,
  9050. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  9051. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  9052. 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
  9053. 1435, 1435, 1435, 1435, 1435, 1436, 1437, 1437,
  9054. 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
  9055. 1437, 1437, 1438, 1437, 1437, 1439, 1440, 1440,
  9056. 1440, 1441, 1, 1320, 575, 1320, 1320, 1320,
  9057. 1320, 1320, 1, 1, 1320, 1320, 1, 1320,
  9058. 1519, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9059. 1320, 1320, 1320, 1320, 1, 1, 1, 1320,
  9060. 1, 1320, 1, 1320, 1320, 1320, 1320, 1320,
  9061. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9062. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9063. 1320, 1320, 1320, 1320, 1320, 1, 1, 1,
  9064. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9065. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9066. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9067. 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
  9068. 1320, 1, 1, 1, 1, 1, 1, 1,
  9069. 1, 1, 1, 1, 1, 1, 1, 1,
  9070. 1, 1, 1, 1, 1, 1, 1, 1,
  9071. 1, 1, 1, 1, 1, 1, 1, 1,
  9072. 1, 1, 1, 1, 1, 1, 1, 1,
  9073. 1, 1, 1, 1, 1, 1, 1, 1,
  9074. 1, 1, 1, 1, 1, 1, 1, 1,
  9075. 1, 1, 1, 1, 1, 1, 1, 1,
  9076. 1, 1, 1, 1, 1325, 1325, 1325, 1325,
  9077. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  9078. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  9079. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  9080. 1325, 1325, 1326, 1327, 1327, 1327, 1327, 1327,
  9081. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1328,
  9082. 1327, 1327, 1329, 1330, 1330, 1330, 1331, 1,
  9083. 1482, 1, 1, 1, 1520, 1, 1, 1,
  9084. 1, 1, 1, 1, 1, 1, 1, 1,
  9085. 1, 1, 1, 1, 1, 1, 1, 1482,
  9086. 1521, 1, 1521, 1521, 1521, 1521, 1521, 1522,
  9087. 1, 1521, 1521, 1, 1521, 1, 1521, 1521,
  9088. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9089. 1521, 1, 1, 1, 1521, 1, 1521, 1,
  9090. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9091. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9092. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9093. 1521, 1521, 1, 1, 1, 1521, 1521, 1521,
  9094. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9095. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9096. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9097. 1521, 1521, 1521, 1521, 1521, 1521, 1, 1,
  9098. 1, 1, 1, 1, 1, 1, 1, 1,
  9099. 1, 1, 1, 1, 1, 1, 1, 1,
  9100. 1, 1, 1, 1, 1, 1, 1, 1,
  9101. 1, 1, 1, 1, 1, 1, 1, 1,
  9102. 1, 1, 1, 1, 1, 1, 1, 1,
  9103. 1, 1, 1, 1, 1, 1, 1, 1,
  9104. 1, 1, 1, 1, 1, 1, 1, 1,
  9105. 1, 1, 1, 1, 1, 1, 1, 1,
  9106. 1, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9107. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9108. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9109. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1524,
  9110. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9111. 1525, 1525, 1525, 1525, 1526, 1525, 1525, 1527,
  9112. 1528, 1528, 1528, 1529, 1, 1530, 1, 1482,
  9113. 1, 1, 1, 1, 1, 1, 1, 1,
  9114. 1, 1, 1, 1, 1, 1, 1, 1,
  9115. 1, 1, 1, 1, 1, 1, 1482, 1,
  9116. 1476, 1, 1, 1, 1477, 1, 1, 1,
  9117. 1, 1, 1, 1, 1, 1, 1, 1,
  9118. 1, 1, 1, 1, 1, 1, 1, 1476,
  9119. 1521, 1, 1521, 1521, 1521, 1521, 1521, 1478,
  9120. 1, 1521, 1521, 1479, 1521, 1482, 1521, 1521,
  9121. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9122. 1521, 1481, 1, 1, 1521, 1, 1521, 1,
  9123. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9124. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9125. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9126. 1521, 1521, 1, 1, 1, 1521, 1521, 1521,
  9127. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9128. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9129. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9130. 1521, 1521, 1521, 1521, 1521, 1521, 1, 1,
  9131. 1, 1, 1, 1, 1, 1, 1, 1,
  9132. 1, 1, 1, 1, 1, 1, 1, 1,
  9133. 1, 1, 1, 1, 1, 1, 1, 1,
  9134. 1, 1, 1, 1, 1, 1, 1, 1,
  9135. 1, 1, 1, 1, 1, 1, 1, 1,
  9136. 1, 1, 1, 1, 1, 1, 1, 1,
  9137. 1, 1, 1, 1, 1, 1, 1, 1,
  9138. 1, 1, 1, 1, 1, 1, 1, 1,
  9139. 1, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9140. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9141. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9142. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1524,
  9143. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9144. 1525, 1525, 1525, 1525, 1526, 1525, 1525, 1527,
  9145. 1528, 1528, 1528, 1529, 1, 1521, 1521, 1521,
  9146. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9147. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9148. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9149. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9150. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9151. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9152. 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
  9153. 1521, 1521, 1521, 1521, 1521, 1, 1523, 1523,
  9154. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9155. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9156. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9157. 1523, 1523, 1523, 1523, 1523, 1523, 1, 1523,
  9158. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9159. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9160. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9161. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9162. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9163. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9164. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9165. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1,
  9166. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9167. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9168. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9169. 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
  9170. 1, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9171. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9172. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9173. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9174. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9175. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9176. 1525, 1, 1525, 1525, 1525, 1525, 1525, 1525,
  9177. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9178. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9179. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9180. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9181. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9182. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9183. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9184. 1525, 1525, 1, 1525, 1525, 1525, 1525, 1525,
  9185. 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
  9186. 1525, 1525, 1525, 1, 1488, 1, 1, 1,
  9187. 1531, 1, 1, 1, 1, 1, 1, 1,
  9188. 1, 1, 1, 1, 1, 1, 1, 1,
  9189. 1, 1, 1, 1488, 1532, 1, 1532, 1532,
  9190. 1532, 1532, 1532, 1533, 1, 1532, 1532, 1,
  9191. 1532, 1, 1532, 1532, 1532, 1532, 1532, 1532,
  9192. 1532, 1532, 1532, 1532, 1532, 1, 1, 1,
  9193. 1532, 1, 1532, 1, 1532, 1532, 1532, 1532,
  9194. 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9195. 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9196. 1532, 1532, 1532, 1532, 1532, 1532, 1, 1,
  9197. 1, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9198. 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9199. 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9200. 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532,
  9201. 1532, 1532, 1, 1, 1, 1, 1, 1,
  9202. 1, 1, 1, 1, 1, 1, 1, 1,
  9203. 1, 1, 1, 1, 1, 1, 1, 1,
  9204. 1, 1, 1, 1, 1, 1, 1, 1,
  9205. 1, 1, 1, 1, 1, 1, 1, 1,
  9206. 1, 1, 1, 1, 1, 1, 1, 1,
  9207. 1, 1, 1, 1, 1, 1, 1, 1,
  9208. 1, 1, 1, 1, 1, 1, 1, 1,
  9209. 1, 1, 1, 1, 1, 1534, 1534, 1534,
  9210. 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
  9211. 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
  9212. 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534,
  9213. 1534, 1534, 1534, 1535, 1536, 1536, 1536, 1536,
  9214. 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
  9215. 1537, 1536, 1536, 1538, 1539, 1539, 1539, 1540,
  9216. 1, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9217. 1541, 1464, 1, 1541, 1541, 1542, 1541, 1541,
  9218. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9219. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9220. 1464, 1541, 1, 1541, 1541, 1541, 1541, 1541,
  9221. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9222. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9223. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9224. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9225. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9226. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9227. 1541, 1541, 1541, 1541, 1543, 1541, 1541, 1541,
  9228. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9229. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9230. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9231. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9232. 1, 1, 1, 1, 1, 1, 1, 1,
  9233. 1, 1, 1, 1, 1, 1, 1, 1,
  9234. 1, 1, 1, 1, 1, 1, 1, 1,
  9235. 1, 1, 1, 1, 1, 1, 1, 1,
  9236. 1, 1, 1, 1, 1, 1, 1, 1,
  9237. 1, 1, 1, 1, 1, 1, 1, 1,
  9238. 1, 1, 1, 1, 1, 1, 1, 1,
  9239. 1, 1, 1, 1, 1, 1, 1, 1,
  9240. 1, 1, 1544, 1544, 1544, 1544, 1544, 1544,
  9241. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9242. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9243. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9244. 1545, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9245. 1546, 1546, 1546, 1546, 1546, 1547, 1546, 1546,
  9246. 1548, 1549, 1549, 1549, 1550, 1, 1541, 1541,
  9247. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1,
  9248. 1541, 1541, 1551, 1541, 1541, 1541, 1541, 1541,
  9249. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9250. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1552,
  9251. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9252. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9253. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9254. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9255. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9256. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9257. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9258. 1541, 1543, 1541, 1541, 1541, 1541, 1541, 1541,
  9259. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9260. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9261. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9262. 1541, 1541, 1541, 1541, 1541, 1, 1, 1,
  9263. 1, 1, 1, 1, 1, 1, 1, 1,
  9264. 1, 1, 1, 1, 1, 1, 1, 1,
  9265. 1, 1, 1, 1, 1, 1, 1, 1,
  9266. 1, 1, 1, 1, 1, 1, 1, 1,
  9267. 1, 1, 1, 1, 1, 1, 1, 1,
  9268. 1, 1, 1, 1, 1, 1, 1, 1,
  9269. 1, 1, 1, 1, 1, 1, 1, 1,
  9270. 1, 1, 1, 1, 1, 1, 1, 1544,
  9271. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9272. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9273. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9274. 1544, 1544, 1544, 1544, 1544, 1545, 1546, 1546,
  9275. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9276. 1546, 1546, 1547, 1546, 1546, 1548, 1549, 1549,
  9277. 1549, 1550, 1, 1553, 1, 1541, 1, 1,
  9278. 1, 1, 1, 1, 1, 1, 1, 1,
  9279. 1, 1, 1, 1, 1, 1, 1, 1,
  9280. 1, 1, 1, 1, 1541, 1, 1554, 1,
  9281. 1, 1, 1555, 1, 1, 1, 1, 1,
  9282. 1, 1, 1, 1, 1, 1, 1, 1,
  9283. 1, 1, 1, 1, 1, 1554, 1552, 1464,
  9284. 1552, 1552, 1552, 1552, 1552, 1556, 1, 1552,
  9285. 1552, 1479, 1552, 1466, 1552, 1552, 1552, 1552,
  9286. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1481,
  9287. 1, 1, 1552, 1, 1552, 1, 1552, 1552,
  9288. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9289. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9290. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9291. 1, 1, 1, 1552, 1552, 1552, 1552, 1552,
  9292. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9293. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9294. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9295. 1552, 1552, 1552, 1552, 1, 1, 1, 1,
  9296. 1, 1, 1, 1, 1, 1, 1, 1,
  9297. 1, 1, 1, 1, 1, 1, 1, 1,
  9298. 1, 1, 1, 1, 1, 1, 1, 1,
  9299. 1, 1, 1, 1, 1, 1, 1, 1,
  9300. 1, 1, 1, 1, 1, 1, 1, 1,
  9301. 1, 1, 1, 1, 1, 1, 1, 1,
  9302. 1, 1, 1, 1, 1, 1, 1, 1,
  9303. 1, 1, 1, 1, 1, 1, 1, 1557,
  9304. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9305. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9306. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9307. 1557, 1557, 1557, 1557, 1557, 1558, 1559, 1559,
  9308. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9309. 1559, 1559, 1560, 1559, 1559, 1561, 1562, 1562,
  9310. 1562, 1563, 1, 1554, 1, 1, 1, 1555,
  9311. 1, 1, 1, 1, 1, 1, 1, 1,
  9312. 1, 1, 1, 1, 1, 1, 1, 1,
  9313. 1, 1, 1554, 1, 1, 1, 1, 1,
  9314. 1, 1, 1556, 1, 1, 1, 1479, 1,
  9315. 1, 1, 1, 1, 1, 1, 1, 1,
  9316. 1, 1, 1, 1, 1481, 1, 1564, 1,
  9317. 1554, 1, 1, 1, 1, 1, 1, 1,
  9318. 1, 1, 1, 1, 1, 1, 1, 1,
  9319. 1, 1, 1, 1, 1, 1, 1, 1554,
  9320. 1, 1565, 1, 1, 1, 1566, 1, 1,
  9321. 1, 1, 1, 1, 1, 1, 1, 1,
  9322. 1, 1, 1, 1, 1, 1, 1, 1,
  9323. 1565, 1, 1, 1, 1, 1, 1, 1,
  9324. 1567, 1, 1, 1, 1487, 1, 1, 1,
  9325. 1, 1, 1, 1, 1, 1, 1, 1,
  9326. 1, 1, 1489, 1, 1552, 1464, 1552, 1552,
  9327. 1552, 1552, 1552, 1, 1, 1552, 1552, 1,
  9328. 1552, 1466, 1552, 1552, 1552, 1552, 1552, 1552,
  9329. 1552, 1552, 1552, 1552, 1552, 1, 1, 1,
  9330. 1552, 1, 1552, 1, 1552, 1552, 1552, 1552,
  9331. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9332. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9333. 1552, 1552, 1552, 1552, 1552, 1552, 1, 1,
  9334. 1, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9335. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9336. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9337. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9338. 1552, 1552, 1, 1, 1, 1, 1, 1,
  9339. 1, 1, 1, 1, 1, 1, 1, 1,
  9340. 1, 1, 1, 1, 1, 1, 1, 1,
  9341. 1, 1, 1, 1, 1, 1, 1, 1,
  9342. 1, 1, 1, 1, 1, 1, 1, 1,
  9343. 1, 1, 1, 1, 1, 1, 1, 1,
  9344. 1, 1, 1, 1, 1, 1, 1, 1,
  9345. 1, 1, 1, 1, 1, 1, 1, 1,
  9346. 1, 1, 1, 1, 1, 1557, 1557, 1557,
  9347. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9348. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9349. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9350. 1557, 1557, 1557, 1558, 1559, 1559, 1559, 1559,
  9351. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9352. 1560, 1559, 1559, 1561, 1562, 1562, 1562, 1563,
  9353. 1, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9354. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9355. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9356. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9357. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9358. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9359. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9360. 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
  9361. 1552, 1, 1557, 1557, 1557, 1557, 1557, 1557,
  9362. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9363. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9364. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9365. 1557, 1557, 1, 1557, 1557, 1557, 1557, 1557,
  9366. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9367. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9368. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9369. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9370. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9371. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9372. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9373. 1557, 1557, 1557, 1, 1557, 1557, 1557, 1557,
  9374. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9375. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9376. 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557,
  9377. 1557, 1557, 1557, 1557, 1, 1559, 1559, 1559,
  9378. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9379. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9380. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9381. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9382. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9383. 1559, 1559, 1559, 1559, 1559, 1, 1559, 1559,
  9384. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9385. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9386. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9387. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9388. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9389. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9390. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9391. 1559, 1559, 1559, 1559, 1559, 1559, 1, 1559,
  9392. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
  9393. 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1,
  9394. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9395. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9396. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9397. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9398. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9399. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9400. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9401. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9402. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9403. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9404. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9405. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9406. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9407. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9408. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9409. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9410. 1, 1, 1, 1, 1, 1, 1, 1,
  9411. 1, 1, 1, 1, 1, 1, 1, 1,
  9412. 1, 1, 1, 1, 1, 1, 1, 1,
  9413. 1, 1, 1, 1, 1, 1, 1, 1,
  9414. 1, 1, 1, 1, 1, 1, 1, 1,
  9415. 1, 1, 1, 1, 1, 1, 1, 1,
  9416. 1, 1, 1, 1, 1, 1, 1, 1,
  9417. 1, 1, 1, 1, 1, 1, 1, 1,
  9418. 1, 1, 1544, 1544, 1544, 1544, 1544, 1544,
  9419. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9420. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9421. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9422. 1545, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9423. 1546, 1546, 1546, 1546, 1546, 1547, 1546, 1546,
  9424. 1548, 1549, 1549, 1549, 1550, 1, 1541, 1541,
  9425. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9426. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9427. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9428. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9429. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9430. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9431. 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
  9432. 1541, 1541, 1541, 1541, 1541, 1541, 1, 1544,
  9433. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9434. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9435. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9436. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1,
  9437. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9438. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9439. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9440. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9441. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9442. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9443. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9444. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9445. 1, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9446. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9447. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9448. 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544,
  9449. 1544, 1, 1546, 1546, 1546, 1546, 1546, 1546,
  9450. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9451. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9452. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9453. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9454. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9455. 1546, 1546, 1, 1546, 1546, 1546, 1546, 1546,
  9456. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9457. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9458. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9459. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9460. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9461. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9462. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9463. 1546, 1546, 1546, 1, 1546, 1546, 1546, 1546,
  9464. 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546,
  9465. 1546, 1546, 1546, 1546, 1, 1568, 1, 1464,
  9466. 1, 1, 1, 1, 1, 1, 1, 1,
  9467. 1, 1, 1, 1, 1, 1, 1, 1,
  9468. 1, 1, 1, 1, 1, 1, 1464, 1,
  9469. 1482, 1, 1, 1, 1520, 1, 1, 1,
  9470. 1, 1, 1, 1, 1, 1, 1, 1,
  9471. 1, 1, 1, 1, 1, 1, 1, 1482,
  9472. 1463, 1464, 1463, 1463, 1463, 1463, 1463, 1522,
  9473. 1, 1463, 1463, 1, 1463, 1466, 1463, 1463,
  9474. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9475. 1463, 1, 1, 1, 1463, 1, 1463, 1,
  9476. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9477. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9478. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9479. 1463, 1463, 1, 1, 1, 1463, 1463, 1463,
  9480. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9481. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9482. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9483. 1463, 1463, 1463, 1463, 1463, 1463, 1, 1,
  9484. 1, 1, 1, 1, 1, 1, 1, 1,
  9485. 1, 1, 1, 1, 1, 1, 1, 1,
  9486. 1, 1, 1, 1, 1, 1, 1, 1,
  9487. 1, 1, 1, 1, 1, 1, 1, 1,
  9488. 1, 1, 1, 1, 1, 1, 1, 1,
  9489. 1, 1, 1, 1, 1, 1, 1, 1,
  9490. 1, 1, 1, 1, 1, 1, 1, 1,
  9491. 1, 1, 1, 1, 1, 1, 1, 1,
  9492. 1, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9493. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9494. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9495. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1469,
  9496. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9497. 1470, 1470, 1470, 1470, 1471, 1470, 1470, 1472,
  9498. 1473, 1473, 1473, 1474, 1, 1463, 1463, 1463,
  9499. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9500. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9501. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9502. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9503. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9504. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9505. 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
  9506. 1463, 1463, 1463, 1463, 1463, 1, 1468, 1468,
  9507. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9508. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9509. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9510. 1468, 1468, 1468, 1468, 1468, 1468, 1, 1468,
  9511. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9512. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9513. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9514. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9515. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9516. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9517. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9518. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1,
  9519. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9520. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9521. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9522. 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
  9523. 1, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9524. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9525. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9526. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9527. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9528. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9529. 1470, 1, 1470, 1470, 1470, 1470, 1470, 1470,
  9530. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9531. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9532. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9533. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9534. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9535. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9536. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9537. 1470, 1470, 1, 1470, 1470, 1470, 1470, 1470,
  9538. 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470,
  9539. 1470, 1470, 1470, 1, 1569, 1, 1, 1,
  9540. 1570, 1, 1, 1, 1, 1, 1, 1,
  9541. 1, 1, 1, 1, 1, 1, 1, 1,
  9542. 1, 1, 1, 1569, 1571, 1572, 1571, 1571,
  9543. 1571, 1571, 1571, 1573, 1, 1571, 1571, 1,
  9544. 1571, 1574, 1571, 1571, 1571, 1571, 1571, 1571,
  9545. 1571, 1571, 1571, 1571, 1571, 1, 1, 1,
  9546. 1571, 1, 1571, 1, 1571, 1571, 1571, 1571,
  9547. 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9548. 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9549. 1571, 1571, 1571, 1571, 1571, 1571, 1575, 1,
  9550. 1, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9551. 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9552. 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9553. 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571,
  9554. 1571, 1571, 1, 1, 1, 1, 1, 1,
  9555. 1, 1, 1, 1, 1, 1, 1, 1,
  9556. 1, 1, 1, 1, 1, 1, 1, 1,
  9557. 1, 1, 1, 1, 1, 1, 1, 1,
  9558. 1, 1, 1, 1, 1, 1, 1, 1,
  9559. 1, 1, 1, 1, 1, 1, 1, 1,
  9560. 1, 1, 1, 1, 1, 1, 1, 1,
  9561. 1, 1, 1, 1, 1, 1, 1, 1,
  9562. 1, 1, 1, 1, 1, 1576, 1576, 1576,
  9563. 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576,
  9564. 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576,
  9565. 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576,
  9566. 1576, 1576, 1576, 1577, 1578, 1578, 1578, 1578,
  9567. 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578,
  9568. 1579, 1578, 1578, 1580, 1581, 1581, 1581, 1582,
  9569. 1, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9570. 1467, 1467, 1, 1467, 1467, 1583, 1467, 1467,
  9571. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9572. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9573. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9574. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9575. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9576. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9577. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9578. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9579. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9580. 1467, 1467, 1467, 1, 1584, 1554, 1467, 1467,
  9581. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9582. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9583. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9584. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9585. 1, 1, 1, 1, 1, 1, 1, 1,
  9586. 1, 1, 1, 1, 1, 1, 1, 1,
  9587. 1, 1, 1, 1, 1, 1, 1, 1,
  9588. 1, 1, 1, 1, 1, 1, 1, 1,
  9589. 1, 1, 1, 1, 1, 1, 1, 1,
  9590. 1, 1, 1, 1, 1, 1, 1, 1,
  9591. 1, 1, 1, 1, 1, 1, 1, 1,
  9592. 1, 1, 1, 1, 1, 1, 1, 1,
  9593. 1, 1, 1585, 1585, 1585, 1585, 1585, 1585,
  9594. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9595. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9596. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9597. 1586, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9598. 1587, 1587, 1587, 1587, 1587, 1588, 1587, 1587,
  9599. 1589, 1590, 1590, 1590, 1591, 1, 1592, 1,
  9600. 1467, 1, 1, 1, 1, 1, 1, 1,
  9601. 1, 1, 1, 1, 1, 1, 1, 1,
  9602. 1, 1, 1, 1, 1, 1, 1, 1467,
  9603. 1, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9604. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9605. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9606. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9607. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9608. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9609. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9610. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9611. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9612. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9613. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9614. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9615. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9616. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9617. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9618. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9619. 1467, 1, 1, 1, 1, 1, 1, 1,
  9620. 1, 1, 1, 1, 1, 1, 1, 1,
  9621. 1, 1, 1, 1, 1, 1, 1, 1,
  9622. 1, 1, 1, 1, 1, 1, 1, 1,
  9623. 1, 1, 1, 1, 1, 1, 1, 1,
  9624. 1, 1, 1, 1, 1, 1, 1, 1,
  9625. 1, 1, 1, 1, 1, 1, 1, 1,
  9626. 1, 1, 1, 1, 1, 1, 1, 1,
  9627. 1, 1, 1, 1585, 1585, 1585, 1585, 1585,
  9628. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9629. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9630. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9631. 1585, 1586, 1587, 1587, 1587, 1587, 1587, 1587,
  9632. 1587, 1587, 1587, 1587, 1587, 1587, 1588, 1587,
  9633. 1587, 1589, 1590, 1590, 1590, 1591, 1, 1467,
  9634. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9635. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9636. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9637. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9638. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9639. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9640. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
  9641. 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1,
  9642. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9643. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9644. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9645. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9646. 1, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9647. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9648. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9649. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9650. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9651. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9652. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9653. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9654. 1585, 1, 1585, 1585, 1585, 1585, 1585, 1585,
  9655. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9656. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9657. 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585,
  9658. 1585, 1585, 1, 1587, 1587, 1587, 1587, 1587,
  9659. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9660. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9661. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9662. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9663. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9664. 1587, 1587, 1587, 1, 1587, 1587, 1587, 1587,
  9665. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9666. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9667. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9668. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9669. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9670. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9671. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9672. 1587, 1587, 1587, 1587, 1, 1587, 1587, 1587,
  9673. 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
  9674. 1587, 1587, 1587, 1587, 1587, 1, 1593, 1,
  9675. 1, 1, 1594, 1, 1, 1, 1, 1,
  9676. 1, 1, 1, 1, 1, 1, 1, 1,
  9677. 1, 1, 1, 1, 1, 1593, 1595, 1596,
  9678. 1595, 1595, 1595, 1595, 1595, 1597, 1, 1595,
  9679. 1595, 1, 1595, 1598, 1595, 1595, 1595, 1595,
  9680. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1,
  9681. 1, 216, 1595, 1, 1595, 246, 1595, 1595,
  9682. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9683. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9684. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9685. 1599, 1, 1, 1595, 1595, 1595, 1595, 1595,
  9686. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9687. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9688. 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595,
  9689. 1595, 1595, 1595, 1595, 1, 1, 1, 1,
  9690. 1, 1, 1, 1, 1, 1, 1, 1,
  9691. 1, 1, 1, 1, 1, 1, 1, 1,
  9692. 1, 1, 1, 1, 1, 1, 1, 1,
  9693. 1, 1, 1, 1, 1, 1, 1, 1,
  9694. 1, 1, 1, 1, 1, 1, 1, 1,
  9695. 1, 1, 1, 1, 1, 1, 1, 1,
  9696. 1, 1, 1, 1, 1, 1, 1, 1,
  9697. 1, 1, 1, 1, 1, 1, 1, 1600,
  9698. 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
  9699. 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
  9700. 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
  9701. 1600, 1600, 1600, 1600, 1600, 1601, 1602, 1602,
  9702. 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,
  9703. 1602, 1602, 1603, 1602, 1602, 1604, 1605, 1605,
  9704. 1605, 1606, 1, 1607, 1, 1, 1, 1608,
  9705. 1, 1, 1, 1, 1, 1, 1, 1,
  9706. 1, 1, 1, 1, 1, 1, 1, 1,
  9707. 1, 1, 1607, 1609, 1610, 1609, 1609, 1609,
  9708. 1609, 1609, 1611, 1, 1609, 1609, 1, 1609,
  9709. 1612, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9710. 1609, 1609, 1609, 1609, 1, 1, 199, 1609,
  9711. 1, 1609, 1, 1609, 1609, 1609, 1609, 1609,
  9712. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9713. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9714. 1609, 1609, 1609, 1609, 1609, 1613, 1, 1,
  9715. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9716. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9717. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9718. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9719. 1609, 1, 1, 1, 1, 1, 1, 1,
  9720. 1, 1, 1, 1, 1, 1, 1, 1,
  9721. 1, 1, 1, 1, 1, 1, 1, 1,
  9722. 1, 1, 1, 1, 1, 1, 1, 1,
  9723. 1, 1, 1, 1, 1, 1, 1, 1,
  9724. 1, 1, 1, 1, 1, 1, 1, 1,
  9725. 1, 1, 1, 1, 1, 1, 1, 1,
  9726. 1, 1, 1, 1, 1, 1, 1, 1,
  9727. 1, 1, 1, 1, 1614, 1614, 1614, 1614,
  9728. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9729. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9730. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9731. 1614, 1614, 1615, 1616, 1616, 1616, 1616, 1616,
  9732. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1617,
  9733. 1616, 1616, 1618, 1619, 1619, 1619, 1620, 1,
  9734. 1621, 1, 1607, 1, 1, 1, 1, 1,
  9735. 1, 1, 1, 1, 1, 1, 1, 1,
  9736. 1, 1, 1, 1, 1, 1, 1, 1,
  9737. 1, 1607, 1, 1622, 1, 1, 1, 1623,
  9738. 1, 1, 1, 1, 1, 1, 1, 1,
  9739. 1, 1, 1, 1, 1, 1, 1, 1,
  9740. 1, 1, 1622, 1609, 1610, 1609, 1609, 1609,
  9741. 1609, 1609, 1624, 1, 1609, 1609, 1625, 1609,
  9742. 1626, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9743. 1609, 1609, 1609, 1609, 1, 767, 216, 1609,
  9744. 1, 1609, 246, 1609, 1609, 1609, 1609, 1609,
  9745. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9746. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9747. 1609, 1609, 1609, 1609, 1609, 1, 1, 1,
  9748. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9749. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9750. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9751. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  9752. 1609, 1, 1, 1, 1, 1, 1, 1,
  9753. 1, 1, 1, 1, 1, 1, 1, 1,
  9754. 1, 1, 1, 1, 1, 1, 1, 1,
  9755. 1, 1, 1, 1, 1, 1, 1, 1,
  9756. 1, 1, 1, 1, 1, 1, 1, 1,
  9757. 1, 1, 1, 1, 1, 1, 1, 1,
  9758. 1, 1, 1, 1, 1, 1, 1, 1,
  9759. 1, 1, 1, 1, 1, 1, 1, 1,
  9760. 1, 1, 1, 1, 1614, 1614, 1614, 1614,
  9761. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9762. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9763. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  9764. 1614, 1614, 1615, 1616, 1616, 1616, 1616, 1616,
  9765. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1617,
  9766. 1616, 1616, 1618, 1619, 1619, 1619, 1620, 1,
  9767. 1622, 1, 1, 1, 1623, 1, 1, 1,
  9768. 1, 1, 1, 1, 1, 1, 1, 1,
  9769. 1, 1, 1, 1, 1, 1, 1, 1622,
  9770. 227, 228, 227, 227, 227, 227, 227, 1624,
  9771. 1, 227, 227, 1625, 227, 1627, 227, 227,
  9772. 227, 227, 227, 227, 227, 227, 227, 227,
  9773. 227, 1, 767, 216, 227, 1, 227, 246,
  9774. 227, 227, 227, 227, 227, 227, 227, 227,
  9775. 227, 227, 227, 227, 227, 227, 227, 227,
  9776. 227, 227, 227, 227, 227, 227, 227, 227,
  9777. 227, 227, 1, 1, 1, 227, 227, 227,
  9778. 227, 227, 227, 227, 227, 227, 227, 227,
  9779. 227, 227, 227, 227, 227, 227, 227, 227,
  9780. 227, 227, 227, 227, 227, 227, 227, 227,
  9781. 227, 227, 227, 227, 227, 227, 1, 1,
  9782. 1, 1, 1, 1, 1, 1, 1, 1,
  9783. 1, 1, 1, 1, 1, 1, 1, 1,
  9784. 1, 1, 1, 1, 1, 1, 1, 1,
  9785. 1, 1, 1, 1, 1, 1, 1, 1,
  9786. 1, 1, 1, 1, 1, 1, 1, 1,
  9787. 1, 1, 1, 1, 1, 1, 1, 1,
  9788. 1, 1, 1, 1, 1, 1, 1, 1,
  9789. 1, 1, 1, 1, 1, 1, 1, 1,
  9790. 1, 234, 234, 234, 234, 234, 234, 234,
  9791. 234, 234, 234, 234, 234, 234, 234, 234,
  9792. 234, 234, 234, 234, 234, 234, 234, 234,
  9793. 234, 234, 234, 234, 234, 234, 234, 235,
  9794. 236, 236, 236, 236, 236, 236, 236, 236,
  9795. 236, 236, 236, 236, 237, 236, 236, 238,
  9796. 239, 239, 239, 240, 1, 1628, 1, 1629,
  9797. 1, 1, 1, 1, 1, 1, 1, 1,
  9798. 1, 1, 1, 1, 1, 1, 1, 1,
  9799. 1, 1, 1, 1, 1, 1, 1629, 1,
  9800. 1630, 1, 1, 1, 1631, 1, 1, 1,
  9801. 1, 1, 1, 1, 1, 1, 1, 1,
  9802. 1, 1, 1, 1, 1, 1, 1, 1630,
  9803. 273, 274, 273, 273, 273, 273, 273, 1632,
  9804. 1, 273, 273, 1633, 273, 1634, 273, 273,
  9805. 273, 273, 273, 273, 273, 273, 273, 273,
  9806. 273, 1, 776, 277, 273, 1, 273, 276,
  9807. 273, 273, 273, 273, 273, 273, 273, 273,
  9808. 273, 273, 273, 273, 273, 273, 273, 273,
  9809. 273, 273, 273, 273, 273, 273, 273, 273,
  9810. 273, 273, 1, 1, 1, 273, 273, 273,
  9811. 273, 273, 273, 273, 273, 273, 273, 273,
  9812. 273, 273, 273, 273, 273, 273, 273, 273,
  9813. 273, 273, 273, 273, 273, 273, 273, 273,
  9814. 273, 273, 273, 273, 273, 273, 1, 1,
  9815. 1, 1, 1, 1, 1, 1, 1, 1,
  9816. 1, 1, 1, 1, 1, 1, 1, 1,
  9817. 1, 1, 1, 1, 1, 1, 1, 1,
  9818. 1, 1, 1, 1, 1, 1, 1, 1,
  9819. 1, 1, 1, 1, 1, 1, 1, 1,
  9820. 1, 1, 1, 1, 1, 1, 1, 1,
  9821. 1, 1, 1, 1, 1, 1, 1, 1,
  9822. 1, 1, 1, 1, 1, 1, 1, 1,
  9823. 1, 278, 278, 278, 278, 278, 278, 278,
  9824. 278, 278, 278, 278, 278, 278, 278, 278,
  9825. 278, 278, 278, 278, 278, 278, 278, 278,
  9826. 278, 278, 278, 278, 278, 278, 278, 279,
  9827. 280, 280, 280, 280, 280, 280, 280, 280,
  9828. 280, 280, 280, 280, 281, 280, 280, 282,
  9829. 283, 283, 283, 284, 1, 1635, 1, 1,
  9830. 1, 1636, 1, 1, 1, 1, 1, 1,
  9831. 1, 1, 1, 1, 1, 1, 1, 1,
  9832. 1, 1, 1, 1, 1635, 1637, 228, 1637,
  9833. 1637, 1637, 1637, 1637, 1638, 1, 1637, 1637,
  9834. 1, 1637, 246, 1637, 1637, 1637, 1637, 1637,
  9835. 1637, 1637, 1637, 1637, 1637, 1637, 1, 1,
  9836. 216, 1637, 1, 1637, 246, 1637, 1637, 1637,
  9837. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9838. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9839. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1,
  9840. 1, 1, 1637, 1637, 1637, 1637, 1637, 1637,
  9841. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9842. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9843. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9844. 1637, 1637, 1637, 1, 1, 1, 1, 1,
  9845. 1, 1, 1, 1, 1, 1, 1, 1,
  9846. 1, 1, 1, 1, 1, 1, 1, 1,
  9847. 1, 1, 1, 1, 1, 1, 1, 1,
  9848. 1, 1, 1, 1, 1, 1, 1, 1,
  9849. 1, 1, 1, 1, 1, 1, 1, 1,
  9850. 1, 1, 1, 1, 1, 1, 1, 1,
  9851. 1, 1, 1, 1, 1, 1, 1, 1,
  9852. 1, 1, 1, 1, 1, 1, 1639, 1639,
  9853. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9854. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9855. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9856. 1639, 1639, 1639, 1639, 1640, 1641, 1641, 1641,
  9857. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9858. 1641, 1642, 1641, 1641, 1643, 1644, 1644, 1644,
  9859. 1645, 1, 1646, 1, 1, 1, 1647, 1,
  9860. 1, 1, 1, 1, 1, 1, 1, 1,
  9861. 1, 1, 1, 1, 1, 1, 1, 1,
  9862. 1, 1646, 1637, 228, 1637, 1637, 1637, 1637,
  9863. 1637, 1648, 1, 1637, 1637, 1, 1637, 1,
  9864. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9865. 1637, 1637, 1637, 1, 1, 199, 1637, 1,
  9866. 1637, 1, 1637, 1637, 1637, 1637, 1637, 1637,
  9867. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9868. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9869. 1637, 1637, 1637, 1637, 1, 1, 1, 1637,
  9870. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9871. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9872. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9873. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9874. 1, 1, 1, 1, 1, 1, 1, 1,
  9875. 1, 1, 1, 1, 1, 1, 1, 1,
  9876. 1, 1, 1, 1, 1, 1, 1, 1,
  9877. 1, 1, 1, 1, 1, 1, 1, 1,
  9878. 1, 1, 1, 1, 1, 1, 1, 1,
  9879. 1, 1, 1, 1, 1, 1, 1, 1,
  9880. 1, 1, 1, 1, 1, 1, 1, 1,
  9881. 1, 1, 1, 1, 1, 1, 1, 1,
  9882. 1, 1, 1, 1639, 1639, 1639, 1639, 1639,
  9883. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9884. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9885. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9886. 1639, 1640, 1641, 1641, 1641, 1641, 1641, 1641,
  9887. 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1641,
  9888. 1641, 1643, 1644, 1644, 1644, 1645, 1, 1649,
  9889. 1, 1646, 1, 1, 1, 1, 1, 1,
  9890. 1, 1, 1, 1, 1, 1, 1, 1,
  9891. 1, 1, 1, 1, 1, 1, 1, 1,
  9892. 1646, 1, 1622, 1, 1, 1, 1623, 1,
  9893. 1, 1, 1, 1, 1, 1, 1, 1,
  9894. 1, 1, 1, 1, 1, 1, 1, 1,
  9895. 1, 1622, 1637, 228, 1637, 1637, 1637, 1637,
  9896. 1637, 1624, 1, 1637, 1637, 1625, 1637, 1627,
  9897. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9898. 1637, 1637, 1637, 1, 767, 216, 1637, 1,
  9899. 1637, 246, 1637, 1637, 1637, 1637, 1637, 1637,
  9900. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9901. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9902. 1637, 1637, 1637, 1637, 1, 1, 1, 1637,
  9903. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9904. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9905. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9906. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9907. 1, 1, 1, 1, 1, 1, 1, 1,
  9908. 1, 1, 1, 1, 1, 1, 1, 1,
  9909. 1, 1, 1, 1, 1, 1, 1, 1,
  9910. 1, 1, 1, 1, 1, 1, 1, 1,
  9911. 1, 1, 1, 1, 1, 1, 1, 1,
  9912. 1, 1, 1, 1, 1, 1, 1, 1,
  9913. 1, 1, 1, 1, 1, 1, 1, 1,
  9914. 1, 1, 1, 1, 1, 1, 1, 1,
  9915. 1, 1, 1, 1639, 1639, 1639, 1639, 1639,
  9916. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9917. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9918. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9919. 1639, 1640, 1641, 1641, 1641, 1641, 1641, 1641,
  9920. 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1641,
  9921. 1641, 1643, 1644, 1644, 1644, 1645, 1, 1637,
  9922. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9923. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9924. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9925. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9926. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9927. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9928. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
  9929. 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1,
  9930. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9931. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9932. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9933. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9934. 1, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9935. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9936. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9937. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9938. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9939. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9940. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9941. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9942. 1639, 1, 1639, 1639, 1639, 1639, 1639, 1639,
  9943. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9944. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9945. 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
  9946. 1639, 1639, 1, 1641, 1641, 1641, 1641, 1641,
  9947. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9948. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9949. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9950. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9951. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9952. 1641, 1641, 1641, 1, 1641, 1641, 1641, 1641,
  9953. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9954. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9955. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9956. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9957. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9958. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9959. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9960. 1641, 1641, 1641, 1641, 1, 1641, 1641, 1641,
  9961. 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
  9962. 1641, 1641, 1641, 1641, 1641, 1, 1650, 1,
  9963. 1, 1, 1651, 1, 1, 1, 1, 1,
  9964. 1, 1, 1, 1, 1, 1, 1, 1,
  9965. 1, 1, 1, 1, 1, 1650, 1652, 274,
  9966. 1652, 1652, 1652, 1652, 1652, 1653, 1, 1652,
  9967. 1652, 1, 1652, 1, 1652, 1652, 1652, 1652,
  9968. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1,
  9969. 1, 295, 1652, 1, 1652, 1, 1652, 1652,
  9970. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9971. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9972. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9973. 1, 1, 1, 1652, 1652, 1652, 1652, 1652,
  9974. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9975. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9976. 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
  9977. 1652, 1652, 1652, 1652, 1, 1, 1, 1,
  9978. 1, 1, 1, 1, 1, 1, 1, 1,
  9979. 1, 1, 1, 1, 1, 1, 1, 1,
  9980. 1, 1, 1, 1, 1, 1, 1, 1,
  9981. 1, 1, 1, 1, 1, 1, 1, 1,
  9982. 1, 1, 1, 1, 1, 1, 1, 1,
  9983. 1, 1, 1, 1, 1, 1, 1, 1,
  9984. 1, 1, 1, 1, 1, 1, 1, 1,
  9985. 1, 1, 1, 1, 1, 1, 1, 1654,
  9986. 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
  9987. 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
  9988. 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
  9989. 1654, 1654, 1654, 1654, 1654, 1655, 1656, 1656,
  9990. 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
  9991. 1656, 1656, 1657, 1656, 1656, 1658, 1659, 1659,
  9992. 1659, 1660, 1, 227, 227, 227, 227, 227,
  9993. 227, 227, 227, 227, 227, 227, 227, 227,
  9994. 227, 227, 227, 227, 227, 227, 227, 227,
  9995. 227, 227, 227, 227, 227, 227, 227, 227,
  9996. 227, 227, 227, 227, 227, 227, 227, 227,
  9997. 227, 227, 227, 227, 227, 227, 227, 227,
  9998. 227, 227, 227, 227, 227, 227, 227, 227,
  9999. 227, 227, 227, 227, 227, 227, 227, 227,
  10000. 227, 227, 227, 1, 234, 234, 234, 234,
  10001. 234, 234, 234, 234, 234, 234, 234, 234,
  10002. 234, 234, 234, 234, 234, 234, 234, 234,
  10003. 234, 234, 234, 234, 234, 234, 234, 234,
  10004. 234, 234, 234, 234, 1, 234, 234, 234,
  10005. 234, 234, 234, 234, 234, 234, 234, 234,
  10006. 234, 234, 234, 234, 234, 234, 234, 234,
  10007. 234, 234, 234, 234, 234, 234, 234, 234,
  10008. 234, 234, 234, 234, 234, 234, 234, 234,
  10009. 234, 234, 234, 234, 234, 234, 234, 234,
  10010. 234, 234, 234, 234, 234, 234, 234, 234,
  10011. 234, 234, 234, 234, 234, 234, 234, 234,
  10012. 234, 234, 234, 234, 234, 1, 234, 234,
  10013. 234, 234, 234, 234, 234, 234, 234, 234,
  10014. 234, 234, 234, 234, 234, 234, 234, 234,
  10015. 234, 234, 234, 234, 234, 234, 234, 234,
  10016. 234, 234, 234, 234, 234, 234, 1, 236,
  10017. 236, 236, 236, 236, 236, 236, 236, 236,
  10018. 236, 236, 236, 236, 236, 236, 236, 236,
  10019. 236, 236, 236, 236, 236, 236, 236, 236,
  10020. 236, 236, 236, 236, 236, 236, 236, 236,
  10021. 236, 236, 236, 236, 236, 236, 236, 236,
  10022. 236, 236, 236, 236, 236, 236, 236, 1,
  10023. 236, 236, 236, 236, 236, 236, 236, 236,
  10024. 236, 236, 236, 236, 236, 236, 236, 236,
  10025. 236, 236, 236, 236, 236, 236, 236, 236,
  10026. 236, 236, 236, 236, 236, 236, 236, 236,
  10027. 236, 236, 236, 236, 236, 236, 236, 236,
  10028. 236, 236, 236, 236, 236, 236, 236, 236,
  10029. 236, 236, 236, 236, 236, 236, 236, 236,
  10030. 236, 236, 236, 236, 236, 236, 236, 236,
  10031. 1, 236, 236, 236, 236, 236, 236, 236,
  10032. 236, 236, 236, 236, 236, 236, 236, 236,
  10033. 236, 1, 1661, 1661, 1661, 1661, 1661, 1661,
  10034. 1661, 1661, 1662, 1, 1661, 1661, 1663, 1661,
  10035. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10036. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10037. 1661, 1662, 1661, 250, 1661, 1661, 1661, 1661,
  10038. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10039. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10040. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10041. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10042. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10043. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10044. 1661, 1661, 1661, 1661, 1661, 1664, 1661, 1661,
  10045. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10046. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10047. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10048. 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
  10049. 1661, 1, 1, 1, 1, 1, 1, 1,
  10050. 1, 1, 1, 1, 1, 1, 1, 1,
  10051. 1, 1, 1, 1, 1, 1, 1, 1,
  10052. 1, 1, 1, 1, 1, 1, 1, 1,
  10053. 1, 1, 1, 1, 1, 1, 1, 1,
  10054. 1, 1, 1, 1, 1, 1, 1, 1,
  10055. 1, 1, 1, 1, 1, 1, 1, 1,
  10056. 1, 1, 1, 1, 1, 1, 1, 1,
  10057. 1, 1, 1, 1665, 1665, 1665, 1665, 1665,
  10058. 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
  10059. 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
  10060. 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
  10061. 1665, 1666, 1667, 1667, 1667, 1667, 1667, 1667,
  10062. 1667, 1667, 1667, 1667, 1667, 1667, 1668, 1667,
  10063. 1667, 1669, 1670, 1670, 1670, 1671, 1, 1672,
  10064. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10065. 1, 1672, 1672, 1673, 1672, 1672, 1672, 1672,
  10066. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10067. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10068. 1674, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10069. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10070. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10071. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10072. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10073. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10074. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10075. 1672, 1672, 1675, 1672, 1672, 1672, 1672, 1672,
  10076. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10077. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10078. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10079. 1672, 1672, 1672, 1672, 1672, 1672, 1, 1,
  10080. 1, 1, 1, 1, 1, 1, 1, 1,
  10081. 1, 1, 1, 1, 1, 1, 1, 1,
  10082. 1, 1, 1, 1, 1, 1, 1, 1,
  10083. 1, 1, 1, 1, 1, 1, 1, 1,
  10084. 1, 1, 1, 1, 1, 1, 1, 1,
  10085. 1, 1, 1, 1, 1, 1, 1, 1,
  10086. 1, 1, 1, 1, 1, 1, 1, 1,
  10087. 1, 1, 1, 1, 1, 1, 1, 1,
  10088. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10089. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10090. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10091. 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1678,
  10092. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10093. 1678, 1678, 1678, 1679, 1678, 1678, 1680, 1681,
  10094. 1681, 1681, 1682, 1, 1683, 1, 1672, 1,
  10095. 1, 1, 1, 1, 1, 1, 1, 1,
  10096. 1, 1, 1, 1, 1, 1, 1, 1,
  10097. 1, 1, 1, 1, 1, 1672, 1, 1684,
  10098. 1, 1, 1, 1685, 1, 1, 1, 1,
  10099. 1, 1, 1, 1, 1, 1, 1, 1,
  10100. 1, 1, 1, 1, 1, 1, 1684, 1686,
  10101. 1610, 1686, 1686, 1686, 1686, 1686, 1687, 1,
  10102. 1686, 1686, 1625, 1686, 1688, 1686, 1686, 1686,
  10103. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10104. 1, 767, 216, 1686, 1, 1686, 246, 1686,
  10105. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10106. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10107. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10108. 1686, 1, 1, 1, 1686, 1686, 1686, 1686,
  10109. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10110. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10111. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10112. 1686, 1686, 1686, 1686, 1686, 1, 1, 1,
  10113. 1, 1, 1, 1, 1, 1, 1, 1,
  10114. 1, 1, 1, 1, 1, 1, 1, 1,
  10115. 1, 1, 1, 1, 1, 1, 1, 1,
  10116. 1, 1, 1, 1, 1, 1, 1, 1,
  10117. 1, 1, 1, 1, 1, 1, 1, 1,
  10118. 1, 1, 1, 1, 1, 1, 1, 1,
  10119. 1, 1, 1, 1, 1, 1, 1, 1,
  10120. 1, 1, 1, 1, 1, 1, 1, 1,
  10121. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10122. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10123. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10124. 1689, 1689, 1689, 1689, 1689, 1689, 1690, 1691,
  10125. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10126. 1691, 1691, 1691, 1692, 1691, 1691, 1693, 1694,
  10127. 1694, 1694, 1695, 1, 1684, 1, 1, 1,
  10128. 1685, 1, 1, 1, 1, 1, 1, 1,
  10129. 1, 1, 1, 1, 1, 1, 1, 1,
  10130. 1, 1, 1, 1684, 227, 228, 227, 227,
  10131. 227, 227, 227, 1687, 1, 227, 227, 1625,
  10132. 227, 246, 227, 227, 227, 227, 227, 227,
  10133. 227, 227, 227, 227, 227, 1, 767, 216,
  10134. 227, 1, 227, 246, 227, 227, 227, 227,
  10135. 227, 227, 227, 227, 227, 227, 227, 227,
  10136. 227, 227, 227, 227, 227, 227, 227, 227,
  10137. 227, 227, 227, 227, 227, 227, 1, 1,
  10138. 1, 227, 227, 227, 227, 227, 227, 227,
  10139. 227, 227, 227, 227, 227, 227, 227, 227,
  10140. 227, 227, 227, 227, 227, 227, 227, 227,
  10141. 227, 227, 227, 227, 227, 227, 227, 227,
  10142. 227, 227, 1, 1, 1, 1, 1, 1,
  10143. 1, 1, 1, 1, 1, 1, 1, 1,
  10144. 1, 1, 1, 1, 1, 1, 1, 1,
  10145. 1, 1, 1, 1, 1, 1, 1, 1,
  10146. 1, 1, 1, 1, 1, 1, 1, 1,
  10147. 1, 1, 1, 1, 1, 1, 1, 1,
  10148. 1, 1, 1, 1, 1, 1, 1, 1,
  10149. 1, 1, 1, 1, 1, 1, 1, 1,
  10150. 1, 1, 1, 1, 1, 234, 234, 234,
  10151. 234, 234, 234, 234, 234, 234, 234, 234,
  10152. 234, 234, 234, 234, 234, 234, 234, 234,
  10153. 234, 234, 234, 234, 234, 234, 234, 234,
  10154. 234, 234, 234, 235, 236, 236, 236, 236,
  10155. 236, 236, 236, 236, 236, 236, 236, 236,
  10156. 237, 236, 236, 238, 239, 239, 239, 240,
  10157. 1, 1696, 1, 1697, 1, 1, 1, 1,
  10158. 1, 1, 1, 1, 1, 1, 1, 1,
  10159. 1, 1, 1, 1, 1, 1, 1, 1,
  10160. 1, 1, 1697, 1, 1698, 1, 1, 1,
  10161. 1699, 1, 1, 1, 1, 1, 1, 1,
  10162. 1, 1, 1, 1, 1, 1, 1, 1,
  10163. 1, 1, 1, 1698, 273, 274, 273, 273,
  10164. 273, 273, 273, 1700, 1, 273, 273, 1633,
  10165. 273, 276, 273, 273, 273, 273, 273, 273,
  10166. 273, 273, 273, 273, 273, 1, 776, 277,
  10167. 273, 1, 273, 276, 273, 273, 273, 273,
  10168. 273, 273, 273, 273, 273, 273, 273, 273,
  10169. 273, 273, 273, 273, 273, 273, 273, 273,
  10170. 273, 273, 273, 273, 273, 273, 1, 1,
  10171. 1, 273, 273, 273, 273, 273, 273, 273,
  10172. 273, 273, 273, 273, 273, 273, 273, 273,
  10173. 273, 273, 273, 273, 273, 273, 273, 273,
  10174. 273, 273, 273, 273, 273, 273, 273, 273,
  10175. 273, 273, 1, 1, 1, 1, 1, 1,
  10176. 1, 1, 1, 1, 1, 1, 1, 1,
  10177. 1, 1, 1, 1, 1, 1, 1, 1,
  10178. 1, 1, 1, 1, 1, 1, 1, 1,
  10179. 1, 1, 1, 1, 1, 1, 1, 1,
  10180. 1, 1, 1, 1, 1, 1, 1, 1,
  10181. 1, 1, 1, 1, 1, 1, 1, 1,
  10182. 1, 1, 1, 1, 1, 1, 1, 1,
  10183. 1, 1, 1, 1, 1, 278, 278, 278,
  10184. 278, 278, 278, 278, 278, 278, 278, 278,
  10185. 278, 278, 278, 278, 278, 278, 278, 278,
  10186. 278, 278, 278, 278, 278, 278, 278, 278,
  10187. 278, 278, 278, 279, 280, 280, 280, 280,
  10188. 280, 280, 280, 280, 280, 280, 280, 280,
  10189. 281, 280, 280, 282, 283, 283, 283, 284,
  10190. 1, 285, 1, 1, 1, 286, 1, 1,
  10191. 1, 1, 1, 1, 1, 1, 1, 1,
  10192. 1, 1, 1, 1, 1, 1, 1, 1,
  10193. 285, 1686, 1610, 1686, 1686, 1686, 1686, 1686,
  10194. 287, 1, 1686, 1686, 1, 1686, 1688, 1686,
  10195. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10196. 1686, 1686, 1, 1, 216, 1686, 1, 1686,
  10197. 246, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10198. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10199. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10200. 1686, 1686, 1686, 1, 1, 1, 1686, 1686,
  10201. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10202. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10203. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10204. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1,
  10205. 1, 1, 1, 1, 1, 1, 1, 1,
  10206. 1, 1, 1, 1, 1, 1, 1, 1,
  10207. 1, 1, 1, 1, 1, 1, 1, 1,
  10208. 1, 1, 1, 1, 1, 1, 1, 1,
  10209. 1, 1, 1, 1, 1, 1, 1, 1,
  10210. 1, 1, 1, 1, 1, 1, 1, 1,
  10211. 1, 1, 1, 1, 1, 1, 1, 1,
  10212. 1, 1, 1, 1, 1, 1, 1, 1,
  10213. 1, 1, 1689, 1689, 1689, 1689, 1689, 1689,
  10214. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10215. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10216. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10217. 1690, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10218. 1691, 1691, 1691, 1691, 1691, 1692, 1691, 1691,
  10219. 1693, 1694, 1694, 1694, 1695, 1, 1686, 1686,
  10220. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10221. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10222. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10223. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10224. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10225. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10226. 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
  10227. 1686, 1686, 1686, 1686, 1686, 1686, 1, 1689,
  10228. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10229. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10230. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10231. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1,
  10232. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10233. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10234. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10235. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10236. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10237. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10238. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10239. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10240. 1, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10241. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10242. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10243. 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
  10244. 1689, 1, 1691, 1691, 1691, 1691, 1691, 1691,
  10245. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10246. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10247. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10248. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10249. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10250. 1691, 1691, 1, 1691, 1691, 1691, 1691, 1691,
  10251. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10252. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10253. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10254. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10255. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10256. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10257. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10258. 1691, 1691, 1691, 1, 1691, 1691, 1691, 1691,
  10259. 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
  10260. 1691, 1691, 1691, 1691, 1, 1672, 1672, 1672,
  10261. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10262. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10263. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10264. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10265. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10266. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10267. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10268. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10269. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10270. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10271. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10272. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10273. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10274. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10275. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10276. 1672, 1672, 1672, 1672, 1672, 1, 1, 1,
  10277. 1, 1, 1, 1, 1, 1, 1, 1,
  10278. 1, 1, 1, 1, 1, 1, 1, 1,
  10279. 1, 1, 1, 1, 1, 1, 1, 1,
  10280. 1, 1, 1, 1, 1, 1, 1, 1,
  10281. 1, 1, 1, 1, 1, 1, 1, 1,
  10282. 1, 1, 1, 1, 1, 1, 1, 1,
  10283. 1, 1, 1, 1, 1, 1, 1, 1,
  10284. 1, 1, 1, 1, 1, 1, 1, 1676,
  10285. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10286. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10287. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10288. 1676, 1676, 1676, 1676, 1676, 1677, 1678, 1678,
  10289. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10290. 1678, 1678, 1679, 1678, 1678, 1680, 1681, 1681,
  10291. 1681, 1682, 1, 1672, 1672, 1672, 1672, 1672,
  10292. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10293. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10294. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10295. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10296. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10297. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10298. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10299. 1672, 1672, 1672, 1, 1676, 1676, 1676, 1676,
  10300. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10301. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10302. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10303. 1676, 1676, 1676, 1676, 1, 1676, 1676, 1676,
  10304. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10305. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10306. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10307. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10308. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10309. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10310. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10311. 1676, 1676, 1676, 1676, 1676, 1, 1676, 1676,
  10312. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10313. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10314. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10315. 1676, 1676, 1676, 1676, 1676, 1676, 1, 1678,
  10316. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10317. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10318. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10319. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10320. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10321. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1,
  10322. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10323. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10324. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10325. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10326. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10327. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10328. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10329. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10330. 1, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10331. 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
  10332. 1678, 1, 1672, 1672, 1672, 1672, 1672, 1672,
  10333. 1672, 1672, 1701, 1, 1672, 1672, 1702, 1672,
  10334. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10335. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10336. 1672, 1701, 1672, 261, 1672, 1672, 1672, 1672,
  10337. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10338. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10339. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10340. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10341. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10342. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10343. 1672, 1672, 1672, 1672, 1672, 1675, 1672, 1672,
  10344. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10345. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10346. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10347. 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
  10348. 1672, 1, 1, 1, 1, 1, 1, 1,
  10349. 1, 1, 1, 1, 1, 1, 1, 1,
  10350. 1, 1, 1, 1, 1, 1, 1, 1,
  10351. 1, 1, 1, 1, 1, 1, 1, 1,
  10352. 1, 1, 1, 1, 1, 1, 1, 1,
  10353. 1, 1, 1, 1, 1, 1, 1, 1,
  10354. 1, 1, 1, 1, 1, 1, 1, 1,
  10355. 1, 1, 1, 1, 1, 1, 1, 1,
  10356. 1, 1, 1, 1676, 1676, 1676, 1676, 1676,
  10357. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10358. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10359. 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
  10360. 1676, 1677, 1678, 1678, 1678, 1678, 1678, 1678,
  10361. 1678, 1678, 1678, 1678, 1678, 1678, 1679, 1678,
  10362. 1678, 1680, 1681, 1681, 1681, 1682, 1, 1703,
  10363. 1, 1701, 1, 1, 1, 1, 1, 1,
  10364. 1, 1, 1, 1, 1, 1, 1, 1,
  10365. 1, 1, 1, 1, 1, 1, 1, 1,
  10366. 1701, 1, 1635, 1, 1, 1, 1636, 1,
  10367. 1, 1, 1, 1, 1, 1, 1, 1,
  10368. 1, 1, 1, 1, 1, 1, 1, 1,
  10369. 1, 1635, 1609, 1610, 1609, 1609, 1609, 1609,
  10370. 1609, 1638, 1, 1609, 1609, 1, 1609, 1688,
  10371. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10372. 1609, 1609, 1609, 1, 1, 216, 1609, 1,
  10373. 1609, 246, 1609, 1609, 1609, 1609, 1609, 1609,
  10374. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10375. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10376. 1609, 1609, 1609, 1609, 1, 1, 1, 1609,
  10377. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10378. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10379. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10380. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10381. 1, 1, 1, 1, 1, 1, 1, 1,
  10382. 1, 1, 1, 1, 1, 1, 1, 1,
  10383. 1, 1, 1, 1, 1, 1, 1, 1,
  10384. 1, 1, 1, 1, 1, 1, 1, 1,
  10385. 1, 1, 1, 1, 1, 1, 1, 1,
  10386. 1, 1, 1, 1, 1, 1, 1, 1,
  10387. 1, 1, 1, 1, 1, 1, 1, 1,
  10388. 1, 1, 1, 1, 1, 1, 1, 1,
  10389. 1, 1, 1, 1614, 1614, 1614, 1614, 1614,
  10390. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10391. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10392. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10393. 1614, 1615, 1616, 1616, 1616, 1616, 1616, 1616,
  10394. 1616, 1616, 1616, 1616, 1616, 1616, 1617, 1616,
  10395. 1616, 1618, 1619, 1619, 1619, 1620, 1, 1609,
  10396. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10397. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10398. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10399. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10400. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10401. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10402. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609,
  10403. 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1,
  10404. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10405. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10406. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10407. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10408. 1, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10409. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10410. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10411. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10412. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10413. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10414. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10415. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10416. 1614, 1, 1614, 1614, 1614, 1614, 1614, 1614,
  10417. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10418. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10419. 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614,
  10420. 1614, 1614, 1, 1616, 1616, 1616, 1616, 1616,
  10421. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10422. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10423. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10424. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10425. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10426. 1616, 1616, 1616, 1, 1616, 1616, 1616, 1616,
  10427. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10428. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10429. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10430. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10431. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10432. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10433. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10434. 1616, 1616, 1616, 1616, 1, 1616, 1616, 1616,
  10435. 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616,
  10436. 1616, 1616, 1616, 1616, 1616, 1, 1704, 1,
  10437. 1, 1, 1705, 1, 1, 1, 1, 1,
  10438. 1, 1, 1, 1, 1, 1, 1, 1,
  10439. 1, 1, 1, 1, 1, 1704, 1706, 1707,
  10440. 1706, 1706, 1706, 1706, 1706, 1708, 1, 1706,
  10441. 1706, 1, 1706, 1709, 1706, 1706, 1706, 1706,
  10442. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1,
  10443. 1, 295, 1706, 1, 1706, 1, 1706, 1706,
  10444. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10445. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10446. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10447. 1710, 1, 1, 1706, 1706, 1706, 1706, 1706,
  10448. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10449. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10450. 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
  10451. 1706, 1706, 1706, 1706, 1, 1, 1, 1,
  10452. 1, 1, 1, 1, 1, 1, 1, 1,
  10453. 1, 1, 1, 1, 1, 1, 1, 1,
  10454. 1, 1, 1, 1, 1, 1, 1, 1,
  10455. 1, 1, 1, 1, 1, 1, 1, 1,
  10456. 1, 1, 1, 1, 1, 1, 1, 1,
  10457. 1, 1, 1, 1, 1, 1, 1, 1,
  10458. 1, 1, 1, 1, 1, 1, 1, 1,
  10459. 1, 1, 1, 1, 1, 1, 1, 1711,
  10460. 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
  10461. 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
  10462. 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
  10463. 1711, 1711, 1711, 1711, 1711, 1712, 1713, 1713,
  10464. 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
  10465. 1713, 1713, 1714, 1713, 1713, 1715, 1716, 1716,
  10466. 1716, 1717, 1, 1718, 1719, 1718, 1718, 1718,
  10467. 1718, 1718, 1, 1, 1718, 1718, 1, 1718,
  10468. 1612, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10469. 1718, 1718, 1718, 1718, 1, 1, 1, 1718,
  10470. 1, 1718, 1, 1718, 1718, 1718, 1718, 1718,
  10471. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10472. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10473. 1718, 1718, 1718, 1718, 1718, 1, 1, 1,
  10474. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10475. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10476. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10477. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10478. 1718, 1, 1, 1, 1, 1, 1, 1,
  10479. 1, 1, 1, 1, 1, 1, 1, 1,
  10480. 1, 1, 1, 1, 1, 1, 1, 1,
  10481. 1, 1, 1, 1, 1, 1, 1, 1,
  10482. 1, 1, 1, 1, 1, 1, 1, 1,
  10483. 1, 1, 1, 1, 1, 1, 1, 1,
  10484. 1, 1, 1, 1, 1, 1, 1, 1,
  10485. 1, 1, 1, 1, 1, 1, 1, 1,
  10486. 1, 1, 1, 1, 1720, 1720, 1720, 1720,
  10487. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10488. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10489. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10490. 1720, 1720, 1721, 1722, 1722, 1722, 1722, 1722,
  10491. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1723,
  10492. 1722, 1722, 1724, 1725, 1725, 1725, 1726, 1,
  10493. 1727, 1, 1, 1, 1728, 1, 1, 1,
  10494. 1, 1, 1, 1, 1, 1, 1, 1,
  10495. 1, 1, 1, 1, 1, 1, 1, 1727,
  10496. 1718, 1719, 1718, 1718, 1718, 1718, 1718, 1729,
  10497. 1, 1718, 1718, 1625, 1718, 1612, 1718, 1718,
  10498. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10499. 1718, 1, 767, 1, 1718, 1, 1718, 1,
  10500. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10501. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10502. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10503. 1718, 1718, 1, 1, 1, 1718, 1718, 1718,
  10504. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10505. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10506. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10507. 1718, 1718, 1718, 1718, 1718, 1718, 1, 1,
  10508. 1, 1, 1, 1, 1, 1, 1, 1,
  10509. 1, 1, 1, 1, 1, 1, 1, 1,
  10510. 1, 1, 1, 1, 1, 1, 1, 1,
  10511. 1, 1, 1, 1, 1, 1, 1, 1,
  10512. 1, 1, 1, 1, 1, 1, 1, 1,
  10513. 1, 1, 1, 1, 1, 1, 1, 1,
  10514. 1, 1, 1, 1, 1, 1, 1, 1,
  10515. 1, 1, 1, 1, 1, 1, 1, 1,
  10516. 1, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10517. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10518. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10519. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1721,
  10520. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10521. 1722, 1722, 1722, 1722, 1723, 1722, 1722, 1724,
  10522. 1725, 1725, 1725, 1726, 1, 1727, 1, 1,
  10523. 1, 1728, 1, 1, 1, 1, 1, 1,
  10524. 1, 1, 1, 1, 1, 1, 1, 1,
  10525. 1, 1, 1, 1, 1727, 1, 1, 1,
  10526. 1, 1, 1, 1, 1729, 1, 1, 1,
  10527. 1625, 1, 1, 1, 1, 1, 1, 1,
  10528. 1, 1, 1, 1, 1, 1, 1, 767,
  10529. 1, 1730, 1, 1727, 1, 1, 1, 1,
  10530. 1, 1, 1, 1, 1, 1, 1, 1,
  10531. 1, 1, 1, 1, 1, 1, 1, 1,
  10532. 1, 1, 1727, 1, 1731, 1, 1, 1,
  10533. 1732, 1, 1, 1, 1, 1, 1, 1,
  10534. 1, 1, 1, 1, 1, 1, 1, 1,
  10535. 1, 1, 1, 1731, 1, 1, 1, 1,
  10536. 1, 1, 1, 1733, 1, 1, 1, 1633,
  10537. 1, 1, 1, 1, 1, 1, 1, 1,
  10538. 1, 1, 1, 1, 1, 1, 776, 1,
  10539. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10540. 1719, 1, 1734, 1734, 1735, 1734, 1734, 1734,
  10541. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10542. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1719,
  10543. 1734, 1, 1734, 1734, 1734, 1734, 1734, 1734,
  10544. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10545. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10546. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10547. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10548. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10549. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10550. 1734, 1734, 1734, 1736, 1734, 1734, 1734, 1734,
  10551. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10552. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10553. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10554. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1,
  10555. 1, 1, 1, 1, 1, 1, 1, 1,
  10556. 1, 1, 1, 1, 1, 1, 1, 1,
  10557. 1, 1, 1, 1, 1, 1, 1, 1,
  10558. 1, 1, 1, 1, 1, 1, 1, 1,
  10559. 1, 1, 1, 1, 1, 1, 1, 1,
  10560. 1, 1, 1, 1, 1, 1, 1, 1,
  10561. 1, 1, 1, 1, 1, 1, 1, 1,
  10562. 1, 1, 1, 1, 1, 1, 1, 1,
  10563. 1, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10564. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10565. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10566. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1738,
  10567. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10568. 1739, 1739, 1739, 1739, 1740, 1739, 1739, 1741,
  10569. 1742, 1742, 1742, 1743, 1, 1734, 1734, 1734,
  10570. 1734, 1734, 1734, 1734, 1734, 1734, 1, 1734,
  10571. 1734, 1744, 1734, 1734, 1734, 1734, 1734, 1734,
  10572. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10573. 1734, 1734, 1734, 1734, 1734, 1734, 1718, 1734,
  10574. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10575. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10576. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10577. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10578. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10579. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10580. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10581. 1736, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10582. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10583. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10584. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10585. 1734, 1734, 1734, 1734, 1, 1, 1, 1,
  10586. 1, 1, 1, 1, 1, 1, 1, 1,
  10587. 1, 1, 1, 1, 1, 1, 1, 1,
  10588. 1, 1, 1, 1, 1, 1, 1, 1,
  10589. 1, 1, 1, 1, 1, 1, 1, 1,
  10590. 1, 1, 1, 1, 1, 1, 1, 1,
  10591. 1, 1, 1, 1, 1, 1, 1, 1,
  10592. 1, 1, 1, 1, 1, 1, 1, 1,
  10593. 1, 1, 1, 1, 1, 1, 1737, 1737,
  10594. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10595. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10596. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10597. 1737, 1737, 1737, 1737, 1738, 1739, 1739, 1739,
  10598. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10599. 1739, 1740, 1739, 1739, 1741, 1742, 1742, 1742,
  10600. 1743, 1, 1745, 1, 1734, 1, 1, 1,
  10601. 1, 1, 1, 1, 1, 1, 1, 1,
  10602. 1, 1, 1, 1, 1, 1, 1, 1,
  10603. 1, 1, 1, 1734, 1, 1734, 1734, 1734,
  10604. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10605. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10606. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10607. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10608. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10609. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10610. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10611. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10612. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10613. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10614. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10615. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10616. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10617. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10618. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10619. 1734, 1734, 1734, 1734, 1734, 1, 1, 1,
  10620. 1, 1, 1, 1, 1, 1, 1, 1,
  10621. 1, 1, 1, 1, 1, 1, 1, 1,
  10622. 1, 1, 1, 1, 1, 1, 1, 1,
  10623. 1, 1, 1, 1, 1, 1, 1, 1,
  10624. 1, 1, 1, 1, 1, 1, 1, 1,
  10625. 1, 1, 1, 1, 1, 1, 1, 1,
  10626. 1, 1, 1, 1, 1, 1, 1, 1,
  10627. 1, 1, 1, 1, 1, 1, 1, 1737,
  10628. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10629. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10630. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10631. 1737, 1737, 1737, 1737, 1737, 1738, 1739, 1739,
  10632. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10633. 1739, 1739, 1740, 1739, 1739, 1741, 1742, 1742,
  10634. 1742, 1743, 1, 1734, 1734, 1734, 1734, 1734,
  10635. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10636. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10637. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10638. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10639. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10640. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10641. 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734,
  10642. 1734, 1734, 1734, 1, 1737, 1737, 1737, 1737,
  10643. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10644. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10645. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10646. 1737, 1737, 1737, 1737, 1, 1737, 1737, 1737,
  10647. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10648. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10649. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10650. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10651. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10652. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10653. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10654. 1737, 1737, 1737, 1737, 1737, 1, 1737, 1737,
  10655. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10656. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10657. 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737,
  10658. 1737, 1737, 1737, 1737, 1737, 1737, 1, 1739,
  10659. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10660. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10661. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10662. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10663. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10664. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1,
  10665. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10666. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10667. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10668. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10669. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10670. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10671. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10672. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10673. 1, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10674. 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
  10675. 1739, 1, 1746, 1, 1719, 1, 1, 1,
  10676. 1, 1, 1, 1, 1, 1, 1, 1,
  10677. 1, 1, 1, 1, 1, 1, 1, 1,
  10678. 1, 1, 1, 1719, 1, 1718, 1718, 1718,
  10679. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10680. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10681. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10682. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10683. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10684. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10685. 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718,
  10686. 1718, 1718, 1718, 1718, 1718, 1, 1720, 1720,
  10687. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10688. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10689. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10690. 1720, 1720, 1720, 1720, 1720, 1720, 1, 1720,
  10691. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10692. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10693. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10694. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10695. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10696. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10697. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10698. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1,
  10699. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10700. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10701. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10702. 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
  10703. 1, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10704. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10705. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10706. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10707. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10708. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10709. 1722, 1, 1722, 1722, 1722, 1722, 1722, 1722,
  10710. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10711. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10712. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10713. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10714. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10715. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10716. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10717. 1722, 1722, 1, 1722, 1722, 1722, 1722, 1722,
  10718. 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
  10719. 1722, 1722, 1722, 1, 1613, 1613, 1613, 1613,
  10720. 1613, 1613, 1613, 1613, 1613, 1, 1613, 1613,
  10721. 1747, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10722. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10723. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10724. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10725. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10726. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10727. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10728. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10729. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10730. 1613, 1613, 1613, 1613, 1613, 1613, 1, 1748,
  10731. 1727, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10732. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10733. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10734. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10735. 1613, 1613, 1613, 1, 1, 1, 1, 1,
  10736. 1, 1, 1, 1, 1, 1, 1, 1,
  10737. 1, 1, 1, 1, 1, 1, 1, 1,
  10738. 1, 1, 1, 1, 1, 1, 1, 1,
  10739. 1, 1, 1, 1, 1, 1, 1, 1,
  10740. 1, 1, 1, 1, 1, 1, 1, 1,
  10741. 1, 1, 1, 1, 1, 1, 1, 1,
  10742. 1, 1, 1, 1, 1, 1, 1, 1,
  10743. 1, 1, 1, 1, 1, 1749, 1749, 1749,
  10744. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10745. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10746. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10747. 1749, 1749, 1749, 1750, 1751, 1751, 1751, 1751,
  10748. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10749. 1752, 1751, 1751, 1753, 1754, 1754, 1754, 1755,
  10750. 1, 1756, 1, 1613, 1, 1, 1, 1,
  10751. 1, 1, 1, 1, 1, 1, 1, 1,
  10752. 1, 1, 1, 1, 1, 1, 1, 1,
  10753. 1, 1, 1613, 1, 1613, 1613, 1613, 1613,
  10754. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10755. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10756. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10757. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10758. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10759. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10760. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10761. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10762. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10763. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10764. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10765. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10766. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10767. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10768. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10769. 1613, 1613, 1613, 1613, 1, 1, 1, 1,
  10770. 1, 1, 1, 1, 1, 1, 1, 1,
  10771. 1, 1, 1, 1, 1, 1, 1, 1,
  10772. 1, 1, 1, 1, 1, 1, 1, 1,
  10773. 1, 1, 1, 1, 1, 1, 1, 1,
  10774. 1, 1, 1, 1, 1, 1, 1, 1,
  10775. 1, 1, 1, 1, 1, 1, 1, 1,
  10776. 1, 1, 1, 1, 1, 1, 1, 1,
  10777. 1, 1, 1, 1, 1, 1, 1749, 1749,
  10778. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10779. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10780. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10781. 1749, 1749, 1749, 1749, 1750, 1751, 1751, 1751,
  10782. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10783. 1751, 1752, 1751, 1751, 1753, 1754, 1754, 1754,
  10784. 1755, 1, 1613, 1613, 1613, 1613, 1613, 1613,
  10785. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10786. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10787. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10788. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10789. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10790. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10791. 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
  10792. 1613, 1613, 1, 1749, 1749, 1749, 1749, 1749,
  10793. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10794. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10795. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10796. 1749, 1749, 1749, 1, 1749, 1749, 1749, 1749,
  10797. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10798. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10799. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10800. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10801. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10802. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10803. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10804. 1749, 1749, 1749, 1749, 1, 1749, 1749, 1749,
  10805. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10806. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10807. 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
  10808. 1749, 1749, 1749, 1749, 1749, 1, 1751, 1751,
  10809. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10810. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10811. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10812. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10813. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10814. 1751, 1751, 1751, 1751, 1751, 1751, 1, 1751,
  10815. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10816. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10817. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10818. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10819. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10820. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10821. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10822. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1,
  10823. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10824. 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
  10825. 1, 438, 438, 438, 438, 438, 438, 438,
  10826. 438, 438, 438, 438, 438, 438, 438, 438,
  10827. 438, 438, 438, 438, 438, 438, 438, 438,
  10828. 438, 438, 438, 438, 438, 438, 438, 438,
  10829. 438, 438, 438, 438, 438, 438, 438, 438,
  10830. 438, 438, 438, 438, 438, 438, 438, 438,
  10831. 438, 438, 438, 438, 438, 438, 438, 438,
  10832. 438, 438, 438, 438, 438, 438, 438, 438,
  10833. 438, 1, 441, 441, 441, 441, 441, 441,
  10834. 441, 441, 441, 441, 441, 441, 441, 441,
  10835. 441, 441, 441, 441, 441, 441, 441, 441,
  10836. 441, 441, 441, 441, 441, 441, 441, 441,
  10837. 441, 441, 1, 441, 441, 441, 441, 441,
  10838. 441, 441, 441, 441, 441, 441, 441, 441,
  10839. 441, 441, 441, 441, 441, 441, 441, 441,
  10840. 441, 441, 441, 441, 441, 441, 441, 441,
  10841. 441, 441, 441, 441, 441, 441, 441, 441,
  10842. 441, 441, 441, 441, 441, 441, 441, 441,
  10843. 441, 441, 441, 441, 441, 441, 441, 441,
  10844. 441, 441, 441, 441, 441, 441, 441, 441,
  10845. 441, 441, 441, 1, 441, 441, 441, 441,
  10846. 441, 441, 441, 441, 441, 441, 441, 441,
  10847. 441, 441, 441, 441, 441, 441, 441, 441,
  10848. 441, 441, 441, 441, 441, 441, 441, 441,
  10849. 441, 441, 441, 441, 1, 443, 443, 443,
  10850. 443, 443, 443, 443, 443, 443, 443, 443,
  10851. 443, 443, 443, 443, 443, 443, 443, 443,
  10852. 443, 443, 443, 443, 443, 443, 443, 443,
  10853. 443, 443, 443, 443, 443, 443, 443, 443,
  10854. 443, 443, 443, 443, 443, 443, 443, 443,
  10855. 443, 443, 443, 443, 443, 1, 443, 443,
  10856. 443, 443, 443, 443, 443, 443, 443, 443,
  10857. 443, 443, 443, 443, 443, 443, 443, 443,
  10858. 443, 443, 443, 443, 443, 443, 443, 443,
  10859. 443, 443, 443, 443, 443, 443, 443, 443,
  10860. 443, 443, 443, 443, 443, 443, 443, 443,
  10861. 443, 443, 443, 443, 443, 443, 443, 443,
  10862. 443, 443, 443, 443, 443, 443, 443, 443,
  10863. 443, 443, 443, 443, 443, 443, 1, 443,
  10864. 443, 443, 443, 443, 443, 443, 443, 443,
  10865. 443, 443, 443, 443, 443, 443, 443, 1,
  10866. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10867. 1757, 1, 1757, 1757, 1758, 1757, 1757, 1757,
  10868. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10869. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10870. 1757, 1759, 1757, 1757, 1757, 1757, 1757, 1757,
  10871. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10872. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10873. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10874. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10875. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10876. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10877. 1757, 1757, 1757, 1760, 1757, 1757, 1757, 1757,
  10878. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10879. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10880. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
  10881. 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1,
  10882. 1, 1, 1, 1, 1, 1, 1, 1,
  10883. 1, 1, 1, 1, 1, 1, 1, 1,
  10884. 1, 1, 1, 1, 1, 1, 1, 1,
  10885. 1, 1, 1, 1, 1, 1, 1, 1,
  10886. 1, 1, 1, 1, 1, 1, 1, 1,
  10887. 1, 1, 1, 1, 1, 1, 1, 1,
  10888. 1, 1, 1, 1, 1, 1, 1, 1,
  10889. 1, 1, 1, 1, 1, 1, 1, 1,
  10890. 1, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
  10891. 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
  10892. 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
  10893. 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1762,
  10894. 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
  10895. 1763, 1763, 1763, 1763, 1764, 1763, 1763, 1765,
  10896. 1766, 1766, 1766, 1767, 1, 1768, 1768, 1768,
  10897. 1768, 1768, 1768, 1768, 1768, 1768, 1, 1768,
  10898. 1768, 1769, 1768, 1768, 1768, 1768, 1768, 1768,
  10899. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10900. 1768, 1768, 1768, 1768, 1768, 1768, 1770, 1768,
  10901. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10902. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10903. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10904. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10905. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10906. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10907. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10908. 1771, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10909. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10910. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10911. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10912. 1768, 1768, 1768, 1768, 1, 1, 1, 1,
  10913. 1, 1, 1, 1, 1, 1, 1, 1,
  10914. 1, 1, 1, 1, 1, 1, 1, 1,
  10915. 1, 1, 1, 1, 1, 1, 1, 1,
  10916. 1, 1, 1, 1, 1, 1, 1, 1,
  10917. 1, 1, 1, 1, 1, 1, 1, 1,
  10918. 1, 1, 1, 1, 1, 1, 1, 1,
  10919. 1, 1, 1, 1, 1, 1, 1, 1,
  10920. 1, 1, 1, 1, 1, 1, 1772, 1772,
  10921. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10922. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10923. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10924. 1772, 1772, 1772, 1772, 1773, 1774, 1774, 1774,
  10925. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10926. 1774, 1775, 1774, 1774, 1776, 1777, 1777, 1777,
  10927. 1778, 1, 1779, 1, 1768, 1, 1, 1,
  10928. 1, 1, 1, 1, 1, 1, 1, 1,
  10929. 1, 1, 1, 1, 1, 1, 1, 1,
  10930. 1, 1, 1, 1768, 1, 1768, 1768, 1768,
  10931. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10932. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10933. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10934. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10935. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10936. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10937. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10938. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10939. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10940. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10941. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10942. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10943. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10944. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10945. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10946. 1768, 1768, 1768, 1768, 1768, 1, 1, 1,
  10947. 1, 1, 1, 1, 1, 1, 1, 1,
  10948. 1, 1, 1, 1, 1, 1, 1, 1,
  10949. 1, 1, 1, 1, 1, 1, 1, 1,
  10950. 1, 1, 1, 1, 1, 1, 1, 1,
  10951. 1, 1, 1, 1, 1, 1, 1, 1,
  10952. 1, 1, 1, 1, 1, 1, 1, 1,
  10953. 1, 1, 1, 1, 1, 1, 1, 1,
  10954. 1, 1, 1, 1, 1, 1, 1, 1772,
  10955. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10956. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10957. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10958. 1772, 1772, 1772, 1772, 1772, 1773, 1774, 1774,
  10959. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10960. 1774, 1774, 1775, 1774, 1774, 1776, 1777, 1777,
  10961. 1777, 1778, 1, 1768, 1768, 1768, 1768, 1768,
  10962. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10963. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10964. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10965. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10966. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10967. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10968. 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
  10969. 1768, 1768, 1768, 1, 1772, 1772, 1772, 1772,
  10970. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10971. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10972. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10973. 1772, 1772, 1772, 1772, 1, 1772, 1772, 1772,
  10974. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10975. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10976. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10977. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10978. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10979. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10980. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10981. 1772, 1772, 1772, 1772, 1772, 1, 1772, 1772,
  10982. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10983. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10984. 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
  10985. 1772, 1772, 1772, 1772, 1772, 1772, 1, 1774,
  10986. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10987. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10988. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10989. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10990. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10991. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1,
  10992. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10993. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10994. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10995. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10996. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10997. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10998. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  10999. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  11000. 1, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  11001. 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
  11002. 1774, 1, 1780, 1, 1, 1, 1781, 1,
  11003. 1, 1, 1, 1, 1, 1, 1, 1,
  11004. 1, 1, 1, 1, 1, 1, 1, 1,
  11005. 1, 1780, 1782, 1783, 1782, 1782, 1782, 1782,
  11006. 1782, 1784, 1, 1782, 1782, 1, 1782, 1,
  11007. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11008. 1782, 1782, 1782, 1, 1, 295, 1782, 1,
  11009. 1782, 1, 1782, 1782, 1782, 1782, 1782, 1782,
  11010. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11011. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11012. 1782, 1782, 1782, 1782, 1, 1, 1, 1782,
  11013. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11014. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11015. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11016. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11017. 1, 1, 1, 1, 1, 1, 1, 1,
  11018. 1, 1, 1, 1, 1, 1, 1, 1,
  11019. 1, 1, 1, 1, 1, 1, 1, 1,
  11020. 1, 1, 1, 1, 1, 1, 1, 1,
  11021. 1, 1, 1, 1, 1, 1, 1, 1,
  11022. 1, 1, 1, 1, 1, 1, 1, 1,
  11023. 1, 1, 1, 1, 1, 1, 1, 1,
  11024. 1, 1, 1, 1, 1, 1, 1, 1,
  11025. 1, 1, 1, 1785, 1785, 1785, 1785, 1785,
  11026. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11027. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11028. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11029. 1785, 1786, 1787, 1787, 1787, 1787, 1787, 1787,
  11030. 1787, 1787, 1787, 1787, 1787, 1787, 1788, 1787,
  11031. 1787, 1789, 1790, 1790, 1790, 1791, 1, 1792,
  11032. 1, 1, 1, 1793, 1, 1, 1, 1,
  11033. 1, 1, 1, 1, 1, 1, 1, 1,
  11034. 1, 1, 1, 1, 1, 1, 1792, 409,
  11035. 211, 409, 409, 409, 409, 409, 1794, 1,
  11036. 409, 409, 213, 409, 1795, 409, 409, 409,
  11037. 409, 409, 409, 409, 409, 409, 409, 409,
  11038. 1, 215, 216, 409, 1, 409, 217, 409,
  11039. 409, 409, 409, 409, 409, 409, 409, 409,
  11040. 409, 409, 409, 409, 409, 409, 409, 409,
  11041. 409, 409, 409, 409, 409, 409, 409, 409,
  11042. 409, 1, 1, 1, 409, 409, 409, 409,
  11043. 409, 409, 409, 409, 409, 409, 409, 409,
  11044. 409, 409, 409, 409, 409, 409, 409, 409,
  11045. 409, 409, 409, 409, 409, 409, 409, 409,
  11046. 409, 409, 409, 409, 409, 1, 1, 1,
  11047. 1, 1, 1, 1, 1, 1, 1, 1,
  11048. 1, 1, 1, 1, 1, 1, 1, 1,
  11049. 1, 1, 1, 1, 1, 1, 1, 1,
  11050. 1, 1, 1, 1, 1, 1, 1, 1,
  11051. 1, 1, 1, 1, 1, 1, 1, 1,
  11052. 1, 1, 1, 1, 1, 1, 1, 1,
  11053. 1, 1, 1, 1, 1, 1, 1, 1,
  11054. 1, 1, 1, 1, 1, 1, 1, 1,
  11055. 414, 414, 414, 414, 414, 414, 414, 414,
  11056. 414, 414, 414, 414, 414, 414, 414, 414,
  11057. 414, 414, 414, 414, 414, 414, 414, 414,
  11058. 414, 414, 414, 414, 414, 414, 415, 416,
  11059. 416, 416, 416, 416, 416, 416, 416, 416,
  11060. 416, 416, 416, 417, 416, 416, 418, 419,
  11061. 419, 419, 420, 1, 1796, 1, 1, 1,
  11062. 1797, 1, 1, 1, 1, 1, 1, 1,
  11063. 1, 1, 1, 1, 1, 1, 1, 1,
  11064. 1, 1, 1, 1796, 227, 228, 227, 227,
  11065. 227, 227, 227, 1798, 1, 227, 227, 230,
  11066. 227, 246, 227, 227, 227, 227, 227, 227,
  11067. 227, 227, 227, 227, 227, 1, 232, 216,
  11068. 227, 1, 227, 233, 227, 227, 227, 227,
  11069. 227, 227, 227, 227, 227, 227, 227, 227,
  11070. 227, 227, 227, 227, 227, 227, 227, 227,
  11071. 227, 227, 227, 227, 227, 227, 1, 1,
  11072. 1, 227, 227, 227, 227, 227, 227, 227,
  11073. 227, 227, 227, 227, 227, 227, 227, 227,
  11074. 227, 227, 227, 227, 227, 227, 227, 227,
  11075. 227, 227, 227, 227, 227, 227, 227, 227,
  11076. 227, 227, 1, 1, 1, 1, 1, 1,
  11077. 1, 1, 1, 1, 1, 1, 1, 1,
  11078. 1, 1, 1, 1, 1, 1, 1, 1,
  11079. 1, 1, 1, 1, 1, 1, 1, 1,
  11080. 1, 1, 1, 1, 1, 1, 1, 1,
  11081. 1, 1, 1, 1, 1, 1, 1, 1,
  11082. 1, 1, 1, 1, 1, 1, 1, 1,
  11083. 1, 1, 1, 1, 1, 1, 1, 1,
  11084. 1, 1, 1, 1, 1, 234, 234, 234,
  11085. 234, 234, 234, 234, 234, 234, 234, 234,
  11086. 234, 234, 234, 234, 234, 234, 234, 234,
  11087. 234, 234, 234, 234, 234, 234, 234, 234,
  11088. 234, 234, 234, 235, 236, 236, 236, 236,
  11089. 236, 236, 236, 236, 236, 236, 236, 236,
  11090. 237, 236, 236, 238, 239, 239, 239, 240,
  11091. 1, 1799, 1, 1800, 1, 1, 1, 1,
  11092. 1, 1, 1, 1, 1, 1, 1, 1,
  11093. 1, 1, 1, 1, 1, 1, 1, 1,
  11094. 1, 1, 1800, 1, 1801, 1, 1, 1,
  11095. 1802, 1, 1, 1, 1, 1, 1, 1,
  11096. 1, 1, 1, 1, 1, 1, 1, 1,
  11097. 1, 1, 1, 1801, 273, 274, 273, 273,
  11098. 273, 273, 273, 1803, 1, 273, 273, 1804,
  11099. 273, 276, 273, 273, 273, 273, 273, 273,
  11100. 273, 273, 273, 273, 273, 1, 947, 277,
  11101. 273, 1, 273, 1805, 273, 273, 273, 273,
  11102. 273, 273, 273, 273, 273, 273, 273, 273,
  11103. 273, 273, 273, 273, 273, 273, 273, 273,
  11104. 273, 273, 273, 273, 273, 273, 1, 1,
  11105. 1, 273, 273, 273, 273, 273, 273, 273,
  11106. 273, 273, 273, 273, 273, 273, 273, 273,
  11107. 273, 273, 273, 273, 273, 273, 273, 273,
  11108. 273, 273, 273, 273, 273, 273, 273, 273,
  11109. 273, 273, 1, 1, 1, 1, 1, 1,
  11110. 1, 1, 1, 1, 1, 1, 1, 1,
  11111. 1, 1, 1, 1, 1, 1, 1, 1,
  11112. 1, 1, 1, 1, 1, 1, 1, 1,
  11113. 1, 1, 1, 1, 1, 1, 1, 1,
  11114. 1, 1, 1, 1, 1, 1, 1, 1,
  11115. 1, 1, 1, 1, 1, 1, 1, 1,
  11116. 1, 1, 1, 1, 1, 1, 1, 1,
  11117. 1, 1, 1, 1, 1, 278, 278, 278,
  11118. 278, 278, 278, 278, 278, 278, 278, 278,
  11119. 278, 278, 278, 278, 278, 278, 278, 278,
  11120. 278, 278, 278, 278, 278, 278, 278, 278,
  11121. 278, 278, 278, 279, 280, 280, 280, 280,
  11122. 280, 280, 280, 280, 280, 280, 280, 280,
  11123. 281, 280, 280, 282, 283, 283, 283, 284,
  11124. 1, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11125. 1806, 1807, 1, 1806, 1806, 1808, 1806, 1806,
  11126. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11127. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11128. 1807, 1806, 250, 1806, 1806, 1806, 1806, 1806,
  11129. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11130. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11131. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11132. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11133. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11134. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11135. 1806, 1806, 1806, 1806, 1809, 1806, 1806, 1806,
  11136. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11137. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11138. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11139. 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
  11140. 1, 1, 1, 1, 1, 1, 1, 1,
  11141. 1, 1, 1, 1, 1, 1, 1, 1,
  11142. 1, 1, 1, 1, 1, 1, 1, 1,
  11143. 1, 1, 1, 1, 1, 1, 1, 1,
  11144. 1, 1, 1, 1, 1, 1, 1, 1,
  11145. 1, 1, 1, 1, 1, 1, 1, 1,
  11146. 1, 1, 1, 1, 1, 1, 1, 1,
  11147. 1, 1, 1, 1, 1, 1, 1, 1,
  11148. 1, 1, 1810, 1810, 1810, 1810, 1810, 1810,
  11149. 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
  11150. 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
  11151. 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
  11152. 1811, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
  11153. 1812, 1812, 1812, 1812, 1812, 1813, 1812, 1812,
  11154. 1814, 1815, 1815, 1815, 1816, 1, 1817, 1817,
  11155. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1,
  11156. 1817, 1817, 1818, 1817, 1817, 1817, 1817, 1817,
  11157. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11158. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1819,
  11159. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11160. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11161. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11162. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11163. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11164. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11165. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11166. 1817, 1820, 1817, 1817, 1817, 1817, 1817, 1817,
  11167. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11168. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11169. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11170. 1817, 1817, 1817, 1817, 1817, 1, 1, 1,
  11171. 1, 1, 1, 1, 1, 1, 1, 1,
  11172. 1, 1, 1, 1, 1, 1, 1, 1,
  11173. 1, 1, 1, 1, 1, 1, 1, 1,
  11174. 1, 1, 1, 1, 1, 1, 1, 1,
  11175. 1, 1, 1, 1, 1, 1, 1, 1,
  11176. 1, 1, 1, 1, 1, 1, 1, 1,
  11177. 1, 1, 1, 1, 1, 1, 1, 1,
  11178. 1, 1, 1, 1, 1, 1, 1, 1821,
  11179. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11180. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11181. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11182. 1821, 1821, 1821, 1821, 1821, 1822, 1823, 1823,
  11183. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11184. 1823, 1823, 1824, 1823, 1823, 1825, 1826, 1826,
  11185. 1826, 1827, 1, 1828, 1, 1817, 1, 1,
  11186. 1, 1, 1, 1, 1, 1, 1, 1,
  11187. 1, 1, 1, 1, 1, 1, 1, 1,
  11188. 1, 1, 1, 1, 1817, 1, 1817, 1817,
  11189. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11190. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11191. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11192. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11193. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11194. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11195. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11196. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11197. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11198. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11199. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11200. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11201. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11202. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11203. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11204. 1817, 1817, 1817, 1817, 1817, 1817, 1, 1,
  11205. 1, 1, 1, 1, 1, 1, 1, 1,
  11206. 1, 1, 1, 1, 1, 1, 1, 1,
  11207. 1, 1, 1, 1, 1, 1, 1, 1,
  11208. 1, 1, 1, 1, 1, 1, 1, 1,
  11209. 1, 1, 1, 1, 1, 1, 1, 1,
  11210. 1, 1, 1, 1, 1, 1, 1, 1,
  11211. 1, 1, 1, 1, 1, 1, 1, 1,
  11212. 1, 1, 1, 1, 1, 1, 1, 1,
  11213. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11214. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11215. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11216. 1821, 1821, 1821, 1821, 1821, 1821, 1822, 1823,
  11217. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11218. 1823, 1823, 1823, 1824, 1823, 1823, 1825, 1826,
  11219. 1826, 1826, 1827, 1, 1817, 1817, 1817, 1817,
  11220. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11221. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11222. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11223. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11224. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11225. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11226. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11227. 1817, 1817, 1817, 1817, 1, 1821, 1821, 1821,
  11228. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11229. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11230. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11231. 1821, 1821, 1821, 1821, 1821, 1, 1821, 1821,
  11232. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11233. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11234. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11235. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11236. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11237. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11238. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11239. 1821, 1821, 1821, 1821, 1821, 1821, 1, 1821,
  11240. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11241. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11242. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11243. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1,
  11244. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11245. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11246. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11247. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11248. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11249. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11250. 1, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11251. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11252. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11253. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11254. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11255. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11256. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11257. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11258. 1823, 1, 1823, 1823, 1823, 1823, 1823, 1823,
  11259. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
  11260. 1823, 1823, 1, 1817, 1817, 1817, 1817, 1817,
  11261. 1817, 1817, 1817, 1829, 1, 1817, 1817, 1830,
  11262. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11263. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11264. 1817, 1817, 1829, 1817, 261, 1817, 1817, 1817,
  11265. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11266. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11267. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11268. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11269. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11270. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11271. 1817, 1817, 1817, 1817, 1817, 1817, 1820, 1817,
  11272. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11273. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11274. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11275. 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
  11276. 1817, 1817, 1, 1, 1, 1, 1, 1,
  11277. 1, 1, 1, 1, 1, 1, 1, 1,
  11278. 1, 1, 1, 1, 1, 1, 1, 1,
  11279. 1, 1, 1, 1, 1, 1, 1, 1,
  11280. 1, 1, 1, 1, 1, 1, 1, 1,
  11281. 1, 1, 1, 1, 1, 1, 1, 1,
  11282. 1, 1, 1, 1, 1, 1, 1, 1,
  11283. 1, 1, 1, 1, 1, 1, 1, 1,
  11284. 1, 1, 1, 1, 1821, 1821, 1821, 1821,
  11285. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11286. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11287. 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
  11288. 1821, 1821, 1822, 1823, 1823, 1823, 1823, 1823,
  11289. 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824,
  11290. 1823, 1823, 1825, 1826, 1826, 1826, 1827, 1,
  11291. 1831, 1, 1829, 1, 1, 1, 1, 1,
  11292. 1, 1, 1, 1, 1, 1, 1, 1,
  11293. 1, 1, 1, 1, 1, 1, 1, 1,
  11294. 1, 1829, 1, 1832, 1, 1, 1, 1833,
  11295. 1, 1, 1, 1, 1, 1, 1, 1,
  11296. 1, 1, 1, 1, 1, 1, 1, 1,
  11297. 1, 1, 1832, 409, 211, 409, 409, 409,
  11298. 409, 409, 1834, 1, 409, 409, 213, 409,
  11299. 1795, 409, 409, 409, 409, 409, 409, 409,
  11300. 409, 409, 409, 409, 1, 215, 216, 409,
  11301. 1, 409, 217, 409, 409, 409, 409, 409,
  11302. 409, 409, 409, 409, 409, 409, 409, 409,
  11303. 409, 409, 409, 409, 409, 409, 409, 409,
  11304. 409, 409, 409, 409, 409, 1, 1, 1,
  11305. 409, 409, 409, 409, 409, 409, 409, 409,
  11306. 409, 409, 409, 409, 409, 409, 409, 409,
  11307. 409, 409, 409, 409, 409, 409, 409, 409,
  11308. 409, 409, 409, 409, 409, 409, 409, 409,
  11309. 409, 1, 1, 1, 1, 1, 1, 1,
  11310. 1, 1, 1, 1, 1, 1, 1, 1,
  11311. 1, 1, 1, 1, 1, 1, 1, 1,
  11312. 1, 1, 1, 1, 1, 1, 1, 1,
  11313. 1, 1, 1, 1, 1, 1, 1, 1,
  11314. 1, 1, 1, 1, 1, 1, 1, 1,
  11315. 1, 1, 1, 1, 1, 1, 1, 1,
  11316. 1, 1, 1, 1, 1, 1, 1, 1,
  11317. 1, 1, 1, 1, 414, 414, 414, 414,
  11318. 414, 414, 414, 414, 414, 414, 414, 414,
  11319. 414, 414, 414, 414, 414, 414, 414, 414,
  11320. 414, 414, 414, 414, 414, 414, 414, 414,
  11321. 414, 414, 415, 416, 416, 416, 416, 416,
  11322. 416, 416, 416, 416, 416, 416, 416, 417,
  11323. 416, 416, 418, 419, 419, 419, 420, 1,
  11324. 1835, 1, 1, 1, 1836, 1, 1, 1,
  11325. 1, 1, 1, 1, 1, 1, 1, 1,
  11326. 1, 1, 1, 1, 1, 1, 1, 1835,
  11327. 227, 228, 227, 227, 227, 227, 227, 1837,
  11328. 1, 227, 227, 230, 227, 1, 227, 227,
  11329. 227, 227, 227, 227, 227, 227, 227, 227,
  11330. 227, 1, 232, 199, 227, 1, 227, 1838,
  11331. 227, 227, 227, 227, 227, 227, 227, 227,
  11332. 227, 227, 227, 227, 227, 227, 227, 227,
  11333. 227, 227, 227, 227, 227, 227, 227, 227,
  11334. 227, 227, 1, 1, 1, 227, 227, 227,
  11335. 227, 227, 227, 227, 227, 227, 227, 227,
  11336. 227, 227, 227, 227, 227, 227, 227, 227,
  11337. 227, 227, 227, 227, 227, 227, 227, 227,
  11338. 227, 227, 227, 227, 227, 227, 1, 1,
  11339. 1, 1, 1, 1, 1, 1, 1, 1,
  11340. 1, 1, 1, 1, 1, 1, 1, 1,
  11341. 1, 1, 1, 1, 1, 1, 1, 1,
  11342. 1, 1, 1, 1, 1, 1, 1, 1,
  11343. 1, 1, 1, 1, 1, 1, 1, 1,
  11344. 1, 1, 1, 1, 1, 1, 1, 1,
  11345. 1, 1, 1, 1, 1, 1, 1, 1,
  11346. 1, 1, 1, 1, 1, 1, 1, 1,
  11347. 1, 234, 234, 234, 234, 234, 234, 234,
  11348. 234, 234, 234, 234, 234, 234, 234, 234,
  11349. 234, 234, 234, 234, 234, 234, 234, 234,
  11350. 234, 234, 234, 234, 234, 234, 234, 235,
  11351. 236, 236, 236, 236, 236, 236, 236, 236,
  11352. 236, 236, 236, 236, 237, 236, 236, 238,
  11353. 239, 239, 239, 240, 1, 1839, 1, 1835,
  11354. 1, 1, 1, 1, 1, 1, 1, 1,
  11355. 1, 1, 1, 1, 1, 1, 1, 1,
  11356. 1, 1, 1, 1, 1, 1, 1835, 1,
  11357. 1840, 1, 1, 1, 1841, 1, 1, 1,
  11358. 1, 1, 1, 1, 1, 1, 1, 1,
  11359. 1, 1, 1, 1, 1, 1, 1, 1840,
  11360. 273, 274, 273, 273, 273, 273, 273, 1842,
  11361. 1, 273, 273, 1804, 273, 1, 273, 273,
  11362. 273, 273, 273, 273, 273, 273, 273, 273,
  11363. 273, 1, 947, 295, 273, 1, 273, 1843,
  11364. 273, 273, 273, 273, 273, 273, 273, 273,
  11365. 273, 273, 273, 273, 273, 273, 273, 273,
  11366. 273, 273, 273, 273, 273, 273, 273, 273,
  11367. 273, 273, 1, 1, 1, 273, 273, 273,
  11368. 273, 273, 273, 273, 273, 273, 273, 273,
  11369. 273, 273, 273, 273, 273, 273, 273, 273,
  11370. 273, 273, 273, 273, 273, 273, 273, 273,
  11371. 273, 273, 273, 273, 273, 273, 1, 1,
  11372. 1, 1, 1, 1, 1, 1, 1, 1,
  11373. 1, 1, 1, 1, 1, 1, 1, 1,
  11374. 1, 1, 1, 1, 1, 1, 1, 1,
  11375. 1, 1, 1, 1, 1, 1, 1, 1,
  11376. 1, 1, 1, 1, 1, 1, 1, 1,
  11377. 1, 1, 1, 1, 1, 1, 1, 1,
  11378. 1, 1, 1, 1, 1, 1, 1, 1,
  11379. 1, 1, 1, 1, 1, 1, 1, 1,
  11380. 1, 278, 278, 278, 278, 278, 278, 278,
  11381. 278, 278, 278, 278, 278, 278, 278, 278,
  11382. 278, 278, 278, 278, 278, 278, 278, 278,
  11383. 278, 278, 278, 278, 278, 278, 278, 279,
  11384. 280, 280, 280, 280, 280, 280, 280, 280,
  11385. 280, 280, 280, 280, 281, 280, 280, 282,
  11386. 283, 283, 283, 284, 1, 1844, 1, 1,
  11387. 1, 1845, 1, 1, 1, 1, 1, 1,
  11388. 1, 1, 1, 1, 1, 1, 1, 1,
  11389. 1, 1, 1, 1, 1844, 1846, 1847, 1846,
  11390. 1846, 1846, 1846, 1846, 1848, 1, 1846, 1846,
  11391. 1, 1846, 1849, 1846, 1846, 1846, 1846, 1846,
  11392. 1846, 1846, 1846, 1846, 1846, 1846, 1, 1,
  11393. 1, 1846, 1, 1846, 1, 1846, 1846, 1846,
  11394. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
  11395. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
  11396. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1599,
  11397. 1, 1, 1846, 1846, 1846, 1846, 1846, 1846,
  11398. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
  11399. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
  11400. 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
  11401. 1846, 1846, 1846, 1, 1, 1, 1, 1,
  11402. 1, 1, 1, 1, 1, 1, 1, 1,
  11403. 1, 1, 1, 1, 1, 1, 1, 1,
  11404. 1, 1, 1, 1, 1, 1, 1, 1,
  11405. 1, 1, 1, 1, 1, 1, 1, 1,
  11406. 1, 1, 1, 1, 1, 1, 1, 1,
  11407. 1, 1, 1, 1, 1, 1, 1, 1,
  11408. 1, 1, 1, 1, 1, 1, 1, 1,
  11409. 1, 1, 1, 1, 1, 1, 1850, 1850,
  11410. 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850,
  11411. 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850,
  11412. 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850,
  11413. 1850, 1850, 1850, 1850, 1851, 1852, 1852, 1852,
  11414. 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
  11415. 1852, 1853, 1852, 1852, 1854, 1855, 1855, 1855,
  11416. 1856, 1, 1857, 1, 1, 1, 1858, 1,
  11417. 1, 1, 1, 1, 1, 1, 1, 1,
  11418. 1, 1, 1, 1, 1, 1, 1, 1,
  11419. 1, 1857, 1859, 1719, 1859, 1859, 1859, 1859,
  11420. 1859, 1860, 1, 1859, 1859, 1, 1859, 1612,
  11421. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11422. 1859, 1859, 1859, 1, 1, 1, 1859, 1,
  11423. 1859, 1, 1859, 1859, 1859, 1859, 1859, 1859,
  11424. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11425. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11426. 1859, 1859, 1859, 1859, 1613, 1, 1, 1859,
  11427. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11428. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11429. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11430. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11431. 1, 1, 1, 1, 1, 1, 1, 1,
  11432. 1, 1, 1, 1, 1, 1, 1, 1,
  11433. 1, 1, 1, 1, 1, 1, 1, 1,
  11434. 1, 1, 1, 1, 1, 1, 1, 1,
  11435. 1, 1, 1, 1, 1, 1, 1, 1,
  11436. 1, 1, 1, 1, 1, 1, 1, 1,
  11437. 1, 1, 1, 1, 1, 1, 1, 1,
  11438. 1, 1, 1, 1, 1, 1, 1, 1,
  11439. 1, 1, 1, 1861, 1861, 1861, 1861, 1861,
  11440. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11441. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11442. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11443. 1861, 1862, 1863, 1863, 1863, 1863, 1863, 1863,
  11444. 1863, 1863, 1863, 1863, 1863, 1863, 1864, 1863,
  11445. 1863, 1865, 1866, 1866, 1866, 1867, 1, 1868,
  11446. 1, 1857, 1, 1, 1, 1, 1, 1,
  11447. 1, 1, 1, 1, 1, 1, 1, 1,
  11448. 1, 1, 1, 1, 1, 1, 1, 1,
  11449. 1857, 1, 1869, 1, 1, 1, 1870, 1,
  11450. 1, 1, 1, 1, 1, 1, 1, 1,
  11451. 1, 1, 1, 1, 1, 1, 1, 1,
  11452. 1, 1869, 1859, 1719, 1859, 1859, 1859, 1859,
  11453. 1859, 1871, 1, 1859, 1859, 1625, 1859, 1872,
  11454. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11455. 1859, 1859, 1859, 1, 767, 1, 1859, 1,
  11456. 1859, 1, 1859, 1859, 1859, 1859, 1859, 1859,
  11457. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11458. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11459. 1859, 1859, 1859, 1859, 1, 1, 1, 1859,
  11460. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11461. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11462. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11463. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11464. 1, 1, 1, 1, 1, 1, 1, 1,
  11465. 1, 1, 1, 1, 1, 1, 1, 1,
  11466. 1, 1, 1, 1, 1, 1, 1, 1,
  11467. 1, 1, 1, 1, 1, 1, 1, 1,
  11468. 1, 1, 1, 1, 1, 1, 1, 1,
  11469. 1, 1, 1, 1, 1, 1, 1, 1,
  11470. 1, 1, 1, 1, 1, 1, 1, 1,
  11471. 1, 1, 1, 1, 1, 1, 1, 1,
  11472. 1, 1, 1, 1861, 1861, 1861, 1861, 1861,
  11473. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11474. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11475. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11476. 1861, 1862, 1863, 1863, 1863, 1863, 1863, 1863,
  11477. 1863, 1863, 1863, 1863, 1863, 1863, 1864, 1863,
  11478. 1863, 1865, 1866, 1866, 1866, 1867, 1, 1869,
  11479. 1, 1, 1, 1870, 1, 1, 1, 1,
  11480. 1, 1, 1, 1, 1, 1, 1, 1,
  11481. 1, 1, 1, 1, 1, 1, 1869, 1,
  11482. 1, 1, 1, 1, 1, 1, 1871, 1,
  11483. 1, 1, 1625, 1, 1873, 1, 1, 1,
  11484. 1, 1, 1, 1, 1, 1, 1, 1,
  11485. 1, 767, 1, 1874, 1, 1869, 1, 1,
  11486. 1, 1, 1, 1, 1, 1, 1, 1,
  11487. 1, 1, 1, 1, 1, 1, 1, 1,
  11488. 1, 1, 1, 1, 1869, 1, 1875, 1,
  11489. 1, 1, 1876, 1, 1, 1, 1, 1,
  11490. 1, 1, 1, 1, 1, 1, 1, 1,
  11491. 1, 1, 1, 1, 1, 1875, 1, 1,
  11492. 1, 1, 1, 1, 1, 1877, 1, 1,
  11493. 1, 1633, 1, 1878, 1, 1, 1, 1,
  11494. 1, 1, 1, 1, 1, 1, 1, 1,
  11495. 776, 1, 1873, 1, 1, 1, 1879, 1,
  11496. 1, 1, 1, 1, 1, 1, 1, 1,
  11497. 1, 1, 1, 1, 1, 1, 1, 1,
  11498. 1, 1873, 1880, 1, 1880, 1880, 1880, 1880,
  11499. 1880, 1881, 1, 1880, 1880, 1, 1880, 1,
  11500. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11501. 1880, 1880, 1880, 1, 1, 1, 1880, 1,
  11502. 1880, 1, 1880, 1880, 1880, 1880, 1880, 1880,
  11503. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11504. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11505. 1880, 1880, 1880, 1880, 1, 1, 1, 1880,
  11506. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11507. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11508. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11509. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11510. 1, 1, 1, 1, 1, 1, 1, 1,
  11511. 1, 1, 1, 1, 1, 1, 1, 1,
  11512. 1, 1, 1, 1, 1, 1, 1, 1,
  11513. 1, 1, 1, 1, 1, 1, 1, 1,
  11514. 1, 1, 1, 1, 1, 1, 1, 1,
  11515. 1, 1, 1, 1, 1, 1, 1, 1,
  11516. 1, 1, 1, 1, 1, 1, 1, 1,
  11517. 1, 1, 1, 1, 1, 1, 1, 1,
  11518. 1, 1, 1, 1882, 1882, 1882, 1882, 1882,
  11519. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11520. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11521. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11522. 1882, 1883, 1884, 1884, 1884, 1884, 1884, 1884,
  11523. 1884, 1884, 1884, 1884, 1884, 1884, 1885, 1884,
  11524. 1884, 1886, 1887, 1887, 1887, 1888, 1, 1889,
  11525. 1, 1873, 1, 1, 1, 1, 1, 1,
  11526. 1, 1, 1, 1, 1, 1, 1, 1,
  11527. 1, 1, 1, 1, 1, 1, 1, 1,
  11528. 1873, 1, 1869, 1, 1, 1, 1870, 1,
  11529. 1, 1, 1, 1, 1, 1, 1, 1,
  11530. 1, 1, 1, 1, 1, 1, 1, 1,
  11531. 1, 1869, 1880, 1, 1880, 1880, 1880, 1880,
  11532. 1880, 1871, 1, 1880, 1880, 1625, 1880, 1873,
  11533. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11534. 1880, 1880, 1880, 1, 767, 1, 1880, 1,
  11535. 1880, 1, 1880, 1880, 1880, 1880, 1880, 1880,
  11536. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11537. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11538. 1880, 1880, 1880, 1880, 1, 1, 1, 1880,
  11539. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11540. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11541. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11542. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11543. 1, 1, 1, 1, 1, 1, 1, 1,
  11544. 1, 1, 1, 1, 1, 1, 1, 1,
  11545. 1, 1, 1, 1, 1, 1, 1, 1,
  11546. 1, 1, 1, 1, 1, 1, 1, 1,
  11547. 1, 1, 1, 1, 1, 1, 1, 1,
  11548. 1, 1, 1, 1, 1, 1, 1, 1,
  11549. 1, 1, 1, 1, 1, 1, 1, 1,
  11550. 1, 1, 1, 1, 1, 1, 1, 1,
  11551. 1, 1, 1, 1882, 1882, 1882, 1882, 1882,
  11552. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11553. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11554. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11555. 1882, 1883, 1884, 1884, 1884, 1884, 1884, 1884,
  11556. 1884, 1884, 1884, 1884, 1884, 1884, 1885, 1884,
  11557. 1884, 1886, 1887, 1887, 1887, 1888, 1, 1880,
  11558. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11559. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11560. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11561. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11562. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11563. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11564. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
  11565. 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1,
  11566. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11567. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11568. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11569. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11570. 1, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11571. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11572. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11573. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11574. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11575. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11576. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11577. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11578. 1882, 1, 1882, 1882, 1882, 1882, 1882, 1882,
  11579. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11580. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11581. 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882,
  11582. 1882, 1882, 1, 1884, 1884, 1884, 1884, 1884,
  11583. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11584. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11585. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11586. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11587. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11588. 1884, 1884, 1884, 1, 1884, 1884, 1884, 1884,
  11589. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11590. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11591. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11592. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11593. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11594. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11595. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11596. 1884, 1884, 1884, 1884, 1, 1884, 1884, 1884,
  11597. 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
  11598. 1884, 1884, 1884, 1884, 1884, 1, 1878, 1,
  11599. 1, 1, 1890, 1, 1, 1, 1, 1,
  11600. 1, 1, 1, 1, 1, 1, 1, 1,
  11601. 1, 1, 1, 1, 1, 1878, 1891, 1,
  11602. 1891, 1891, 1891, 1891, 1891, 1892, 1, 1891,
  11603. 1891, 1, 1891, 1, 1891, 1891, 1891, 1891,
  11604. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1,
  11605. 1, 1, 1891, 1, 1891, 1, 1891, 1891,
  11606. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11607. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11608. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11609. 1, 1, 1, 1891, 1891, 1891, 1891, 1891,
  11610. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11611. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11612. 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
  11613. 1891, 1891, 1891, 1891, 1, 1, 1, 1,
  11614. 1, 1, 1, 1, 1, 1, 1, 1,
  11615. 1, 1, 1, 1, 1, 1, 1, 1,
  11616. 1, 1, 1, 1, 1, 1, 1, 1,
  11617. 1, 1, 1, 1, 1, 1, 1, 1,
  11618. 1, 1, 1, 1, 1, 1, 1, 1,
  11619. 1, 1, 1, 1, 1, 1, 1, 1,
  11620. 1, 1, 1, 1, 1, 1, 1, 1,
  11621. 1, 1, 1, 1, 1, 1, 1, 1893,
  11622. 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
  11623. 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
  11624. 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893,
  11625. 1893, 1893, 1893, 1893, 1893, 1894, 1895, 1895,
  11626. 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895,
  11627. 1895, 1895, 1896, 1895, 1895, 1897, 1898, 1898,
  11628. 1898, 1899, 1, 1873, 1, 1, 1, 1879,
  11629. 1, 1, 1, 1, 1, 1, 1, 1,
  11630. 1, 1, 1, 1, 1, 1, 1, 1,
  11631. 1, 1, 1873, 1859, 1719, 1859, 1859, 1859,
  11632. 1859, 1859, 1881, 1, 1859, 1859, 1, 1859,
  11633. 1612, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11634. 1859, 1859, 1859, 1859, 1, 1, 1, 1859,
  11635. 1, 1859, 1, 1859, 1859, 1859, 1859, 1859,
  11636. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11637. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11638. 1859, 1859, 1859, 1859, 1859, 1, 1, 1,
  11639. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11640. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11641. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11642. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11643. 1859, 1, 1, 1, 1, 1, 1, 1,
  11644. 1, 1, 1, 1, 1, 1, 1, 1,
  11645. 1, 1, 1, 1, 1, 1, 1, 1,
  11646. 1, 1, 1, 1, 1, 1, 1, 1,
  11647. 1, 1, 1, 1, 1, 1, 1, 1,
  11648. 1, 1, 1, 1, 1, 1, 1, 1,
  11649. 1, 1, 1, 1, 1, 1, 1, 1,
  11650. 1, 1, 1, 1, 1, 1, 1, 1,
  11651. 1, 1, 1, 1, 1861, 1861, 1861, 1861,
  11652. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11653. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11654. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11655. 1861, 1861, 1862, 1863, 1863, 1863, 1863, 1863,
  11656. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1864,
  11657. 1863, 1863, 1865, 1866, 1866, 1866, 1867, 1,
  11658. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11659. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11660. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11661. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11662. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11663. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11664. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11665. 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
  11666. 1, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11667. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11668. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11669. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11670. 1861, 1, 1861, 1861, 1861, 1861, 1861, 1861,
  11671. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11672. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11673. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11674. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11675. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11676. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11677. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11678. 1861, 1861, 1, 1861, 1861, 1861, 1861, 1861,
  11679. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11680. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11681. 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
  11682. 1861, 1861, 1861, 1, 1863, 1863, 1863, 1863,
  11683. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11684. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11685. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11686. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11687. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11688. 1863, 1863, 1863, 1863, 1, 1863, 1863, 1863,
  11689. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11690. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11691. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11692. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11693. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11694. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11695. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11696. 1863, 1863, 1863, 1863, 1863, 1, 1863, 1863,
  11697. 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
  11698. 1863, 1863, 1863, 1863, 1863, 1863, 1, 1900,
  11699. 1, 1, 1, 1901, 1, 1, 1, 1,
  11700. 1, 1, 1, 1, 1, 1, 1, 1,
  11701. 1, 1, 1, 1, 1, 1, 1900, 1902,
  11702. 1903, 1902, 1902, 1902, 1902, 1902, 1904, 1,
  11703. 1902, 1902, 1, 1902, 1709, 1902, 1902, 1902,
  11704. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11705. 1, 1, 1, 1902, 1, 1902, 1, 1902,
  11706. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11707. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11708. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11709. 1902, 1710, 1, 1, 1902, 1902, 1902, 1902,
  11710. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11711. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11712. 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
  11713. 1902, 1902, 1902, 1902, 1902, 1, 1, 1,
  11714. 1, 1, 1, 1, 1, 1, 1, 1,
  11715. 1, 1, 1, 1, 1, 1, 1, 1,
  11716. 1, 1, 1, 1, 1, 1, 1, 1,
  11717. 1, 1, 1, 1, 1, 1, 1, 1,
  11718. 1, 1, 1, 1, 1, 1, 1, 1,
  11719. 1, 1, 1, 1, 1, 1, 1, 1,
  11720. 1, 1, 1, 1, 1, 1, 1, 1,
  11721. 1, 1, 1, 1, 1, 1, 1, 1,
  11722. 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
  11723. 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
  11724. 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
  11725. 1905, 1905, 1905, 1905, 1905, 1905, 1906, 1907,
  11726. 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
  11727. 1907, 1907, 1907, 1908, 1907, 1907, 1909, 1910,
  11728. 1910, 1910, 1911, 1, 409, 409, 409, 409,
  11729. 409, 409, 409, 409, 409, 409, 409, 409,
  11730. 409, 409, 409, 409, 409, 409, 409, 409,
  11731. 409, 409, 409, 409, 409, 409, 409, 409,
  11732. 409, 409, 409, 409, 409, 409, 409, 409,
  11733. 409, 409, 409, 409, 409, 409, 409, 409,
  11734. 409, 409, 409, 409, 409, 409, 409, 409,
  11735. 409, 409, 409, 409, 409, 409, 409, 409,
  11736. 409, 409, 409, 409, 1, 414, 414, 414,
  11737. 414, 414, 414, 414, 414, 414, 414, 414,
  11738. 414, 414, 414, 414, 414, 414, 414, 414,
  11739. 414, 414, 414, 414, 414, 414, 414, 414,
  11740. 414, 414, 414, 414, 414, 1, 414, 414,
  11741. 414, 414, 414, 414, 414, 414, 414, 414,
  11742. 414, 414, 414, 414, 414, 414, 414, 414,
  11743. 414, 414, 414, 414, 414, 414, 414, 414,
  11744. 414, 414, 414, 414, 414, 414, 414, 414,
  11745. 414, 414, 414, 414, 414, 414, 414, 414,
  11746. 414, 414, 414, 414, 414, 414, 414, 414,
  11747. 414, 414, 414, 414, 414, 414, 414, 414,
  11748. 414, 414, 414, 414, 414, 414, 1, 414,
  11749. 414, 414, 414, 414, 414, 414, 414, 414,
  11750. 414, 414, 414, 414, 414, 414, 414, 414,
  11751. 414, 414, 414, 414, 414, 414, 414, 414,
  11752. 414, 414, 414, 414, 414, 414, 414, 1,
  11753. 416, 416, 416, 416, 416, 416, 416, 416,
  11754. 416, 416, 416, 416, 416, 416, 416, 416,
  11755. 416, 416, 416, 416, 416, 416, 416, 416,
  11756. 416, 416, 416, 416, 416, 416, 416, 416,
  11757. 416, 416, 416, 416, 416, 416, 416, 416,
  11758. 416, 416, 416, 416, 416, 416, 416, 416,
  11759. 1, 416, 416, 416, 416, 416, 416, 416,
  11760. 416, 416, 416, 416, 416, 416, 416, 416,
  11761. 416, 416, 416, 416, 416, 416, 416, 416,
  11762. 416, 416, 416, 416, 416, 416, 416, 416,
  11763. 416, 416, 416, 416, 416, 416, 416, 416,
  11764. 416, 416, 416, 416, 416, 416, 416, 416,
  11765. 416, 416, 416, 416, 416, 416, 416, 416,
  11766. 416, 416, 416, 416, 416, 416, 416, 416,
  11767. 416, 1, 416, 416, 416, 416, 416, 416,
  11768. 416, 416, 416, 416, 416, 416, 416, 416,
  11769. 416, 416, 1, 1912, 1, 1, 1, 1913,
  11770. 1, 1, 1, 1, 1, 1, 1, 1,
  11771. 1, 1, 1, 1, 1, 1, 1, 1,
  11772. 1, 1, 1912, 210, 1914, 210, 210, 210,
  11773. 210, 210, 1915, 1, 210, 210, 213, 210,
  11774. 1795, 210, 210, 210, 210, 210, 210, 210,
  11775. 210, 210, 210, 210, 1, 215, 216, 210,
  11776. 1, 210, 217, 210, 210, 210, 210, 210,
  11777. 210, 210, 210, 210, 210, 210, 210, 210,
  11778. 210, 210, 210, 210, 210, 210, 210, 210,
  11779. 210, 210, 210, 210, 210, 1, 1, 1,
  11780. 210, 210, 210, 210, 210, 210, 210, 210,
  11781. 210, 210, 210, 210, 210, 210, 210, 210,
  11782. 210, 210, 210, 210, 210, 210, 210, 210,
  11783. 210, 210, 210, 210, 210, 210, 210, 210,
  11784. 210, 1, 1, 1, 1, 1, 1, 1,
  11785. 1, 1, 1, 1, 1, 1, 1, 1,
  11786. 1, 1, 1, 1, 1, 1, 1, 1,
  11787. 1, 1, 1, 1, 1, 1, 1, 1,
  11788. 1, 1, 1, 1, 1, 1, 1, 1,
  11789. 1, 1, 1, 1, 1, 1, 1, 1,
  11790. 1, 1, 1, 1, 1, 1, 1, 1,
  11791. 1, 1, 1, 1, 1, 1, 1, 1,
  11792. 1, 1, 1, 1, 218, 218, 218, 218,
  11793. 218, 218, 218, 218, 218, 218, 218, 218,
  11794. 218, 218, 218, 218, 218, 218, 218, 218,
  11795. 218, 218, 218, 218, 218, 218, 218, 218,
  11796. 218, 218, 219, 220, 220, 220, 220, 220,
  11797. 220, 220, 220, 220, 220, 220, 220, 221,
  11798. 220, 220, 222, 223, 223, 223, 224, 1,
  11799. 1916, 1, 1, 1, 1917, 1, 1, 1,
  11800. 1, 1, 1, 1, 1, 1, 1, 1,
  11801. 1, 1, 1, 1, 1, 1, 1, 1916,
  11802. 438, 439, 438, 438, 438, 438, 438, 1918,
  11803. 1, 438, 438, 230, 438, 1, 438, 438,
  11804. 438, 438, 438, 438, 438, 438, 438, 438,
  11805. 438, 1, 232, 199, 438, 1, 438, 1838,
  11806. 438, 438, 438, 438, 438, 438, 438, 438,
  11807. 438, 438, 438, 438, 438, 438, 438, 438,
  11808. 438, 438, 438, 438, 438, 438, 438, 438,
  11809. 438, 438, 1, 1, 1, 438, 438, 438,
  11810. 438, 438, 438, 438, 438, 438, 438, 438,
  11811. 438, 438, 438, 438, 438, 438, 438, 438,
  11812. 438, 438, 438, 438, 438, 438, 438, 438,
  11813. 438, 438, 438, 438, 438, 438, 1, 1,
  11814. 1, 1, 1, 1, 1, 1, 1, 1,
  11815. 1, 1, 1, 1, 1, 1, 1, 1,
  11816. 1, 1, 1, 1, 1, 1, 1, 1,
  11817. 1, 1, 1, 1, 1, 1, 1, 1,
  11818. 1, 1, 1, 1, 1, 1, 1, 1,
  11819. 1, 1, 1, 1, 1, 1, 1, 1,
  11820. 1, 1, 1, 1, 1, 1, 1, 1,
  11821. 1, 1, 1, 1, 1, 1, 1, 1,
  11822. 1, 441, 441, 441, 441, 441, 441, 441,
  11823. 441, 441, 441, 441, 441, 441, 441, 441,
  11824. 441, 441, 441, 441, 441, 441, 441, 441,
  11825. 441, 441, 441, 441, 441, 441, 441, 442,
  11826. 443, 443, 443, 443, 443, 443, 443, 443,
  11827. 443, 443, 443, 443, 444, 443, 443, 445,
  11828. 446, 446, 446, 447, 1, 1919, 1, 1916,
  11829. 1, 1, 1, 1, 1, 1, 1, 1,
  11830. 1, 1, 1, 1, 1, 1, 1, 1,
  11831. 1, 1, 1, 1, 1, 1, 1916, 1,
  11832. 1920, 1, 1, 1, 1921, 1, 1, 1,
  11833. 1, 1, 1, 1, 1, 1, 1, 1,
  11834. 1, 1, 1, 1, 1, 1, 1, 1920,
  11835. 1782, 1783, 1782, 1782, 1782, 1782, 1782, 1922,
  11836. 1, 1782, 1782, 1804, 1782, 1, 1782, 1782,
  11837. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11838. 1782, 1, 947, 295, 1782, 1, 1782, 1843,
  11839. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11840. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11841. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11842. 1782, 1782, 1, 1, 1, 1782, 1782, 1782,
  11843. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11844. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11845. 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782,
  11846. 1782, 1782, 1782, 1782, 1782, 1782, 1, 1,
  11847. 1, 1, 1, 1, 1, 1, 1, 1,
  11848. 1, 1, 1, 1, 1, 1, 1, 1,
  11849. 1, 1, 1, 1, 1, 1, 1, 1,
  11850. 1, 1, 1, 1, 1, 1, 1, 1,
  11851. 1, 1, 1, 1, 1, 1, 1, 1,
  11852. 1, 1, 1, 1, 1, 1, 1, 1,
  11853. 1, 1, 1, 1, 1, 1, 1, 1,
  11854. 1, 1, 1, 1, 1, 1, 1, 1,
  11855. 1, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11856. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11857. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
  11858. 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1786,
  11859. 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787,
  11860. 1787, 1787, 1787, 1787, 1788, 1787, 1787, 1789,
  11861. 1790, 1790, 1790, 1791, 1, 1923, 1923, 1923,
  11862. 1923, 1923, 1923, 1923, 1923, 1924, 1, 1923,
  11863. 1923, 1925, 1923, 1923, 1923, 1923, 1923, 1923,
  11864. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11865. 1923, 1923, 1923, 1923, 1924, 1923, 1759, 1923,
  11866. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11867. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11868. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11869. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11870. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11871. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11872. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11873. 1926, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11874. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11875. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11876. 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
  11877. 1923, 1923, 1923, 1923, 1, 1, 1, 1,
  11878. 1, 1, 1, 1, 1, 1, 1, 1,
  11879. 1, 1, 1, 1, 1, 1, 1, 1,
  11880. 1, 1, 1, 1, 1, 1, 1, 1,
  11881. 1, 1, 1, 1, 1, 1, 1, 1,
  11882. 1, 1, 1, 1, 1, 1, 1, 1,
  11883. 1, 1, 1, 1, 1, 1, 1, 1,
  11884. 1, 1, 1, 1, 1, 1, 1, 1,
  11885. 1, 1, 1, 1, 1, 1, 1927, 1927,
  11886. 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
  11887. 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
  11888. 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
  11889. 1927, 1927, 1927, 1927, 1928, 1929, 1929, 1929,
  11890. 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929,
  11891. 1929, 1930, 1929, 1929, 1931, 1932, 1932, 1932,
  11892. 1933, 1, 1934, 1934, 1934, 1934, 1934, 1934,
  11893. 1934, 1934, 1934, 1, 1934, 1934, 1935, 1934,
  11894. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11895. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11896. 1934, 1934, 1934, 1936, 1934, 1934, 1934, 1934,
  11897. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11898. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11899. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11900. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11901. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11902. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11903. 1934, 1934, 1934, 1934, 1934, 1937, 1934, 1934,
  11904. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11905. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11906. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11907. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11908. 1934, 1, 1, 1, 1, 1, 1, 1,
  11909. 1, 1, 1, 1, 1, 1, 1, 1,
  11910. 1, 1, 1, 1, 1, 1, 1, 1,
  11911. 1, 1, 1, 1, 1, 1, 1, 1,
  11912. 1, 1, 1, 1, 1, 1, 1, 1,
  11913. 1, 1, 1, 1, 1, 1, 1, 1,
  11914. 1, 1, 1, 1, 1, 1, 1, 1,
  11915. 1, 1, 1, 1, 1, 1, 1, 1,
  11916. 1, 1, 1, 1938, 1938, 1938, 1938, 1938,
  11917. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  11918. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  11919. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  11920. 1938, 1939, 1940, 1940, 1940, 1940, 1940, 1940,
  11921. 1940, 1940, 1940, 1940, 1940, 1940, 1941, 1940,
  11922. 1940, 1942, 1943, 1943, 1943, 1944, 1, 1945,
  11923. 1, 1934, 1, 1, 1, 1, 1, 1,
  11924. 1, 1, 1, 1, 1, 1, 1, 1,
  11925. 1, 1, 1, 1, 1, 1, 1, 1,
  11926. 1934, 1, 208, 1, 1, 1, 209, 1,
  11927. 1, 1, 1, 1, 1, 1, 1, 1,
  11928. 1, 1, 1, 1, 1, 1, 1, 1,
  11929. 1, 208, 409, 211, 409, 409, 409, 409,
  11930. 409, 212, 1, 409, 409, 213, 409, 214,
  11931. 409, 409, 409, 409, 409, 409, 409, 409,
  11932. 409, 409, 409, 1, 215, 216, 409, 1,
  11933. 409, 217, 409, 409, 409, 409, 409, 409,
  11934. 409, 409, 409, 409, 409, 409, 409, 409,
  11935. 409, 409, 409, 409, 409, 409, 409, 409,
  11936. 409, 409, 409, 409, 1, 1, 1, 409,
  11937. 409, 409, 409, 409, 409, 409, 409, 409,
  11938. 409, 409, 409, 409, 409, 409, 409, 409,
  11939. 409, 409, 409, 409, 409, 409, 409, 409,
  11940. 409, 409, 409, 409, 409, 409, 409, 409,
  11941. 1, 1, 1, 1, 1, 1, 1, 1,
  11942. 1, 1, 1, 1, 1, 1, 1, 1,
  11943. 1, 1, 1, 1, 1, 1, 1, 1,
  11944. 1, 1, 1, 1, 1, 1, 1, 1,
  11945. 1, 1, 1, 1, 1, 1, 1, 1,
  11946. 1, 1, 1, 1, 1, 1, 1, 1,
  11947. 1, 1, 1, 1, 1, 1, 1, 1,
  11948. 1, 1, 1, 1, 1, 1, 1, 1,
  11949. 1, 1, 1, 414, 414, 414, 414, 414,
  11950. 414, 414, 414, 414, 414, 414, 414, 414,
  11951. 414, 414, 414, 414, 414, 414, 414, 414,
  11952. 414, 414, 414, 414, 414, 414, 414, 414,
  11953. 414, 415, 416, 416, 416, 416, 416, 416,
  11954. 416, 416, 416, 416, 416, 416, 417, 416,
  11955. 416, 418, 419, 419, 419, 420, 1, 1946,
  11956. 1, 1, 1, 1947, 1, 1, 1, 1,
  11957. 1, 1, 1, 1, 1, 1, 1, 1,
  11958. 1, 1, 1, 1, 1, 1, 1946, 273,
  11959. 274, 273, 273, 273, 273, 273, 1948, 1,
  11960. 273, 273, 1804, 273, 433, 273, 273, 273,
  11961. 273, 273, 273, 273, 273, 273, 273, 273,
  11962. 1, 947, 277, 273, 1, 273, 1805, 273,
  11963. 273, 273, 273, 273, 273, 273, 273, 273,
  11964. 273, 273, 273, 273, 273, 273, 273, 273,
  11965. 273, 273, 273, 273, 273, 273, 273, 273,
  11966. 273, 1, 1, 1, 273, 273, 273, 273,
  11967. 273, 273, 273, 273, 273, 273, 273, 273,
  11968. 273, 273, 273, 273, 273, 273, 273, 273,
  11969. 273, 273, 273, 273, 273, 273, 273, 273,
  11970. 273, 273, 273, 273, 273, 1, 1, 1,
  11971. 1, 1, 1, 1, 1, 1, 1, 1,
  11972. 1, 1, 1, 1, 1, 1, 1, 1,
  11973. 1, 1, 1, 1, 1, 1, 1, 1,
  11974. 1, 1, 1, 1, 1, 1, 1, 1,
  11975. 1, 1, 1, 1, 1, 1, 1, 1,
  11976. 1, 1, 1, 1, 1, 1, 1, 1,
  11977. 1, 1, 1, 1, 1, 1, 1, 1,
  11978. 1, 1, 1, 1, 1, 1, 1, 1,
  11979. 278, 278, 278, 278, 278, 278, 278, 278,
  11980. 278, 278, 278, 278, 278, 278, 278, 278,
  11981. 278, 278, 278, 278, 278, 278, 278, 278,
  11982. 278, 278, 278, 278, 278, 278, 279, 280,
  11983. 280, 280, 280, 280, 280, 280, 280, 280,
  11984. 280, 280, 280, 281, 280, 280, 282, 283,
  11985. 283, 283, 284, 1, 1934, 1934, 1934, 1934,
  11986. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11987. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11988. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11989. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11990. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11991. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11992. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11993. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11994. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11995. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11996. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11997. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11998. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  11999. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12000. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12001. 1934, 1934, 1934, 1934, 1, 1, 1, 1,
  12002. 1, 1, 1, 1, 1, 1, 1, 1,
  12003. 1, 1, 1, 1, 1, 1, 1, 1,
  12004. 1, 1, 1, 1, 1, 1, 1, 1,
  12005. 1, 1, 1, 1, 1, 1, 1, 1,
  12006. 1, 1, 1, 1, 1, 1, 1, 1,
  12007. 1, 1, 1, 1, 1, 1, 1, 1,
  12008. 1, 1, 1, 1, 1, 1, 1, 1,
  12009. 1, 1, 1, 1, 1, 1, 1938, 1938,
  12010. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12011. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12012. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12013. 1938, 1938, 1938, 1938, 1939, 1940, 1940, 1940,
  12014. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12015. 1940, 1941, 1940, 1940, 1942, 1943, 1943, 1943,
  12016. 1944, 1, 1934, 1934, 1934, 1934, 1934, 1934,
  12017. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12018. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12019. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12020. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12021. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12022. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12023. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12024. 1934, 1934, 1, 1938, 1938, 1938, 1938, 1938,
  12025. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12026. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12027. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12028. 1938, 1938, 1938, 1, 1938, 1938, 1938, 1938,
  12029. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12030. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12031. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12032. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12033. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12034. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12035. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12036. 1938, 1938, 1938, 1938, 1, 1938, 1938, 1938,
  12037. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12038. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12039. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12040. 1938, 1938, 1938, 1938, 1938, 1, 1940, 1940,
  12041. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12042. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12043. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12044. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12045. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12046. 1940, 1940, 1940, 1940, 1940, 1940, 1, 1940,
  12047. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12048. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12049. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12050. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12051. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12052. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12053. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12054. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1,
  12055. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12056. 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12057. 1, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12058. 1934, 1949, 1, 1934, 1934, 1950, 1934, 1934,
  12059. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12060. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12061. 1949, 1934, 1770, 1934, 1934, 1934, 1934, 1934,
  12062. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12063. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12064. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12065. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12066. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12067. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12068. 1934, 1934, 1934, 1934, 1937, 1934, 1934, 1934,
  12069. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12070. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12071. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12072. 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
  12073. 1, 1, 1, 1, 1, 1, 1, 1,
  12074. 1, 1, 1, 1, 1, 1, 1, 1,
  12075. 1, 1, 1, 1, 1, 1, 1, 1,
  12076. 1, 1, 1, 1, 1, 1, 1, 1,
  12077. 1, 1, 1, 1, 1, 1, 1, 1,
  12078. 1, 1, 1, 1, 1, 1, 1, 1,
  12079. 1, 1, 1, 1, 1, 1, 1, 1,
  12080. 1, 1, 1, 1, 1, 1, 1, 1,
  12081. 1, 1, 1938, 1938, 1938, 1938, 1938, 1938,
  12082. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12083. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12084. 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
  12085. 1939, 1940, 1940, 1940, 1940, 1940, 1940, 1940,
  12086. 1940, 1940, 1940, 1940, 1940, 1941, 1940, 1940,
  12087. 1942, 1943, 1943, 1943, 1944, 1, 1951, 1,
  12088. 1949, 1, 1, 1, 1, 1, 1, 1,
  12089. 1, 1, 1, 1, 1, 1, 1, 1,
  12090. 1, 1, 1, 1, 1, 1, 1, 1949,
  12091. 1, 210, 210, 210, 210, 210, 210, 210,
  12092. 210, 210, 210, 210, 210, 210, 210, 210,
  12093. 210, 210, 210, 210, 210, 210, 210, 210,
  12094. 210, 210, 210, 210, 210, 210, 210, 210,
  12095. 210, 210, 210, 210, 210, 210, 210, 210,
  12096. 210, 210, 210, 210, 210, 210, 210, 210,
  12097. 210, 210, 210, 210, 210, 210, 210, 210,
  12098. 210, 210, 210, 210, 210, 210, 210, 210,
  12099. 210, 1, 218, 218, 218, 218, 218, 218,
  12100. 218, 218, 218, 218, 218, 218, 218, 218,
  12101. 218, 218, 218, 218, 218, 218, 218, 218,
  12102. 218, 218, 218, 218, 218, 218, 218, 218,
  12103. 218, 218, 1, 218, 218, 218, 218, 218,
  12104. 218, 218, 218, 218, 218, 218, 218, 218,
  12105. 218, 218, 218, 218, 218, 218, 218, 218,
  12106. 218, 218, 218, 218, 218, 218, 218, 218,
  12107. 218, 218, 218, 218, 218, 218, 218, 218,
  12108. 218, 218, 218, 218, 218, 218, 218, 218,
  12109. 218, 218, 218, 218, 218, 218, 218, 218,
  12110. 218, 218, 218, 218, 218, 218, 218, 218,
  12111. 218, 218, 218, 1, 218, 218, 218, 218,
  12112. 218, 218, 218, 218, 218, 218, 218, 218,
  12113. 218, 218, 218, 218, 218, 218, 218, 218,
  12114. 218, 218, 218, 218, 218, 218, 218, 218,
  12115. 218, 218, 218, 218, 1, 220, 220, 220,
  12116. 220, 220, 220, 220, 220, 220, 220, 220,
  12117. 220, 220, 220, 220, 220, 220, 220, 220,
  12118. 220, 220, 220, 220, 220, 220, 220, 220,
  12119. 220, 220, 220, 220, 220, 220, 220, 220,
  12120. 220, 220, 220, 220, 220, 220, 220, 220,
  12121. 220, 220, 220, 220, 220, 1, 220, 220,
  12122. 220, 220, 220, 220, 220, 220, 220, 220,
  12123. 220, 220, 220, 220, 220, 220, 220, 220,
  12124. 220, 220, 220, 220, 220, 220, 220, 220,
  12125. 220, 220, 220, 220, 220, 220, 220, 220,
  12126. 220, 220, 220, 220, 220, 220, 220, 220,
  12127. 220, 220, 220, 220, 220, 220, 220, 220,
  12128. 220, 220, 220, 220, 220, 220, 220, 220,
  12129. 220, 220, 220, 220, 220, 220, 1, 220,
  12130. 220, 220, 220, 220, 220, 220, 220, 220,
  12131. 220, 220, 220, 220, 220, 220, 220, 1,
  12132. 395, 395, 395, 395, 395, 395, 395, 395,
  12133. 395, 395, 395, 395, 395, 395, 395, 395,
  12134. 395, 395, 395, 395, 395, 395, 395, 395,
  12135. 395, 395, 395, 395, 395, 395, 395, 395,
  12136. 395, 395, 395, 395, 395, 395, 395, 395,
  12137. 395, 395, 395, 395, 395, 395, 395, 395,
  12138. 395, 395, 395, 395, 395, 395, 395, 395,
  12139. 395, 395, 395, 395, 395, 395, 395, 395,
  12140. 395, 395, 395, 395, 395, 395, 395, 395,
  12141. 395, 395, 395, 395, 395, 395, 395, 395,
  12142. 395, 395, 395, 395, 395, 395, 395, 395,
  12143. 395, 395, 395, 395, 395, 395, 395, 395,
  12144. 395, 395, 395, 395, 395, 395, 395, 395,
  12145. 395, 395, 395, 395, 395, 395, 395, 395,
  12146. 395, 395, 395, 395, 395, 395, 395, 395,
  12147. 395, 395, 395, 395, 395, 395, 395, 395,
  12148. 1, 1, 1, 1, 1, 1, 1, 1,
  12149. 1, 1, 1, 1, 1, 1, 1, 1,
  12150. 1, 1, 1, 1, 1, 1, 1, 1,
  12151. 1, 1, 1, 1, 1, 1, 1, 1,
  12152. 1, 1, 1, 1, 1, 1, 1, 1,
  12153. 1, 1, 1, 1, 1, 1, 1, 1,
  12154. 1, 1, 1, 1, 1, 1, 1, 1,
  12155. 1, 1, 1, 1, 1, 1, 1, 1,
  12156. 1, 1, 399, 399, 399, 399, 399, 399,
  12157. 399, 399, 399, 399, 399, 399, 399, 399,
  12158. 399, 399, 399, 399, 399, 399, 399, 399,
  12159. 399, 399, 399, 399, 399, 399, 399, 399,
  12160. 400, 401, 401, 401, 401, 401, 401, 401,
  12161. 401, 401, 401, 401, 401, 402, 401, 401,
  12162. 403, 404, 404, 404, 405, 1, 395, 395,
  12163. 395, 395, 395, 395, 395, 395, 395, 395,
  12164. 395, 395, 395, 395, 395, 395, 395, 395,
  12165. 395, 395, 395, 395, 395, 395, 395, 395,
  12166. 395, 395, 395, 395, 395, 395, 395, 395,
  12167. 395, 395, 395, 395, 395, 395, 395, 395,
  12168. 395, 395, 395, 395, 395, 395, 395, 395,
  12169. 395, 395, 395, 395, 395, 395, 395, 395,
  12170. 395, 395, 395, 395, 395, 395, 1, 399,
  12171. 399, 399, 399, 399, 399, 399, 399, 399,
  12172. 399, 399, 399, 399, 399, 399, 399, 399,
  12173. 399, 399, 399, 399, 399, 399, 399, 399,
  12174. 399, 399, 399, 399, 399, 399, 399, 1,
  12175. 399, 399, 399, 399, 399, 399, 399, 399,
  12176. 399, 399, 399, 399, 399, 399, 399, 399,
  12177. 399, 399, 399, 399, 399, 399, 399, 399,
  12178. 399, 399, 399, 399, 399, 399, 399, 399,
  12179. 399, 399, 399, 399, 399, 399, 399, 399,
  12180. 399, 399, 399, 399, 399, 399, 399, 399,
  12181. 399, 399, 399, 399, 399, 399, 399, 399,
  12182. 399, 399, 399, 399, 399, 399, 399, 399,
  12183. 1, 399, 399, 399, 399, 399, 399, 399,
  12184. 399, 399, 399, 399, 399, 399, 399, 399,
  12185. 399, 399, 399, 399, 399, 399, 399, 399,
  12186. 399, 399, 399, 399, 399, 399, 399, 399,
  12187. 399, 1, 401, 401, 401, 401, 401, 401,
  12188. 401, 401, 401, 401, 401, 401, 401, 401,
  12189. 401, 401, 401, 401, 401, 401, 401, 401,
  12190. 401, 401, 401, 401, 401, 401, 401, 401,
  12191. 401, 401, 401, 401, 401, 401, 401, 401,
  12192. 401, 401, 401, 401, 401, 401, 401, 401,
  12193. 401, 401, 1, 401, 401, 401, 401, 401,
  12194. 401, 401, 401, 401, 401, 401, 401, 401,
  12195. 401, 401, 401, 401, 401, 401, 401, 401,
  12196. 401, 401, 401, 401, 401, 401, 401, 401,
  12197. 401, 401, 401, 401, 401, 401, 401, 401,
  12198. 401, 401, 401, 401, 401, 401, 401, 401,
  12199. 401, 401, 401, 401, 401, 401, 401, 401,
  12200. 401, 401, 401, 401, 401, 401, 401, 401,
  12201. 401, 401, 401, 1, 401, 401, 401, 401,
  12202. 401, 401, 401, 401, 401, 401, 401, 401,
  12203. 401, 401, 401, 401, 1, 395, 395, 395,
  12204. 395, 395, 395, 395, 395, 1952, 1, 395,
  12205. 395, 1953, 395, 395, 395, 395, 395, 395,
  12206. 395, 395, 395, 395, 395, 395, 395, 395,
  12207. 395, 395, 395, 395, 1952, 395, 1954, 395,
  12208. 395, 395, 395, 395, 395, 395, 395, 395,
  12209. 395, 395, 395, 395, 395, 395, 395, 395,
  12210. 395, 395, 395, 395, 395, 395, 395, 395,
  12211. 395, 395, 395, 395, 395, 395, 395, 395,
  12212. 395, 395, 395, 395, 395, 395, 395, 395,
  12213. 395, 395, 395, 395, 395, 395, 395, 395,
  12214. 395, 395, 395, 395, 395, 395, 395, 395,
  12215. 398, 395, 395, 395, 395, 395, 395, 395,
  12216. 395, 395, 395, 395, 395, 395, 395, 395,
  12217. 395, 395, 395, 395, 395, 395, 395, 395,
  12218. 395, 395, 395, 395, 395, 395, 395, 395,
  12219. 395, 395, 395, 395, 1, 1, 1, 1,
  12220. 1, 1, 1, 1, 1, 1, 1, 1,
  12221. 1, 1, 1, 1, 1, 1, 1, 1,
  12222. 1, 1, 1, 1, 1, 1, 1, 1,
  12223. 1, 1, 1, 1, 1, 1, 1, 1,
  12224. 1, 1, 1, 1, 1, 1, 1, 1,
  12225. 1, 1, 1, 1, 1, 1, 1, 1,
  12226. 1, 1, 1, 1, 1, 1, 1, 1,
  12227. 1, 1, 1, 1, 1, 1, 399, 399,
  12228. 399, 399, 399, 399, 399, 399, 399, 399,
  12229. 399, 399, 399, 399, 399, 399, 399, 399,
  12230. 399, 399, 399, 399, 399, 399, 399, 399,
  12231. 399, 399, 399, 399, 400, 401, 401, 401,
  12232. 401, 401, 401, 401, 401, 401, 401, 401,
  12233. 401, 402, 401, 401, 403, 404, 404, 404,
  12234. 405, 1, 1955, 1, 1952, 1, 1, 1,
  12235. 1, 1, 1, 1, 1, 1, 1, 1,
  12236. 1, 1, 1, 1, 1, 1, 1, 1,
  12237. 1, 1, 1, 1952, 1, 1956, 1, 1,
  12238. 1, 1957, 1, 1, 1, 1, 1, 1,
  12239. 1, 1, 1, 1, 1, 1, 1, 1,
  12240. 1, 1, 1, 1, 1956, 227, 228, 227,
  12241. 227, 227, 227, 227, 1958, 1, 227, 227,
  12242. 1959, 227, 231, 227, 227, 227, 227, 227,
  12243. 227, 227, 227, 227, 227, 227, 1, 1103,
  12244. 216, 227, 1, 227, 1960, 227, 227, 227,
  12245. 227, 227, 227, 227, 227, 227, 227, 227,
  12246. 227, 227, 227, 227, 227, 227, 227, 227,
  12247. 227, 227, 227, 227, 227, 227, 227, 1,
  12248. 1, 1, 227, 227, 227, 227, 227, 227,
  12249. 227, 227, 227, 227, 227, 227, 227, 227,
  12250. 227, 227, 227, 227, 227, 227, 227, 227,
  12251. 227, 227, 227, 227, 227, 227, 227, 227,
  12252. 227, 227, 227, 1, 1, 1, 1, 1,
  12253. 1, 1, 1, 1, 1, 1, 1, 1,
  12254. 1, 1, 1, 1, 1, 1, 1, 1,
  12255. 1, 1, 1, 1, 1, 1, 1, 1,
  12256. 1, 1, 1, 1, 1, 1, 1, 1,
  12257. 1, 1, 1, 1, 1, 1, 1, 1,
  12258. 1, 1, 1, 1, 1, 1, 1, 1,
  12259. 1, 1, 1, 1, 1, 1, 1, 1,
  12260. 1, 1, 1, 1, 1, 1, 234, 234,
  12261. 234, 234, 234, 234, 234, 234, 234, 234,
  12262. 234, 234, 234, 234, 234, 234, 234, 234,
  12263. 234, 234, 234, 234, 234, 234, 234, 234,
  12264. 234, 234, 234, 234, 235, 236, 236, 236,
  12265. 236, 236, 236, 236, 236, 236, 236, 236,
  12266. 236, 237, 236, 236, 238, 239, 239, 239,
  12267. 240, 1, 1961, 1, 1962, 1, 1, 1,
  12268. 1, 1, 1, 1, 1, 1, 1, 1,
  12269. 1, 1, 1, 1, 1, 1, 1, 1,
  12270. 1, 1, 1, 1962, 1, 1963, 1, 1,
  12271. 1, 1964, 1, 1, 1, 1, 1, 1,
  12272. 1, 1, 1, 1, 1, 1, 1, 1,
  12273. 1, 1, 1, 1, 1963, 273, 274, 273,
  12274. 273, 273, 273, 273, 1965, 1, 273, 273,
  12275. 1966, 273, 433, 273, 273, 273, 273, 273,
  12276. 273, 273, 273, 273, 273, 273, 1, 1111,
  12277. 277, 273, 1, 273, 1967, 273, 273, 273,
  12278. 273, 273, 273, 273, 273, 273, 273, 273,
  12279. 273, 273, 273, 273, 273, 273, 273, 273,
  12280. 273, 273, 273, 273, 273, 273, 273, 1,
  12281. 1, 1, 273, 273, 273, 273, 273, 273,
  12282. 273, 273, 273, 273, 273, 273, 273, 273,
  12283. 273, 273, 273, 273, 273, 273, 273, 273,
  12284. 273, 273, 273, 273, 273, 273, 273, 273,
  12285. 273, 273, 273, 1, 1, 1, 1, 1,
  12286. 1, 1, 1, 1, 1, 1, 1, 1,
  12287. 1, 1, 1, 1, 1, 1, 1, 1,
  12288. 1, 1, 1, 1, 1, 1, 1, 1,
  12289. 1, 1, 1, 1, 1, 1, 1, 1,
  12290. 1, 1, 1, 1, 1, 1, 1, 1,
  12291. 1, 1, 1, 1, 1, 1, 1, 1,
  12292. 1, 1, 1, 1, 1, 1, 1, 1,
  12293. 1, 1, 1, 1, 1, 1, 278, 278,
  12294. 278, 278, 278, 278, 278, 278, 278, 278,
  12295. 278, 278, 278, 278, 278, 278, 278, 278,
  12296. 278, 278, 278, 278, 278, 278, 278, 278,
  12297. 278, 278, 278, 278, 279, 280, 280, 280,
  12298. 280, 280, 280, 280, 280, 280, 280, 280,
  12299. 280, 281, 280, 280, 282, 283, 283, 283,
  12300. 284, 1, 1968, 1, 1, 1, 1969, 1,
  12301. 1, 1, 1, 1, 1, 1, 1, 1,
  12302. 1, 1, 1, 1, 1, 1, 1, 1,
  12303. 1, 1968, 1970, 1971, 1970, 1970, 1970, 1970,
  12304. 1970, 1972, 1, 1970, 1970, 1973, 1970, 1974,
  12305. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12306. 1970, 1970, 1970, 1, 1975, 295, 1970, 1,
  12307. 1970, 1, 1970, 1970, 1970, 1970, 1970, 1970,
  12308. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12309. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12310. 1970, 1970, 1970, 1970, 1, 1, 1, 1970,
  12311. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12312. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12313. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12314. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  12315. 1, 1, 1, 1, 1, 1, 1, 1,
  12316. 1, 1, 1, 1, 1, 1, 1, 1,
  12317. 1, 1, 1, 1, 1, 1, 1, 1,
  12318. 1, 1, 1, 1, 1, 1, 1, 1,
  12319. 1, 1, 1, 1, 1, 1, 1, 1,
  12320. 1, 1, 1, 1, 1, 1, 1, 1,
  12321. 1, 1, 1, 1, 1, 1, 1, 1,
  12322. 1, 1, 1, 1, 1, 1, 1, 1,
  12323. 1, 1, 1, 1976, 1976, 1976, 1976, 1976,
  12324. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  12325. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  12326. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  12327. 1976, 1977, 1978, 1978, 1978, 1978, 1978, 1978,
  12328. 1978, 1978, 1978, 1978, 1978, 1978, 1979, 1978,
  12329. 1978, 1980, 1981, 1981, 1981, 1982, 1, 1983,
  12330. 1, 1, 1, 1984, 1, 1, 1, 1,
  12331. 1, 1, 1, 1, 1, 1, 1, 1,
  12332. 1, 1, 1, 1, 1, 1, 1983, 1985,
  12333. 1986, 1985, 1985, 1985, 1985, 1985, 1987, 1,
  12334. 1985, 1985, 378, 1985, 1988, 1985, 1985, 1985,
  12335. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12336. 1, 183, 1989, 1985, 1, 1985, 1990, 1985,
  12337. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12338. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12339. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12340. 1985, 1, 1, 1, 1985, 1985, 1985, 1985,
  12341. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12342. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12343. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  12344. 1985, 1985, 1985, 1985, 1985, 1, 1, 1,
  12345. 1, 1, 1, 1, 1, 1, 1, 1,
  12346. 1, 1, 1, 1, 1, 1, 1, 1,
  12347. 1, 1, 1, 1, 1, 1, 1, 1,
  12348. 1, 1, 1, 1, 1, 1, 1, 1,
  12349. 1, 1, 1, 1, 1, 1, 1, 1,
  12350. 1, 1, 1, 1, 1, 1, 1, 1,
  12351. 1, 1, 1, 1, 1, 1, 1, 1,
  12352. 1, 1, 1, 1, 1, 1, 1, 1,
  12353. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  12354. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  12355. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  12356. 1991, 1991, 1991, 1991, 1991, 1991, 1992, 1993,
  12357. 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
  12358. 1993, 1993, 1993, 1994, 1993, 1993, 1995, 1996,
  12359. 1996, 1996, 1997, 1, 1998, 1, 1, 1,
  12360. 1999, 1, 1, 1, 1, 1, 1, 1,
  12361. 1, 1, 1, 1, 1, 1, 1, 1,
  12362. 1, 1, 1, 1998, 2000, 2001, 2000, 2000,
  12363. 2000, 2000, 2000, 2002, 1, 2000, 2000, 378,
  12364. 2000, 2003, 2000, 2000, 2000, 2000, 2000, 2000,
  12365. 2000, 2000, 2000, 2000, 2000, 1, 183, 2004,
  12366. 2000, 1, 2000, 1, 2000, 2000, 2000, 2000,
  12367. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12368. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12369. 2000, 2000, 2000, 2000, 2000, 2000, 1, 1,
  12370. 1, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12371. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12372. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12373. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  12374. 2000, 2000, 1, 1, 1, 1, 1, 1,
  12375. 1, 1, 1, 1, 1, 1, 1, 1,
  12376. 1, 1, 1, 1, 1, 1, 1, 1,
  12377. 1, 1, 1, 1, 1, 1, 1, 1,
  12378. 1, 1, 1, 1, 1, 1, 1, 1,
  12379. 1, 1, 1, 1, 1, 1, 1, 1,
  12380. 1, 1, 1, 1, 1, 1, 1, 1,
  12381. 1, 1, 1, 1, 1, 1, 1, 1,
  12382. 1, 1, 1, 1, 1, 2005, 2005, 2005,
  12383. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  12384. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  12385. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  12386. 2005, 2005, 2005, 2006, 2007, 2007, 2007, 2007,
  12387. 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
  12388. 2008, 2007, 2007, 2009, 2010, 2010, 2010, 2011,
  12389. 1, 2012, 1, 1998, 1, 1, 1, 1,
  12390. 1, 1, 1, 1, 1, 1, 1, 1,
  12391. 1, 1, 1, 1, 1, 1, 1, 1,
  12392. 1, 1, 1998, 1, 2013, 1, 1, 1,
  12393. 2014, 1, 1, 1, 1, 1, 1, 1,
  12394. 1, 1, 1, 1, 1, 1, 1, 1,
  12395. 1, 1, 1, 2013, 2015, 2016, 2015, 2015,
  12396. 2015, 2015, 2015, 2017, 1, 2015, 2015, 2018,
  12397. 2015, 2019, 2015, 2015, 2015, 2015, 2015, 2015,
  12398. 2015, 2015, 2015, 2015, 2015, 1, 2020, 2021,
  12399. 2015, 1, 2015, 2022, 2015, 2015, 2015, 2015,
  12400. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12401. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12402. 2015, 2015, 2015, 2015, 2015, 2015, 1, 1,
  12403. 1, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12404. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12405. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12406. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  12407. 2015, 2015, 1, 1, 1, 1, 1, 1,
  12408. 1, 1, 1, 1, 1, 1, 1, 1,
  12409. 1, 1, 1, 1, 1, 1, 1, 1,
  12410. 1, 1, 1, 1, 1, 1, 1, 1,
  12411. 1, 1, 1, 1, 1, 1, 1, 1,
  12412. 1, 1, 1, 1, 1, 1, 1, 1,
  12413. 1, 1, 1, 1, 1, 1, 1, 1,
  12414. 1, 1, 1, 1, 1, 1, 1, 1,
  12415. 1, 1, 1, 1, 1, 2023, 2023, 2023,
  12416. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  12417. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  12418. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  12419. 2023, 2023, 2023, 2024, 2025, 2025, 2025, 2025,
  12420. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  12421. 2026, 2025, 2025, 2027, 2028, 2028, 2028, 2029,
  12422. 1, 2030, 1, 1, 1, 2031, 1, 1,
  12423. 1, 1, 1, 1, 1, 1, 1, 1,
  12424. 1, 1, 1, 1, 1, 1, 1, 1,
  12425. 2030, 2032, 2033, 2032, 2032, 2032, 2032, 2032,
  12426. 2034, 1, 2032, 2032, 2035, 2032, 2036, 2032,
  12427. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12428. 2032, 2032, 1, 2037, 2021, 2032, 1, 2032,
  12429. 2038, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12430. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12431. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12432. 2032, 2032, 2032, 1, 1, 1, 2032, 2032,
  12433. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12434. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12435. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12436. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 1,
  12437. 1, 1, 1, 1, 1, 1, 1, 1,
  12438. 1, 1, 1, 1, 1, 1, 1, 1,
  12439. 1, 1, 1, 1, 1, 1, 1, 1,
  12440. 1, 1, 1, 1, 1, 1, 1, 1,
  12441. 1, 1, 1, 1, 1, 1, 1, 1,
  12442. 1, 1, 1, 1, 1, 1, 1, 1,
  12443. 1, 1, 1, 1, 1, 1, 1, 1,
  12444. 1, 1, 1, 1, 1, 1, 1, 1,
  12445. 1, 1, 2039, 2039, 2039, 2039, 2039, 2039,
  12446. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12447. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12448. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12449. 2040, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  12450. 2041, 2041, 2041, 2041, 2041, 2042, 2041, 2041,
  12451. 2043, 2044, 2044, 2044, 2045, 1, 2046, 1,
  12452. 2047, 1, 1, 1, 1, 1, 1, 1,
  12453. 1, 1, 1, 1, 1, 1, 1, 1,
  12454. 1, 1, 1, 1, 1, 1, 1, 2047,
  12455. 1, 2048, 1, 1, 1, 2049, 1, 1,
  12456. 1, 1, 1, 1, 1, 1, 1, 1,
  12457. 1, 1, 1, 1, 1, 1, 1, 1,
  12458. 2048, 2032, 2033, 2032, 2032, 2032, 2032, 2032,
  12459. 2050, 1, 2032, 2032, 1, 2032, 2051, 2032,
  12460. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12461. 2032, 2032, 1, 1, 2021, 2032, 1, 2032,
  12462. 2051, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12463. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12464. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12465. 2032, 2032, 2032, 1, 1, 1, 2032, 2032,
  12466. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12467. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12468. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12469. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 1,
  12470. 1, 1, 1, 1, 1, 1, 1, 1,
  12471. 1, 1, 1, 1, 1, 1, 1, 1,
  12472. 1, 1, 1, 1, 1, 1, 1, 1,
  12473. 1, 1, 1, 1, 1, 1, 1, 1,
  12474. 1, 1, 1, 1, 1, 1, 1, 1,
  12475. 1, 1, 1, 1, 1, 1, 1, 1,
  12476. 1, 1, 1, 1, 1, 1, 1, 1,
  12477. 1, 1, 1, 1, 1, 1, 1, 1,
  12478. 1, 1, 2039, 2039, 2039, 2039, 2039, 2039,
  12479. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12480. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12481. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12482. 2040, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  12483. 2041, 2041, 2041, 2041, 2041, 2042, 2041, 2041,
  12484. 2043, 2044, 2044, 2044, 2045, 1, 2052, 1,
  12485. 2032, 1, 1, 1, 1, 1, 1, 1,
  12486. 1, 1, 1, 1, 1, 1, 1, 1,
  12487. 1, 1, 1, 1, 1, 1, 1, 2032,
  12488. 1, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12489. 2053, 2053, 1, 2053, 2053, 2054, 2053, 2053,
  12490. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12491. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12492. 2053, 2053, 2055, 2053, 2053, 2053, 2053, 2053,
  12493. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12494. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12495. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12496. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12497. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12498. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12499. 2053, 2053, 2053, 2053, 2056, 2053, 2053, 2053,
  12500. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12501. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12502. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12503. 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
  12504. 1, 1, 1, 1, 1, 1, 1, 1,
  12505. 1, 1, 1, 1, 1, 1, 1, 1,
  12506. 1, 1, 1, 1, 1, 1, 1, 1,
  12507. 1, 1, 1, 1, 1, 1, 1, 1,
  12508. 1, 1, 1, 1, 1, 1, 1, 1,
  12509. 1, 1, 1, 1, 1, 1, 1, 1,
  12510. 1, 1, 1, 1, 1, 1, 1, 1,
  12511. 1, 1, 1, 1, 1, 1, 1, 1,
  12512. 1, 1, 2057, 2057, 2057, 2057, 2057, 2057,
  12513. 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
  12514. 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
  12515. 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
  12516. 2058, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
  12517. 2059, 2059, 2059, 2059, 2059, 2060, 2059, 2059,
  12518. 2061, 2062, 2062, 2062, 2063, 1, 2064, 2064,
  12519. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 1,
  12520. 2064, 2064, 2065, 2064, 2064, 2064, 2064, 2064,
  12521. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12522. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2066,
  12523. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12524. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12525. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12526. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12527. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12528. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12529. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12530. 2064, 2067, 2064, 2064, 2064, 2064, 2064, 2064,
  12531. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12532. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12533. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12534. 2064, 2064, 2064, 2064, 2064, 1, 1, 1,
  12535. 1, 1, 1, 1, 1, 1, 1, 1,
  12536. 1, 1, 1, 1, 1, 1, 1, 1,
  12537. 1, 1, 1, 1, 1, 1, 1, 1,
  12538. 1, 1, 1, 1, 1, 1, 1, 1,
  12539. 1, 1, 1, 1, 1, 1, 1, 1,
  12540. 1, 1, 1, 1, 1, 1, 1, 1,
  12541. 1, 1, 1, 1, 1, 1, 1, 1,
  12542. 1, 1, 1, 1, 1, 1, 1, 2068,
  12543. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12544. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12545. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12546. 2068, 2068, 2068, 2068, 2068, 2069, 2070, 2070,
  12547. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12548. 2070, 2070, 2071, 2070, 2070, 2072, 2073, 2073,
  12549. 2073, 2074, 1, 2075, 1, 2064, 1, 1,
  12550. 1, 1, 1, 1, 1, 1, 1, 1,
  12551. 1, 1, 1, 1, 1, 1, 1, 1,
  12552. 1, 1, 1, 1, 2064, 1, 2064, 2064,
  12553. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12554. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12555. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12556. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12557. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12558. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12559. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12560. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12561. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12562. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12563. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12564. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12565. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12566. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12567. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12568. 2064, 2064, 2064, 2064, 2064, 2064, 1, 1,
  12569. 1, 1, 1, 1, 1, 1, 1, 1,
  12570. 1, 1, 1, 1, 1, 1, 1, 1,
  12571. 1, 1, 1, 1, 1, 1, 1, 1,
  12572. 1, 1, 1, 1, 1, 1, 1, 1,
  12573. 1, 1, 1, 1, 1, 1, 1, 1,
  12574. 1, 1, 1, 1, 1, 1, 1, 1,
  12575. 1, 1, 1, 1, 1, 1, 1, 1,
  12576. 1, 1, 1, 1, 1, 1, 1, 1,
  12577. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12578. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12579. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12580. 2068, 2068, 2068, 2068, 2068, 2068, 2069, 2070,
  12581. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12582. 2070, 2070, 2070, 2071, 2070, 2070, 2072, 2073,
  12583. 2073, 2073, 2074, 1, 2064, 2064, 2064, 2064,
  12584. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12585. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12586. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12587. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12588. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12589. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12590. 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
  12591. 2064, 2064, 2064, 2064, 1, 2068, 2068, 2068,
  12592. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12593. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12594. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12595. 2068, 2068, 2068, 2068, 2068, 1, 2068, 2068,
  12596. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12597. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12598. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12599. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12600. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12601. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12602. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12603. 2068, 2068, 2068, 2068, 2068, 2068, 1, 2068,
  12604. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12605. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12606. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
  12607. 2068, 2068, 2068, 2068, 2068, 2068, 2068, 1,
  12608. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12609. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12610. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12611. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12612. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12613. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12614. 1, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12615. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12616. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12617. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12618. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12619. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12620. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12621. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12622. 2070, 1, 2070, 2070, 2070, 2070, 2070, 2070,
  12623. 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070,
  12624. 2070, 2070, 1, 2076, 1, 1, 1, 2077,
  12625. 1, 1, 1, 1, 1, 1, 1, 1,
  12626. 1, 1, 1, 1, 1, 1, 1, 1,
  12627. 1, 1, 2076, 2078, 2079, 2078, 2078, 2078,
  12628. 2078, 2078, 2080, 1, 2078, 2078, 1, 2078,
  12629. 2081, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12630. 2078, 2078, 2078, 2078, 1, 1, 2082, 2078,
  12631. 1, 2078, 2081, 2078, 2078, 2078, 2078, 2078,
  12632. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12633. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12634. 2078, 2078, 2078, 2078, 2078, 1, 1, 1,
  12635. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12636. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12637. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12638. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12639. 2078, 1, 1, 1, 1, 1, 1, 1,
  12640. 1, 1, 1, 1, 1, 1, 1, 1,
  12641. 1, 1, 1, 1, 1, 1, 1, 1,
  12642. 1, 1, 1, 1, 1, 1, 1, 1,
  12643. 1, 1, 1, 1, 1, 1, 1, 1,
  12644. 1, 1, 1, 1, 1, 1, 1, 1,
  12645. 1, 1, 1, 1, 1, 1, 1, 1,
  12646. 1, 1, 1, 1, 1, 1, 1, 1,
  12647. 1, 1, 1, 1, 2083, 2083, 2083, 2083,
  12648. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12649. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12650. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12651. 2083, 2083, 2084, 2085, 2085, 2085, 2085, 2085,
  12652. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2086,
  12653. 2085, 2085, 2087, 2088, 2088, 2088, 2089, 1,
  12654. 2090, 1, 1, 1, 2091, 1, 1, 1,
  12655. 1, 1, 1, 1, 1, 1, 1, 1,
  12656. 1, 1, 1, 1, 1, 1, 1, 2090,
  12657. 2032, 2033, 2032, 2032, 2032, 2032, 2032, 2092,
  12658. 1, 2032, 2032, 1, 2032, 2051, 2032, 2032,
  12659. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12660. 2032, 1, 1, 2021, 2032, 1, 2032, 2051,
  12661. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12662. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12663. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12664. 2032, 2032, 1, 1, 1, 2032, 2032, 2032,
  12665. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12666. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12667. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12668. 2032, 2032, 2032, 2032, 2032, 2032, 1, 1,
  12669. 1, 1, 1, 1, 1, 1, 1, 1,
  12670. 1, 1, 1, 1, 1, 1, 1, 1,
  12671. 1, 1, 1, 1, 1, 1, 1, 1,
  12672. 1, 1, 1, 1, 1, 1, 1, 1,
  12673. 1, 1, 1, 1, 1, 1, 1, 1,
  12674. 1, 1, 1, 1, 1, 1, 1, 1,
  12675. 1, 1, 1, 1, 1, 1, 1, 1,
  12676. 1, 1, 1, 1, 1, 1, 1, 1,
  12677. 1, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12678. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12679. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12680. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2040,
  12681. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  12682. 2041, 2041, 2041, 2041, 2042, 2041, 2041, 2043,
  12683. 2044, 2044, 2044, 2045, 1, 2093, 1, 1,
  12684. 1, 2094, 1, 1, 1, 1, 1, 1,
  12685. 1, 1, 1, 1, 1, 1, 1, 1,
  12686. 1, 1, 1, 1, 2093, 2032, 2033, 2032,
  12687. 2032, 2032, 2032, 2032, 2095, 1, 2032, 2032,
  12688. 1, 2032, 1, 2032, 2032, 2032, 2032, 2032,
  12689. 2032, 2032, 2032, 2032, 2032, 2032, 1, 1,
  12690. 2004, 2032, 1, 2032, 1, 2032, 2032, 2032,
  12691. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12692. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12693. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 1,
  12694. 1, 1, 2032, 2032, 2032, 2032, 2032, 2032,
  12695. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12696. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12697. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  12698. 2032, 2032, 2032, 1, 1, 1, 1, 1,
  12699. 1, 1, 1, 1, 1, 1, 1, 1,
  12700. 1, 1, 1, 1, 1, 1, 1, 1,
  12701. 1, 1, 1, 1, 1, 1, 1, 1,
  12702. 1, 1, 1, 1, 1, 1, 1, 1,
  12703. 1, 1, 1, 1, 1, 1, 1, 1,
  12704. 1, 1, 1, 1, 1, 1, 1, 1,
  12705. 1, 1, 1, 1, 1, 1, 1, 1,
  12706. 1, 1, 1, 1, 1, 1, 2039, 2039,
  12707. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12708. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12709. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  12710. 2039, 2039, 2039, 2039, 2040, 2041, 2041, 2041,
  12711. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  12712. 2041, 2042, 2041, 2041, 2043, 2044, 2044, 2044,
  12713. 2045, 1, 2096, 1, 2093, 1, 1, 1,
  12714. 1, 1, 1, 1, 1, 1, 1, 1,
  12715. 1, 1, 1, 1, 1, 1, 1, 1,
  12716. 1, 1, 1, 2093, 1, 2097, 1, 1,
  12717. 1, 2098, 1, 1, 1, 1, 1, 1,
  12718. 1, 1, 1, 1, 1, 1, 1, 1,
  12719. 1, 1, 1, 1, 2097, 2078, 2079, 2078,
  12720. 2078, 2078, 2078, 2078, 2099, 1, 2078, 2078,
  12721. 1, 2078, 1, 2078, 2078, 2078, 2078, 2078,
  12722. 2078, 2078, 2078, 2078, 2078, 2078, 1, 1,
  12723. 2100, 2078, 1, 2078, 1, 2078, 2078, 2078,
  12724. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12725. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12726. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 1,
  12727. 1, 1, 2078, 2078, 2078, 2078, 2078, 2078,
  12728. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12729. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12730. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  12731. 2078, 2078, 2078, 1, 1, 1, 1, 1,
  12732. 1, 1, 1, 1, 1, 1, 1, 1,
  12733. 1, 1, 1, 1, 1, 1, 1, 1,
  12734. 1, 1, 1, 1, 1, 1, 1, 1,
  12735. 1, 1, 1, 1, 1, 1, 1, 1,
  12736. 1, 1, 1, 1, 1, 1, 1, 1,
  12737. 1, 1, 1, 1, 1, 1, 1, 1,
  12738. 1, 1, 1, 1, 1, 1, 1, 1,
  12739. 1, 1, 1, 1, 1, 1, 2083, 2083,
  12740. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12741. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12742. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  12743. 2083, 2083, 2083, 2083, 2084, 2085, 2085, 2085,
  12744. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  12745. 2085, 2086, 2085, 2085, 2087, 2088, 2088, 2088,
  12746. 2089, 1, 2101, 1, 1, 1, 2102, 1,
  12747. 1, 1, 1, 1, 1, 1, 1, 1,
  12748. 1, 1, 1, 1, 1, 1, 1, 1,
  12749. 1, 2101, 2103, 2104, 2103, 2103, 2103, 2103,
  12750. 2103, 2105, 1, 2103, 2103, 2106, 2103, 2107,
  12751. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12752. 2103, 2103, 2103, 1, 1, 1, 2103, 1,
  12753. 2103, 2108, 2103, 2103, 2103, 2103, 2103, 2103,
  12754. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12755. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12756. 2103, 2103, 2103, 2103, 1, 1, 1, 2103,
  12757. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12758. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12759. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12760. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12761. 1, 1, 1, 1, 1, 1, 1, 1,
  12762. 1, 1, 1, 1, 1, 1, 1, 1,
  12763. 1, 1, 1, 1, 1, 1, 1, 1,
  12764. 1, 1, 1, 1, 1, 1, 1, 1,
  12765. 1, 1, 1, 1, 1, 1, 1, 1,
  12766. 1, 1, 1, 1, 1, 1, 1, 1,
  12767. 1, 1, 1, 1, 1, 1, 1, 1,
  12768. 1, 1, 1, 1, 1, 1, 1, 1,
  12769. 1, 1, 1, 2109, 2109, 2109, 2109, 2109,
  12770. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12771. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12772. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12773. 2109, 2110, 2111, 2111, 2111, 2111, 2111, 2111,
  12774. 2111, 2111, 2111, 2111, 2111, 2111, 2112, 2111,
  12775. 2111, 2113, 2114, 2114, 2114, 2115, 1, 2116,
  12776. 1, 1, 1, 2117, 1, 1, 1, 1,
  12777. 1, 1, 1, 1, 1, 1, 1, 1,
  12778. 1, 1, 1, 1, 1, 1, 2116, 2103,
  12779. 2104, 2103, 2103, 2103, 2103, 2103, 2118, 1,
  12780. 2103, 2103, 2119, 2103, 2107, 2103, 2103, 2103,
  12781. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12782. 1, 1, 1, 2103, 1, 2103, 2120, 2103,
  12783. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12784. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12785. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12786. 2103, 1, 1, 1, 2103, 2103, 2103, 2103,
  12787. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12788. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12789. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  12790. 2103, 2103, 2103, 2103, 2103, 1, 1, 1,
  12791. 1, 1, 1, 1, 1, 1, 1, 1,
  12792. 1, 1, 1, 1, 1, 1, 1, 1,
  12793. 1, 1, 1, 1, 1, 1, 1, 1,
  12794. 1, 1, 1, 1, 1, 1, 1, 1,
  12795. 1, 1, 1, 1, 1, 1, 1, 1,
  12796. 1, 1, 1, 1, 1, 1, 1, 1,
  12797. 1, 1, 1, 1, 1, 1, 1, 1,
  12798. 1, 1, 1, 1, 1, 1, 1, 1,
  12799. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12800. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12801. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  12802. 2109, 2109, 2109, 2109, 2109, 2109, 2110, 2111,
  12803. 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
  12804. 2111, 2111, 2111, 2112, 2111, 2111, 2113, 2114,
  12805. 2114, 2114, 2115, 1, 2121, 1, 2116, 1,
  12806. 1, 1, 1, 1, 1, 1, 1, 1,
  12807. 1, 1, 1, 1, 1, 1, 1, 1,
  12808. 1, 1, 1, 1, 1, 2116, 1, 2122,
  12809. 1, 1, 1, 2123, 1, 1, 1, 1,
  12810. 1, 1, 1, 1, 1, 1, 1, 1,
  12811. 1, 1, 1, 1, 1, 1, 2122, 2124,
  12812. 2125, 2124, 2124, 2124, 2124, 2124, 2126, 1,
  12813. 2124, 2124, 1, 2124, 2127, 2124, 2124, 2124,
  12814. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12815. 1, 1, 1, 2124, 2128, 2124, 2129, 2124,
  12816. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12817. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12818. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12819. 2124, 1, 1, 1, 2124, 2124, 2124, 2124,
  12820. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12821. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12822. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  12823. 2124, 2124, 2124, 2124, 2124, 1, 1, 1,
  12824. 1, 1, 1, 1, 1, 1, 1, 1,
  12825. 1, 1, 1, 1, 1, 1, 1, 1,
  12826. 1, 1, 1, 1, 1, 1, 1, 1,
  12827. 1, 1, 1, 1, 1, 1, 1, 1,
  12828. 1, 1, 1, 1, 1, 1, 1, 1,
  12829. 1, 1, 1, 1, 1, 1, 1, 1,
  12830. 1, 1, 1, 1, 1, 1, 1, 1,
  12831. 1, 1, 1, 1, 1, 1, 1, 1,
  12832. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  12833. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  12834. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  12835. 2130, 2130, 2130, 2130, 2130, 2130, 2131, 2132,
  12836. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  12837. 2132, 2132, 2132, 2133, 2132, 2132, 2134, 2135,
  12838. 2135, 2135, 2136, 1, 2137, 1, 1, 1,
  12839. 2138, 1, 1, 1, 1, 1, 1, 1,
  12840. 1, 1, 1, 1, 1, 1, 1, 1,
  12841. 1, 1, 1, 2137, 1, 1, 1, 1,
  12842. 1, 1, 1, 2139, 1, 1, 1, 1,
  12843. 1, 2140, 1, 1, 1, 1, 1, 1,
  12844. 1, 1, 1, 1, 1, 1, 1, 1,
  12845. 1, 2141, 1, 2142, 1, 2143, 1, 2137,
  12846. 1, 1, 1, 1, 1, 1, 1, 1,
  12847. 1, 1, 1, 1, 1, 1, 1, 1,
  12848. 1, 1, 1, 1, 1, 1, 2137, 1,
  12849. 2144, 1, 1, 1, 2145, 1, 1, 1,
  12850. 1, 1, 1, 1, 1, 1, 1, 1,
  12851. 1, 1, 1, 1, 1, 1, 1, 2144,
  12852. 1, 1, 1, 1, 1, 1, 1, 2146,
  12853. 1, 1, 1, 1, 1, 2147, 1, 1,
  12854. 1, 1, 1, 1, 1, 1, 1, 1,
  12855. 1, 1, 1, 1, 1, 2148, 1, 2149,
  12856. 1, 2140, 1, 1, 1, 2150, 1, 1,
  12857. 1, 1, 1, 1, 1, 1, 1, 1,
  12858. 1, 1, 1, 1, 1, 1, 1, 1,
  12859. 2140, 2151, 2152, 2151, 2151, 2151, 2151, 2151,
  12860. 2153, 1, 2151, 2151, 1, 2151, 1, 2151,
  12861. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12862. 2151, 2151, 1, 1, 1, 2151, 1, 2151,
  12863. 1, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12864. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12865. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12866. 2151, 2151, 2151, 1, 1, 1, 2151, 2151,
  12867. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12868. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12869. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12870. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 1,
  12871. 1, 1, 1, 1, 1, 1, 1, 1,
  12872. 1, 1, 1, 1, 1, 1, 1, 1,
  12873. 1, 1, 1, 1, 1, 1, 1, 1,
  12874. 1, 1, 1, 1, 1, 1, 1, 1,
  12875. 1, 1, 1, 1, 1, 1, 1, 1,
  12876. 1, 1, 1, 1, 1, 1, 1, 1,
  12877. 1, 1, 1, 1, 1, 1, 1, 1,
  12878. 1, 1, 1, 1, 1, 1, 1, 1,
  12879. 1, 1, 2154, 2154, 2154, 2154, 2154, 2154,
  12880. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12881. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12882. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12883. 2155, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  12884. 2156, 2156, 2156, 2156, 2156, 2157, 2156, 2156,
  12885. 2158, 2159, 2159, 2159, 2160, 1, 2161, 1,
  12886. 2140, 1, 1, 1, 1, 1, 1, 1,
  12887. 1, 1, 1, 1, 1, 1, 1, 1,
  12888. 1, 1, 1, 1, 1, 1, 1, 2140,
  12889. 1, 2162, 1, 1, 1, 2163, 1, 1,
  12890. 1, 1, 1, 1, 1, 1, 1, 1,
  12891. 1, 1, 1, 1, 1, 1, 1, 1,
  12892. 2162, 2151, 1, 2151, 2151, 2151, 2151, 2151,
  12893. 2164, 1, 2151, 2151, 1, 2151, 2140, 2151,
  12894. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12895. 2151, 2151, 1, 1, 1, 2151, 2141, 2151,
  12896. 2165, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12897. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12898. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12899. 2151, 2151, 2151, 1, 1, 1, 2151, 2151,
  12900. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12901. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12902. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  12903. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 1,
  12904. 1, 1, 1, 1, 1, 1, 1, 1,
  12905. 1, 1, 1, 1, 1, 1, 1, 1,
  12906. 1, 1, 1, 1, 1, 1, 1, 1,
  12907. 1, 1, 1, 1, 1, 1, 1, 1,
  12908. 1, 1, 1, 1, 1, 1, 1, 1,
  12909. 1, 1, 1, 1, 1, 1, 1, 1,
  12910. 1, 1, 1, 1, 1, 1, 1, 1,
  12911. 1, 1, 1, 1, 1, 1, 1, 1,
  12912. 1, 1, 2154, 2154, 2154, 2154, 2154, 2154,
  12913. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12914. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12915. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  12916. 2155, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  12917. 2156, 2156, 2156, 2156, 2156, 2157, 2156, 2156,
  12918. 2158, 2159, 2159, 2159, 2160, 1, 2162, 1,
  12919. 1, 1, 2163, 1, 1, 1, 1, 1,
  12920. 1, 1, 1, 1, 1, 1, 1, 1,
  12921. 1, 1, 1, 1, 1, 2162, 1, 1,
  12922. 1, 1, 1, 1, 1, 2164, 1, 1,
  12923. 1, 1, 1, 2140, 1, 1, 1, 1,
  12924. 1, 1, 1, 1, 1, 1, 1, 1,
  12925. 1, 1, 1, 2141, 1, 2165, 1, 2166,
  12926. 1, 2162, 1, 1, 1, 1, 1, 1,
  12927. 1, 1, 1, 1, 1, 1, 1, 1,
  12928. 1, 1, 1, 1, 1, 1, 1, 1,
  12929. 2162, 1, 2167, 1, 1, 1, 2168, 1,
  12930. 1, 1, 1, 1, 1, 1, 1, 1,
  12931. 1, 1, 1, 1, 1, 1, 1, 1,
  12932. 1, 2167, 1, 1, 1, 1, 1, 1,
  12933. 1, 2169, 1, 1, 1, 1, 1, 2147,
  12934. 1, 1, 1, 1, 1, 1, 1, 1,
  12935. 1, 1, 1, 1, 1, 1, 1, 2148,
  12936. 1, 2170, 1, 2141, 1, 1, 1, 2171,
  12937. 1, 1, 1, 1, 1, 1, 1, 1,
  12938. 1, 1, 1, 1, 1, 1, 1, 1,
  12939. 1, 1, 2141, 1, 1, 1, 1, 1,
  12940. 1, 1, 2172, 1, 1, 1, 2173, 1,
  12941. 1, 1, 1, 1, 1, 1, 1, 1,
  12942. 1, 1, 1, 1, 1, 2174, 1, 2175,
  12943. 1, 2141, 1, 1, 1, 1, 1, 1,
  12944. 1, 1, 1, 1, 1, 1, 1, 1,
  12945. 1, 1, 1, 1, 1, 1, 1, 1,
  12946. 2141, 1, 2148, 1, 1, 1, 2176, 1,
  12947. 1, 1, 1, 1, 1, 1, 1, 1,
  12948. 1, 1, 1, 1, 1, 1, 1, 1,
  12949. 1, 2148, 1, 1, 1, 1, 1, 1,
  12950. 1, 2177, 1, 1, 1, 2178, 1, 1,
  12951. 1, 1, 1, 1, 1, 1, 1, 1,
  12952. 1, 1, 1, 1, 2179, 1, 2180, 1,
  12953. 183, 1, 1, 1, 1, 1, 1, 1,
  12954. 1, 1, 1, 1, 1, 1, 1, 1,
  12955. 1, 1, 1, 1, 1, 1, 1, 183,
  12956. 1, 2181, 1, 1, 1, 2182, 1, 1,
  12957. 1, 1, 1, 1, 1, 1, 1, 1,
  12958. 1, 1, 1, 1, 1, 1, 1, 1,
  12959. 2181, 2183, 2184, 2183, 2183, 2183, 2183, 2183,
  12960. 2185, 1, 2183, 2183, 1, 2183, 2186, 2183,
  12961. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12962. 2183, 2183, 1, 1, 1, 2183, 1, 2183,
  12963. 1, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12964. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12965. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12966. 2183, 2183, 2183, 2187, 1, 1, 2183, 2183,
  12967. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12968. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12969. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
  12970. 2183, 2183, 2183, 2183, 2183, 2183, 2183, 1,
  12971. 1, 1, 1, 1, 1, 1, 1, 1,
  12972. 1, 1, 1, 1, 1, 1, 1, 1,
  12973. 1, 1, 1, 1, 1, 1, 1, 1,
  12974. 1, 1, 1, 1, 1, 1, 1, 1,
  12975. 1, 1, 1, 1, 1, 1, 1, 1,
  12976. 1, 1, 1, 1, 1, 1, 1, 1,
  12977. 1, 1, 1, 1, 1, 1, 1, 1,
  12978. 1, 1, 1, 1, 1, 1, 1, 1,
  12979. 1, 1, 2188, 2188, 2188, 2188, 2188, 2188,
  12980. 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
  12981. 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
  12982. 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188,
  12983. 2189, 2190, 2190, 2190, 2190, 2190, 2190, 2190,
  12984. 2190, 2190, 2190, 2190, 2190, 2191, 2190, 2190,
  12985. 2192, 2193, 2193, 2193, 2194, 1, 2195, 1,
  12986. 1, 1, 2196, 1, 1, 1, 1, 1,
  12987. 1, 1, 1, 1, 1, 1, 1, 1,
  12988. 1, 1, 1, 1, 1, 2195, 2197, 2198,
  12989. 2197, 2197, 2197, 2197, 2197, 2199, 1, 2197,
  12990. 2197, 1, 2197, 2200, 2197, 2197, 2197, 2197,
  12991. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 1,
  12992. 1, 1, 2197, 1, 2197, 1, 2197, 2197,
  12993. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  12994. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  12995. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  12996. 2201, 1, 1, 2197, 2197, 2197, 2197, 2197,
  12997. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  12998. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  12999. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13000. 2197, 2197, 2197, 2197, 1, 1, 1, 1,
  13001. 1, 1, 1, 1, 1, 1, 1, 1,
  13002. 1, 1, 1, 1, 1, 1, 1, 1,
  13003. 1, 1, 1, 1, 1, 1, 1, 1,
  13004. 1, 1, 1, 1, 1, 1, 1, 1,
  13005. 1, 1, 1, 1, 1, 1, 1, 1,
  13006. 1, 1, 1, 1, 1, 1, 1, 1,
  13007. 1, 1, 1, 1, 1, 1, 1, 1,
  13008. 1, 1, 1, 1, 1, 1, 1, 2202,
  13009. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13010. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13011. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13012. 2202, 2202, 2202, 2202, 2202, 2203, 2204, 2204,
  13013. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13014. 2204, 2204, 2205, 2204, 2204, 2206, 2207, 2207,
  13015. 2207, 2208, 1, 2209, 1, 2195, 1, 1,
  13016. 1, 1, 1, 1, 1, 1, 1, 1,
  13017. 1, 1, 1, 1, 1, 1, 1, 1,
  13018. 1, 1, 1, 1, 2195, 1, 2210, 1,
  13019. 1, 1, 2211, 1, 1, 1, 1, 1,
  13020. 1, 1, 1, 1, 1, 1, 1, 1,
  13021. 1, 1, 1, 1, 1, 2210, 2197, 2198,
  13022. 2197, 2197, 2197, 2197, 2197, 2212, 1, 2197,
  13023. 2197, 1, 2197, 2213, 2197, 2197, 2197, 2197,
  13024. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 1,
  13025. 1, 1, 2197, 2214, 2197, 1, 2197, 2197,
  13026. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13027. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13028. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13029. 1, 1, 1, 2197, 2197, 2197, 2197, 2197,
  13030. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13031. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13032. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13033. 2197, 2197, 2197, 2197, 1, 1, 1, 1,
  13034. 1, 1, 1, 1, 1, 1, 1, 1,
  13035. 1, 1, 1, 1, 1, 1, 1, 1,
  13036. 1, 1, 1, 1, 1, 1, 1, 1,
  13037. 1, 1, 1, 1, 1, 1, 1, 1,
  13038. 1, 1, 1, 1, 1, 1, 1, 1,
  13039. 1, 1, 1, 1, 1, 1, 1, 1,
  13040. 1, 1, 1, 1, 1, 1, 1, 1,
  13041. 1, 1, 1, 1, 1, 1, 1, 2202,
  13042. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13043. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13044. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13045. 2202, 2202, 2202, 2202, 2202, 2203, 2204, 2204,
  13046. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13047. 2204, 2204, 2205, 2204, 2204, 2206, 2207, 2207,
  13048. 2207, 2208, 1, 2210, 1, 1, 1, 2211,
  13049. 1, 1, 1, 1, 1, 1, 1, 1,
  13050. 1, 1, 1, 1, 1, 1, 1, 1,
  13051. 1, 1, 2210, 1, 1, 1, 1, 1,
  13052. 1, 1, 2212, 1, 1, 1, 1, 1,
  13053. 2215, 1, 1, 1, 1, 1, 1, 1,
  13054. 1, 1, 1, 1, 1, 1, 1, 1,
  13055. 2214, 1, 2216, 1, 2210, 1, 1, 1,
  13056. 1, 1, 1, 1, 1, 1, 1, 1,
  13057. 1, 1, 1, 1, 1, 1, 1, 1,
  13058. 1, 1, 1, 2210, 1, 2217, 1, 1,
  13059. 1, 2218, 1, 1, 1, 1, 1, 1,
  13060. 1, 1, 1, 1, 1, 1, 1, 1,
  13061. 1, 1, 1, 1, 2217, 1, 1, 1,
  13062. 1, 1, 1, 1, 2219, 1, 1, 1,
  13063. 1, 1, 2220, 1, 1, 1, 1, 1,
  13064. 1, 1, 1, 1, 1, 1, 1, 1,
  13065. 1, 1, 2221, 1, 2215, 1, 1, 1,
  13066. 2222, 1, 1, 1, 1, 1, 1, 1,
  13067. 1, 1, 1, 1, 1, 1, 1, 1,
  13068. 1, 1, 1, 2215, 2223, 1, 2223, 2223,
  13069. 2223, 2223, 2223, 2224, 1, 2223, 2223, 1,
  13070. 2223, 1, 2223, 2223, 2223, 2223, 2223, 2223,
  13071. 2223, 2223, 2223, 2223, 2223, 1, 1, 1,
  13072. 2223, 1, 2223, 1, 2223, 2223, 2223, 2223,
  13073. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13074. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13075. 2223, 2223, 2223, 2223, 2223, 2223, 1, 1,
  13076. 1, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13077. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13078. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13079. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13080. 2223, 2223, 1, 1, 1, 1, 1, 1,
  13081. 1, 1, 1, 1, 1, 1, 1, 1,
  13082. 1, 1, 1, 1, 1, 1, 1, 1,
  13083. 1, 1, 1, 1, 1, 1, 1, 1,
  13084. 1, 1, 1, 1, 1, 1, 1, 1,
  13085. 1, 1, 1, 1, 1, 1, 1, 1,
  13086. 1, 1, 1, 1, 1, 1, 1, 1,
  13087. 1, 1, 1, 1, 1, 1, 1, 1,
  13088. 1, 1, 1, 1, 1, 2225, 2225, 2225,
  13089. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13090. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13091. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13092. 2225, 2225, 2225, 2226, 2227, 2227, 2227, 2227,
  13093. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13094. 2228, 2227, 2227, 2229, 2230, 2230, 2230, 2231,
  13095. 1, 2232, 1, 2215, 1, 1, 1, 1,
  13096. 1, 1, 1, 1, 1, 1, 1, 1,
  13097. 1, 1, 1, 1, 1, 1, 1, 1,
  13098. 1, 1, 2215, 1, 2210, 1, 1, 1,
  13099. 2211, 1, 1, 1, 1, 1, 1, 1,
  13100. 1, 1, 1, 1, 1, 1, 1, 1,
  13101. 1, 1, 1, 2210, 2223, 1, 2223, 2223,
  13102. 2223, 2223, 2223, 2212, 1, 2223, 2223, 1,
  13103. 2223, 2215, 2223, 2223, 2223, 2223, 2223, 2223,
  13104. 2223, 2223, 2223, 2223, 2223, 1, 1, 1,
  13105. 2223, 2214, 2223, 1, 2223, 2223, 2223, 2223,
  13106. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13107. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13108. 2223, 2223, 2223, 2223, 2223, 2223, 1, 1,
  13109. 1, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13110. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13111. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13112. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13113. 2223, 2223, 1, 1, 1, 1, 1, 1,
  13114. 1, 1, 1, 1, 1, 1, 1, 1,
  13115. 1, 1, 1, 1, 1, 1, 1, 1,
  13116. 1, 1, 1, 1, 1, 1, 1, 1,
  13117. 1, 1, 1, 1, 1, 1, 1, 1,
  13118. 1, 1, 1, 1, 1, 1, 1, 1,
  13119. 1, 1, 1, 1, 1, 1, 1, 1,
  13120. 1, 1, 1, 1, 1, 1, 1, 1,
  13121. 1, 1, 1, 1, 1, 2225, 2225, 2225,
  13122. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13123. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13124. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13125. 2225, 2225, 2225, 2226, 2227, 2227, 2227, 2227,
  13126. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13127. 2228, 2227, 2227, 2229, 2230, 2230, 2230, 2231,
  13128. 1, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13129. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13130. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13131. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13132. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13133. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13134. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13135. 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
  13136. 2223, 1, 2225, 2225, 2225, 2225, 2225, 2225,
  13137. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13138. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13139. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13140. 2225, 2225, 1, 2225, 2225, 2225, 2225, 2225,
  13141. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13142. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13143. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13144. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13145. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13146. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13147. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13148. 2225, 2225, 2225, 1, 2225, 2225, 2225, 2225,
  13149. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13150. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13151. 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225,
  13152. 2225, 2225, 2225, 2225, 1, 2227, 2227, 2227,
  13153. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13154. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13155. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13156. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13157. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13158. 2227, 2227, 2227, 2227, 2227, 1, 2227, 2227,
  13159. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13160. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13161. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13162. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13163. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13164. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13165. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13166. 2227, 2227, 2227, 2227, 2227, 2227, 1, 2227,
  13167. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227,
  13168. 2227, 2227, 2227, 2227, 2227, 2227, 2227, 1,
  13169. 2220, 1, 1, 1, 2233, 1, 1, 1,
  13170. 1, 1, 1, 1, 1, 1, 1, 1,
  13171. 1, 1, 1, 1, 1, 1, 1, 2220,
  13172. 2234, 1, 2234, 2234, 2234, 2234, 2234, 2235,
  13173. 1, 2234, 2234, 1, 2234, 1, 2234, 2234,
  13174. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13175. 2234, 1, 1, 1, 2234, 1, 2234, 1,
  13176. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13177. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13178. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13179. 2234, 2234, 1, 1, 1, 2234, 2234, 2234,
  13180. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13181. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13182. 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
  13183. 2234, 2234, 2234, 2234, 2234, 2234, 1, 1,
  13184. 1, 1, 1, 1, 1, 1, 1, 1,
  13185. 1, 1, 1, 1, 1, 1, 1, 1,
  13186. 1, 1, 1, 1, 1, 1, 1, 1,
  13187. 1, 1, 1, 1, 1, 1, 1, 1,
  13188. 1, 1, 1, 1, 1, 1, 1, 1,
  13189. 1, 1, 1, 1, 1, 1, 1, 1,
  13190. 1, 1, 1, 1, 1, 1, 1, 1,
  13191. 1, 1, 1, 1, 1, 1, 1, 1,
  13192. 1, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
  13193. 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
  13194. 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236,
  13195. 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2237,
  13196. 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
  13197. 2238, 2238, 2238, 2238, 2239, 2238, 2238, 2240,
  13198. 2241, 2241, 2241, 2242, 1, 2243, 2243, 2243,
  13199. 2243, 2243, 2243, 2243, 2243, 2198, 1, 2243,
  13200. 2243, 2244, 2243, 2243, 2243, 2243, 2243, 2243,
  13201. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13202. 2243, 2243, 2243, 2243, 2198, 2243, 1, 2243,
  13203. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13204. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13205. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13206. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13207. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13208. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13209. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13210. 2245, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13211. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13212. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13213. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13214. 2243, 2243, 2243, 2243, 1, 1, 1, 1,
  13215. 1, 1, 1, 1, 1, 1, 1, 1,
  13216. 1, 1, 1, 1, 1, 1, 1, 1,
  13217. 1, 1, 1, 1, 1, 1, 1, 1,
  13218. 1, 1, 1, 1, 1, 1, 1, 1,
  13219. 1, 1, 1, 1, 1, 1, 1, 1,
  13220. 1, 1, 1, 1, 1, 1, 1, 1,
  13221. 1, 1, 1, 1, 1, 1, 1, 1,
  13222. 1, 1, 1, 1, 1, 1, 2246, 2246,
  13223. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13224. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13225. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13226. 2246, 2246, 2246, 2246, 2247, 2248, 2248, 2248,
  13227. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13228. 2248, 2249, 2248, 2248, 2250, 2251, 2251, 2251,
  13229. 2252, 1, 2243, 2243, 2243, 2243, 2243, 2243,
  13230. 2243, 2243, 2243, 1, 2243, 2243, 2253, 2243,
  13231. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13232. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13233. 2243, 2243, 2243, 2254, 2243, 2243, 2243, 2243,
  13234. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13235. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13236. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13237. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13238. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13239. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13240. 2243, 2243, 2243, 2243, 2243, 2245, 2243, 2243,
  13241. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13242. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13243. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13244. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13245. 2243, 1, 1, 1, 1, 1, 1, 1,
  13246. 1, 1, 1, 1, 1, 1, 1, 1,
  13247. 1, 1, 1, 1, 1, 1, 1, 1,
  13248. 1, 1, 1, 1, 1, 1, 1, 1,
  13249. 1, 1, 1, 1, 1, 1, 1, 1,
  13250. 1, 1, 1, 1, 1, 1, 1, 1,
  13251. 1, 1, 1, 1, 1, 1, 1, 1,
  13252. 1, 1, 1, 1, 1, 1, 1, 1,
  13253. 1, 1, 1, 2246, 2246, 2246, 2246, 2246,
  13254. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13255. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13256. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13257. 2246, 2247, 2248, 2248, 2248, 2248, 2248, 2248,
  13258. 2248, 2248, 2248, 2248, 2248, 2248, 2249, 2248,
  13259. 2248, 2250, 2251, 2251, 2251, 2252, 1, 2255,
  13260. 1, 2243, 1, 1, 1, 1, 1, 1,
  13261. 1, 1, 1, 1, 1, 1, 1, 1,
  13262. 1, 1, 1, 1, 1, 1, 1, 1,
  13263. 2243, 1, 2256, 1, 1, 1, 2257, 1,
  13264. 1, 1, 1, 1, 1, 1, 1, 1,
  13265. 1, 1, 1, 1, 1, 1, 1, 1,
  13266. 1, 2256, 2254, 2198, 2254, 2254, 2254, 2254,
  13267. 2254, 2258, 1, 2254, 2254, 1, 2254, 2200,
  13268. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13269. 2254, 2254, 2254, 1, 1, 1, 2254, 2214,
  13270. 2254, 1, 2254, 2254, 2254, 2254, 2254, 2254,
  13271. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13272. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13273. 2254, 2254, 2254, 2254, 1, 1, 1, 2254,
  13274. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13275. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13276. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13277. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13278. 1, 1, 1, 1, 1, 1, 1, 1,
  13279. 1, 1, 1, 1, 1, 1, 1, 1,
  13280. 1, 1, 1, 1, 1, 1, 1, 1,
  13281. 1, 1, 1, 1, 1, 1, 1, 1,
  13282. 1, 1, 1, 1, 1, 1, 1, 1,
  13283. 1, 1, 1, 1, 1, 1, 1, 1,
  13284. 1, 1, 1, 1, 1, 1, 1, 1,
  13285. 1, 1, 1, 1, 1, 1, 1, 1,
  13286. 1, 1, 1, 2259, 2259, 2259, 2259, 2259,
  13287. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13288. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13289. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13290. 2259, 2260, 2261, 2261, 2261, 2261, 2261, 2261,
  13291. 2261, 2261, 2261, 2261, 2261, 2261, 2262, 2261,
  13292. 2261, 2263, 2264, 2264, 2264, 2265, 1, 2256,
  13293. 1, 1, 1, 2257, 1, 1, 1, 1,
  13294. 1, 1, 1, 1, 1, 1, 1, 1,
  13295. 1, 1, 1, 1, 1, 1, 2256, 1,
  13296. 1, 1, 1, 1, 1, 1, 2258, 1,
  13297. 1, 1, 1, 1, 1, 1, 1, 1,
  13298. 1, 1, 1, 1, 1, 1, 1, 1,
  13299. 1, 1, 1, 1, 2214, 1, 2266, 1,
  13300. 2256, 1, 1, 1, 1, 1, 1, 1,
  13301. 1, 1, 1, 1, 1, 1, 1, 1,
  13302. 1, 1, 1, 1, 1, 1, 1, 2256,
  13303. 1, 2267, 1, 1, 1, 2268, 1, 1,
  13304. 1, 1, 1, 1, 1, 1, 1, 1,
  13305. 1, 1, 1, 1, 1, 1, 1, 1,
  13306. 2267, 1, 1, 1, 1, 1, 1, 1,
  13307. 2269, 1, 1, 1, 1, 1, 1, 1,
  13308. 1, 1, 1, 1, 1, 1, 1, 1,
  13309. 1, 1, 1, 1, 1, 1, 2221, 1,
  13310. 2254, 2198, 2254, 2254, 2254, 2254, 2254, 1,
  13311. 1, 2254, 2254, 1, 2254, 2200, 2254, 2254,
  13312. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13313. 2254, 1, 1, 1, 2254, 1, 2254, 1,
  13314. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13315. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13316. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13317. 2254, 2254, 1, 1, 1, 2254, 2254, 2254,
  13318. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13319. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13320. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13321. 2254, 2254, 2254, 2254, 2254, 2254, 1, 1,
  13322. 1, 1, 1, 1, 1, 1, 1, 1,
  13323. 1, 1, 1, 1, 1, 1, 1, 1,
  13324. 1, 1, 1, 1, 1, 1, 1, 1,
  13325. 1, 1, 1, 1, 1, 1, 1, 1,
  13326. 1, 1, 1, 1, 1, 1, 1, 1,
  13327. 1, 1, 1, 1, 1, 1, 1, 1,
  13328. 1, 1, 1, 1, 1, 1, 1, 1,
  13329. 1, 1, 1, 1, 1, 1, 1, 1,
  13330. 1, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13331. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13332. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13333. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2260,
  13334. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13335. 2261, 2261, 2261, 2261, 2262, 2261, 2261, 2263,
  13336. 2264, 2264, 2264, 2265, 1, 2254, 2254, 2254,
  13337. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13338. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13339. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13340. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13341. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13342. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13343. 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254,
  13344. 2254, 2254, 2254, 2254, 2254, 1, 2259, 2259,
  13345. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13346. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13347. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13348. 2259, 2259, 2259, 2259, 2259, 2259, 1, 2259,
  13349. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13350. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13351. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13352. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13353. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13354. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13355. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13356. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 1,
  13357. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13358. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13359. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13360. 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259,
  13361. 1, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13362. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13363. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13364. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13365. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13366. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13367. 2261, 1, 2261, 2261, 2261, 2261, 2261, 2261,
  13368. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13369. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13370. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13371. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13372. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13373. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13374. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13375. 2261, 2261, 1, 2261, 2261, 2261, 2261, 2261,
  13376. 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261,
  13377. 2261, 2261, 2261, 1, 2243, 2243, 2243, 2243,
  13378. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13379. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13380. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13381. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13382. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13383. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13384. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13385. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13386. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13387. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13388. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13389. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13390. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13391. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13392. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13393. 2243, 2243, 2243, 2243, 1, 1, 1, 1,
  13394. 1, 1, 1, 1, 1, 1, 1, 1,
  13395. 1, 1, 1, 1, 1, 1, 1, 1,
  13396. 1, 1, 1, 1, 1, 1, 1, 1,
  13397. 1, 1, 1, 1, 1, 1, 1, 1,
  13398. 1, 1, 1, 1, 1, 1, 1, 1,
  13399. 1, 1, 1, 1, 1, 1, 1, 1,
  13400. 1, 1, 1, 1, 1, 1, 1, 1,
  13401. 1, 1, 1, 1, 1, 1, 2246, 2246,
  13402. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13403. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13404. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13405. 2246, 2246, 2246, 2246, 2247, 2248, 2248, 2248,
  13406. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13407. 2248, 2249, 2248, 2248, 2250, 2251, 2251, 2251,
  13408. 2252, 1, 2243, 2243, 2243, 2243, 2243, 2243,
  13409. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13410. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13411. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13412. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13413. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13414. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13415. 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243,
  13416. 2243, 2243, 1, 2246, 2246, 2246, 2246, 2246,
  13417. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13418. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13419. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13420. 2246, 2246, 2246, 1, 2246, 2246, 2246, 2246,
  13421. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13422. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13423. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13424. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13425. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13426. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13427. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13428. 2246, 2246, 2246, 2246, 1, 2246, 2246, 2246,
  13429. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13430. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13431. 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246,
  13432. 2246, 2246, 2246, 2246, 2246, 1, 2248, 2248,
  13433. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13434. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13435. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13436. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13437. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13438. 2248, 2248, 2248, 2248, 2248, 2248, 1, 2248,
  13439. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13440. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13441. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13442. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13443. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13444. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13445. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13446. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 1,
  13447. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13448. 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248,
  13449. 1, 2270, 1, 2198, 1, 1, 1, 1,
  13450. 1, 1, 1, 1, 1, 1, 1, 1,
  13451. 1, 1, 1, 1, 1, 1, 1, 1,
  13452. 1, 1, 2198, 1, 2215, 1, 1, 1,
  13453. 2222, 1, 1, 1, 1, 1, 1, 1,
  13454. 1, 1, 1, 1, 1, 1, 1, 1,
  13455. 1, 1, 1, 2215, 2197, 2198, 2197, 2197,
  13456. 2197, 2197, 2197, 2224, 1, 2197, 2197, 1,
  13457. 2197, 2200, 2197, 2197, 2197, 2197, 2197, 2197,
  13458. 2197, 2197, 2197, 2197, 2197, 1, 1, 1,
  13459. 2197, 1, 2197, 1, 2197, 2197, 2197, 2197,
  13460. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13461. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13462. 2197, 2197, 2197, 2197, 2197, 2197, 1, 1,
  13463. 1, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13464. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13465. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13466. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13467. 2197, 2197, 1, 1, 1, 1, 1, 1,
  13468. 1, 1, 1, 1, 1, 1, 1, 1,
  13469. 1, 1, 1, 1, 1, 1, 1, 1,
  13470. 1, 1, 1, 1, 1, 1, 1, 1,
  13471. 1, 1, 1, 1, 1, 1, 1, 1,
  13472. 1, 1, 1, 1, 1, 1, 1, 1,
  13473. 1, 1, 1, 1, 1, 1, 1, 1,
  13474. 1, 1, 1, 1, 1, 1, 1, 1,
  13475. 1, 1, 1, 1, 1, 2202, 2202, 2202,
  13476. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13477. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13478. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13479. 2202, 2202, 2202, 2203, 2204, 2204, 2204, 2204,
  13480. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13481. 2205, 2204, 2204, 2206, 2207, 2207, 2207, 2208,
  13482. 1, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13483. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13484. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13485. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13486. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13487. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13488. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13489. 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197,
  13490. 2197, 1, 2202, 2202, 2202, 2202, 2202, 2202,
  13491. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13492. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13493. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13494. 2202, 2202, 1, 2202, 2202, 2202, 2202, 2202,
  13495. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13496. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13497. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13498. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13499. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13500. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13501. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13502. 2202, 2202, 2202, 1, 2202, 2202, 2202, 2202,
  13503. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13504. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13505. 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
  13506. 2202, 2202, 2202, 2202, 1, 2204, 2204, 2204,
  13507. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13508. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13509. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13510. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13511. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13512. 2204, 2204, 2204, 2204, 2204, 1, 2204, 2204,
  13513. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13514. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13515. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13516. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13517. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13518. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13519. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13520. 2204, 2204, 2204, 2204, 2204, 2204, 1, 2204,
  13521. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
  13522. 2204, 2204, 2204, 2204, 2204, 2204, 2204, 1,
  13523. 2271, 1, 1, 1, 2272, 1, 1, 1,
  13524. 1, 1, 1, 1, 1, 1, 1, 1,
  13525. 1, 1, 1, 1, 1, 1, 1, 2271,
  13526. 2273, 2274, 2273, 2273, 2273, 2273, 2273, 2275,
  13527. 1, 2273, 2273, 1, 2273, 2276, 2273, 2273,
  13528. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13529. 2273, 1, 1, 1, 2273, 1, 2273, 1,
  13530. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13531. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13532. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13533. 2273, 2273, 2277, 1, 1, 2273, 2273, 2273,
  13534. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13535. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13536. 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
  13537. 2273, 2273, 2273, 2273, 2273, 2273, 1, 1,
  13538. 1, 1, 1, 1, 1, 1, 1, 1,
  13539. 1, 1, 1, 1, 1, 1, 1, 1,
  13540. 1, 1, 1, 1, 1, 1, 1, 1,
  13541. 1, 1, 1, 1, 1, 1, 1, 1,
  13542. 1, 1, 1, 1, 1, 1, 1, 1,
  13543. 1, 1, 1, 1, 1, 1, 1, 1,
  13544. 1, 1, 1, 1, 1, 1, 1, 1,
  13545. 1, 1, 1, 1, 1, 1, 1, 1,
  13546. 1, 2278, 2278, 2278, 2278, 2278, 2278, 2278,
  13547. 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278,
  13548. 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278,
  13549. 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2279,
  13550. 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280,
  13551. 2280, 2280, 2280, 2280, 2281, 2280, 2280, 2282,
  13552. 2283, 2283, 2283, 2284, 1, 2201, 2201, 2201,
  13553. 2201, 2201, 2201, 2201, 2201, 2201, 1, 2201,
  13554. 2201, 2285, 2201, 2201, 2201, 2201, 2201, 2201,
  13555. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13556. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13557. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13558. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13559. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13560. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13561. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13562. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13563. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 1,
  13564. 2286, 2256, 2201, 2201, 2201, 2201, 2201, 2201,
  13565. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13566. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13567. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13568. 2201, 2201, 2201, 2201, 1, 1, 1, 1,
  13569. 1, 1, 1, 1, 1, 1, 1, 1,
  13570. 1, 1, 1, 1, 1, 1, 1, 1,
  13571. 1, 1, 1, 1, 1, 1, 1, 1,
  13572. 1, 1, 1, 1, 1, 1, 1, 1,
  13573. 1, 1, 1, 1, 1, 1, 1, 1,
  13574. 1, 1, 1, 1, 1, 1, 1, 1,
  13575. 1, 1, 1, 1, 1, 1, 1, 1,
  13576. 1, 1, 1, 1, 1, 1, 2287, 2287,
  13577. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13578. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13579. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13580. 2287, 2287, 2287, 2287, 2288, 2289, 2289, 2289,
  13581. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13582. 2289, 2290, 2289, 2289, 2291, 2292, 2292, 2292,
  13583. 2293, 1, 2294, 1, 2201, 1, 1, 1,
  13584. 1, 1, 1, 1, 1, 1, 1, 1,
  13585. 1, 1, 1, 1, 1, 1, 1, 1,
  13586. 1, 1, 1, 2201, 1, 2201, 2201, 2201,
  13587. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13588. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13589. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13590. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13591. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13592. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13593. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13594. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13595. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13596. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13597. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13598. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13599. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13600. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13601. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13602. 2201, 2201, 2201, 2201, 2201, 1, 1, 1,
  13603. 1, 1, 1, 1, 1, 1, 1, 1,
  13604. 1, 1, 1, 1, 1, 1, 1, 1,
  13605. 1, 1, 1, 1, 1, 1, 1, 1,
  13606. 1, 1, 1, 1, 1, 1, 1, 1,
  13607. 1, 1, 1, 1, 1, 1, 1, 1,
  13608. 1, 1, 1, 1, 1, 1, 1, 1,
  13609. 1, 1, 1, 1, 1, 1, 1, 1,
  13610. 1, 1, 1, 1, 1, 1, 1, 2287,
  13611. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13612. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13613. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13614. 2287, 2287, 2287, 2287, 2287, 2288, 2289, 2289,
  13615. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13616. 2289, 2289, 2290, 2289, 2289, 2291, 2292, 2292,
  13617. 2292, 2293, 1, 2201, 2201, 2201, 2201, 2201,
  13618. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13619. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13620. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13621. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13622. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13623. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13624. 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
  13625. 2201, 2201, 2201, 1, 2287, 2287, 2287, 2287,
  13626. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13627. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13628. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13629. 2287, 2287, 2287, 2287, 1, 2287, 2287, 2287,
  13630. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13631. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13632. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13633. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13634. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13635. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13636. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13637. 2287, 2287, 2287, 2287, 2287, 1, 2287, 2287,
  13638. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13639. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13640. 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287,
  13641. 2287, 2287, 2287, 2287, 2287, 2287, 1, 2289,
  13642. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13643. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13644. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13645. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13646. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13647. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 1,
  13648. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13649. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13650. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13651. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13652. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13653. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13654. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13655. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13656. 1, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13657. 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
  13658. 2289, 1, 2151, 2151, 2151, 2151, 2151, 2151,
  13659. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13660. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13661. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13662. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13663. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13664. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13665. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  13666. 2151, 2151, 1, 2154, 2154, 2154, 2154, 2154,
  13667. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13668. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13669. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13670. 2154, 2154, 2154, 1, 2154, 2154, 2154, 2154,
  13671. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13672. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13673. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13674. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13675. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13676. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13677. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13678. 2154, 2154, 2154, 2154, 1, 2154, 2154, 2154,
  13679. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13680. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13681. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  13682. 2154, 2154, 2154, 2154, 2154, 1, 2156, 2156,
  13683. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13684. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13685. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13686. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13687. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13688. 2156, 2156, 2156, 2156, 2156, 2156, 1, 2156,
  13689. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13690. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13691. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13692. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13693. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13694. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13695. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13696. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 1,
  13697. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13698. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
  13699. 1, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13700. 2295, 2295, 1, 2295, 2295, 2296, 2295, 2295,
  13701. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13702. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13703. 2295, 2295, 2297, 2295, 2295, 2295, 2295, 2295,
  13704. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13705. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13706. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13707. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13708. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13709. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13710. 2295, 2295, 2295, 2295, 2298, 2295, 2295, 2295,
  13711. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13712. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13713. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13714. 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
  13715. 1, 1, 1, 1, 1, 1, 1, 1,
  13716. 1, 1, 1, 1, 1, 1, 1, 1,
  13717. 1, 1, 1, 1, 1, 1, 1, 1,
  13718. 1, 1, 1, 1, 1, 1, 1, 1,
  13719. 1, 1, 1, 1, 1, 1, 1, 1,
  13720. 1, 1, 1, 1, 1, 1, 1, 1,
  13721. 1, 1, 1, 1, 1, 1, 1, 1,
  13722. 1, 1, 1, 1, 1, 1, 1, 1,
  13723. 1, 1, 2299, 2299, 2299, 2299, 2299, 2299,
  13724. 2299, 2299, 2299, 2299, 2299, 2299, 2299, 2299,
  13725. 2299, 2299, 2299, 2299, 2299, 2299, 2299, 2299,
  13726. 2299, 2299, 2299, 2299, 2299, 2299, 2299, 2299,
  13727. 2300, 2301, 2301, 2301, 2301, 2301, 2301, 2301,
  13728. 2301, 2301, 2301, 2301, 2301, 2302, 2301, 2301,
  13729. 2303, 2304, 2304, 2304, 2305, 1, 2306, 2306,
  13730. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 1,
  13731. 2306, 2306, 2307, 2306, 2306, 2306, 2306, 2306,
  13732. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13733. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2308,
  13734. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13735. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13736. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13737. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13738. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13739. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13740. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13741. 2306, 2309, 2306, 2306, 2306, 2306, 2306, 2306,
  13742. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13743. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13744. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13745. 2306, 2306, 2306, 2306, 2306, 1, 1, 1,
  13746. 1, 1, 1, 1, 1, 1, 1, 1,
  13747. 1, 1, 1, 1, 1, 1, 1, 1,
  13748. 1, 1, 1, 1, 1, 1, 1, 1,
  13749. 1, 1, 1, 1, 1, 1, 1, 1,
  13750. 1, 1, 1, 1, 1, 1, 1, 1,
  13751. 1, 1, 1, 1, 1, 1, 1, 1,
  13752. 1, 1, 1, 1, 1, 1, 1, 1,
  13753. 1, 1, 1, 1, 1, 1, 1, 2310,
  13754. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13755. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13756. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13757. 2310, 2310, 2310, 2310, 2310, 2311, 2312, 2312,
  13758. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13759. 2312, 2312, 2313, 2312, 2312, 2314, 2315, 2315,
  13760. 2315, 2316, 1, 2317, 1, 2306, 1, 1,
  13761. 1, 1, 1, 1, 1, 1, 1, 1,
  13762. 1, 1, 1, 1, 1, 1, 1, 1,
  13763. 1, 1, 1, 1, 2306, 1, 2306, 2306,
  13764. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13765. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13766. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13767. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13768. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13769. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13770. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13771. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13772. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13773. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13774. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13775. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13776. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13777. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13778. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13779. 2306, 2306, 2306, 2306, 2306, 2306, 1, 1,
  13780. 1, 1, 1, 1, 1, 1, 1, 1,
  13781. 1, 1, 1, 1, 1, 1, 1, 1,
  13782. 1, 1, 1, 1, 1, 1, 1, 1,
  13783. 1, 1, 1, 1, 1, 1, 1, 1,
  13784. 1, 1, 1, 1, 1, 1, 1, 1,
  13785. 1, 1, 1, 1, 1, 1, 1, 1,
  13786. 1, 1, 1, 1, 1, 1, 1, 1,
  13787. 1, 1, 1, 1, 1, 1, 1, 1,
  13788. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13789. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13790. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13791. 2310, 2310, 2310, 2310, 2310, 2310, 2311, 2312,
  13792. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13793. 2312, 2312, 2312, 2313, 2312, 2312, 2314, 2315,
  13794. 2315, 2315, 2316, 1, 2306, 2306, 2306, 2306,
  13795. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13796. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13797. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13798. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13799. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13800. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13801. 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306,
  13802. 2306, 2306, 2306, 2306, 1, 2310, 2310, 2310,
  13803. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13804. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13805. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13806. 2310, 2310, 2310, 2310, 2310, 1, 2310, 2310,
  13807. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13808. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13809. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13810. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13811. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13812. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13813. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13814. 2310, 2310, 2310, 2310, 2310, 2310, 1, 2310,
  13815. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13816. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13817. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
  13818. 2310, 2310, 2310, 2310, 2310, 2310, 2310, 1,
  13819. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13820. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13821. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13822. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13823. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13824. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13825. 1, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13826. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13827. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13828. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13829. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13830. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13831. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13832. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13833. 2312, 1, 2312, 2312, 2312, 2312, 2312, 2312,
  13834. 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312,
  13835. 2312, 2312, 1, 2147, 1, 1, 1, 2318,
  13836. 1, 1, 1, 1, 1, 1, 1, 1,
  13837. 1, 1, 1, 1, 1, 1, 1, 1,
  13838. 1, 1, 2147, 2319, 2320, 2319, 2319, 2319,
  13839. 2319, 2319, 2321, 1, 2319, 2319, 1, 2319,
  13840. 1, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13841. 2319, 2319, 2319, 2319, 1, 1, 1, 2319,
  13842. 1, 2319, 1, 2319, 2319, 2319, 2319, 2319,
  13843. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13844. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13845. 2319, 2319, 2319, 2319, 2319, 1, 1, 1,
  13846. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13847. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13848. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13849. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  13850. 2319, 1, 1, 1, 1, 1, 1, 1,
  13851. 1, 1, 1, 1, 1, 1, 1, 1,
  13852. 1, 1, 1, 1, 1, 1, 1, 1,
  13853. 1, 1, 1, 1, 1, 1, 1, 1,
  13854. 1, 1, 1, 1, 1, 1, 1, 1,
  13855. 1, 1, 1, 1, 1, 1, 1, 1,
  13856. 1, 1, 1, 1, 1, 1, 1, 1,
  13857. 1, 1, 1, 1, 1, 1, 1, 1,
  13858. 1, 1, 1, 1, 2322, 2322, 2322, 2322,
  13859. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  13860. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  13861. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  13862. 2322, 2322, 2323, 2324, 2324, 2324, 2324, 2324,
  13863. 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2325,
  13864. 2324, 2324, 2326, 2327, 2327, 2327, 2328, 1,
  13865. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13866. 2125, 1, 2329, 2329, 2330, 2329, 2329, 2329,
  13867. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13868. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2125,
  13869. 2329, 1, 2329, 2329, 2329, 2329, 2329, 2329,
  13870. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13871. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13872. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13873. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13874. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13875. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13876. 2329, 2329, 2329, 2331, 2329, 2329, 2329, 2329,
  13877. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13878. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13879. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13880. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 1,
  13881. 1, 1, 1, 1, 1, 1, 1, 1,
  13882. 1, 1, 1, 1, 1, 1, 1, 1,
  13883. 1, 1, 1, 1, 1, 1, 1, 1,
  13884. 1, 1, 1, 1, 1, 1, 1, 1,
  13885. 1, 1, 1, 1, 1, 1, 1, 1,
  13886. 1, 1, 1, 1, 1, 1, 1, 1,
  13887. 1, 1, 1, 1, 1, 1, 1, 1,
  13888. 1, 1, 1, 1, 1, 1, 1, 1,
  13889. 1, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13890. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13891. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13892. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2333,
  13893. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  13894. 2334, 2334, 2334, 2334, 2335, 2334, 2334, 2336,
  13895. 2337, 2337, 2337, 2338, 1, 2329, 2329, 2329,
  13896. 2329, 2329, 2329, 2329, 2329, 2329, 1, 2329,
  13897. 2329, 2339, 2329, 2329, 2329, 2329, 2329, 2329,
  13898. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13899. 2329, 2329, 2329, 2329, 2329, 2329, 2340, 2329,
  13900. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13901. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13902. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13903. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13904. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13905. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13906. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13907. 2331, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13908. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13909. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13910. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  13911. 2329, 2329, 2329, 2329, 1, 1, 1, 1,
  13912. 1, 1, 1, 1, 1, 1, 1, 1,
  13913. 1, 1, 1, 1, 1, 1, 1, 1,
  13914. 1, 1, 1, 1, 1, 1, 1, 1,
  13915. 1, 1, 1, 1, 1, 1, 1, 1,
  13916. 1, 1, 1, 1, 1, 1, 1, 1,
  13917. 1, 1, 1, 1, 1, 1, 1, 1,
  13918. 1, 1, 1, 1, 1, 1, 1, 1,
  13919. 1, 1, 1, 1, 1, 1, 2332, 2332,
  13920. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13921. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13922. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  13923. 2332, 2332, 2332, 2332, 2333, 2334, 2334, 2334,
  13924. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  13925. 2334, 2335, 2334, 2334, 2336, 2337, 2337, 2337,
  13926. 2338, 1, 2341, 1, 2329, 1, 1, 1,
  13927. 1, 1, 1, 1, 1, 1, 1, 1,
  13928. 1, 1, 1, 1, 1, 1, 1, 1,
  13929. 1, 1, 1, 2329, 1, 2342, 1, 1,
  13930. 1, 2343, 1, 1, 1, 1, 1, 1,
  13931. 1, 1, 1, 1, 1, 1, 1, 1,
  13932. 1, 1, 1, 1, 2342, 2340, 2125, 2340,
  13933. 2340, 2340, 2340, 2340, 2344, 1, 2340, 2340,
  13934. 1, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13935. 2340, 2340, 2340, 2340, 2340, 2340, 1, 1,
  13936. 1, 2340, 2128, 2340, 2129, 2340, 2340, 2340,
  13937. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13938. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13939. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1,
  13940. 1, 1, 2340, 2340, 2340, 2340, 2340, 2340,
  13941. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13942. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13943. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13944. 2340, 2340, 2340, 1, 1, 1, 1, 1,
  13945. 1, 1, 1, 1, 1, 1, 1, 1,
  13946. 1, 1, 1, 1, 1, 1, 1, 1,
  13947. 1, 1, 1, 1, 1, 1, 1, 1,
  13948. 1, 1, 1, 1, 1, 1, 1, 1,
  13949. 1, 1, 1, 1, 1, 1, 1, 1,
  13950. 1, 1, 1, 1, 1, 1, 1, 1,
  13951. 1, 1, 1, 1, 1, 1, 1, 1,
  13952. 1, 1, 1, 1, 1, 1, 2345, 2345,
  13953. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13954. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13955. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13956. 2345, 2345, 2345, 2345, 2346, 2347, 2347, 2347,
  13957. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  13958. 2347, 2348, 2347, 2347, 2349, 2350, 2350, 2350,
  13959. 2351, 1, 2352, 1, 1, 1, 2353, 1,
  13960. 1, 1, 1, 1, 1, 1, 1, 1,
  13961. 1, 1, 1, 1, 1, 1, 1, 1,
  13962. 1, 2352, 1, 1, 1, 1, 1, 1,
  13963. 1, 2354, 1, 1, 1, 1, 1, 1,
  13964. 1, 1, 1, 1, 1, 1, 1, 1,
  13965. 1, 1, 1, 1, 1, 1, 1, 2141,
  13966. 1, 2142, 1, 2355, 1, 2352, 1, 1,
  13967. 1, 1, 1, 1, 1, 1, 1, 1,
  13968. 1, 1, 1, 1, 1, 1, 1, 1,
  13969. 1, 1, 1, 1, 2352, 1, 2356, 1,
  13970. 1, 1, 2357, 1, 1, 1, 1, 1,
  13971. 1, 1, 1, 1, 1, 1, 1, 1,
  13972. 1, 1, 1, 1, 1, 2356, 1, 1,
  13973. 1, 1, 1, 1, 1, 2358, 1, 1,
  13974. 1, 1, 1, 1, 1, 1, 1, 1,
  13975. 1, 1, 1, 1, 1, 1, 1, 1,
  13976. 1, 1, 1, 2148, 1, 2149, 1, 2340,
  13977. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13978. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13979. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13980. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13981. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13982. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13983. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  13984. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1,
  13985. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13986. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13987. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13988. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13989. 1, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13990. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13991. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13992. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13993. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13994. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13995. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13996. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13997. 2345, 1, 2345, 2345, 2345, 2345, 2345, 2345,
  13998. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  13999. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14000. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14001. 2345, 2345, 1, 2347, 2347, 2347, 2347, 2347,
  14002. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14003. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14004. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14005. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14006. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14007. 2347, 2347, 2347, 1, 2347, 2347, 2347, 2347,
  14008. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14009. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14010. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14011. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14012. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14013. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14014. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14015. 2347, 2347, 2347, 2347, 1, 2347, 2347, 2347,
  14016. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14017. 2347, 2347, 2347, 2347, 2347, 1, 2329, 2329,
  14018. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14019. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14020. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14021. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14022. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14023. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14024. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14025. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14026. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14027. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14028. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14029. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14030. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14031. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14032. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14033. 2329, 2329, 2329, 2329, 2329, 2329, 1, 1,
  14034. 1, 1, 1, 1, 1, 1, 1, 1,
  14035. 1, 1, 1, 1, 1, 1, 1, 1,
  14036. 1, 1, 1, 1, 1, 1, 1, 1,
  14037. 1, 1, 1, 1, 1, 1, 1, 1,
  14038. 1, 1, 1, 1, 1, 1, 1, 1,
  14039. 1, 1, 1, 1, 1, 1, 1, 1,
  14040. 1, 1, 1, 1, 1, 1, 1, 1,
  14041. 1, 1, 1, 1, 1, 1, 1, 1,
  14042. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14043. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14044. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14045. 2332, 2332, 2332, 2332, 2332, 2332, 2333, 2334,
  14046. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14047. 2334, 2334, 2334, 2335, 2334, 2334, 2336, 2337,
  14048. 2337, 2337, 2338, 1, 2329, 2329, 2329, 2329,
  14049. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14050. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14051. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14052. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14053. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14054. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14055. 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329,
  14056. 2329, 2329, 2329, 2329, 1, 2332, 2332, 2332,
  14057. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14058. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14059. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14060. 2332, 2332, 2332, 2332, 2332, 1, 2332, 2332,
  14061. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14062. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14063. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14064. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14065. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14066. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14067. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14068. 2332, 2332, 2332, 2332, 2332, 2332, 1, 2332,
  14069. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14070. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14071. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332,
  14072. 2332, 2332, 2332, 2332, 2332, 2332, 2332, 1,
  14073. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14074. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14075. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14076. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14077. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14078. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14079. 1, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14080. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14081. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14082. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14083. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14084. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14085. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14086. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14087. 2334, 1, 2334, 2334, 2334, 2334, 2334, 2334,
  14088. 2334, 2334, 2334, 2334, 2334, 2334, 2334, 2334,
  14089. 2334, 2334, 1, 2359, 1, 2125, 1, 1,
  14090. 1, 1, 1, 1, 1, 1, 1, 1,
  14091. 1, 1, 1, 1, 1, 1, 1, 1,
  14092. 1, 1, 1, 1, 2125, 1, 2360, 1,
  14093. 1, 1, 2361, 1, 1, 1, 1, 1,
  14094. 1, 1, 1, 1, 1, 1, 1, 1,
  14095. 1, 1, 1, 1, 1, 2360, 2124, 2362,
  14096. 2124, 2124, 2124, 2124, 2124, 2363, 1, 2124,
  14097. 2124, 1, 2124, 2340, 2124, 2124, 2124, 2124,
  14098. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 1,
  14099. 1, 1, 2124, 2128, 2124, 2129, 2124, 2124,
  14100. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14101. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14102. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14103. 1, 1, 1, 2124, 2124, 2124, 2124, 2124,
  14104. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14105. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14106. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14107. 2124, 2124, 2124, 2124, 1, 1, 1, 1,
  14108. 1, 1, 1, 1, 1, 1, 1, 1,
  14109. 1, 1, 1, 1, 1, 1, 1, 1,
  14110. 1, 1, 1, 1, 1, 1, 1, 1,
  14111. 1, 1, 1, 1, 1, 1, 1, 1,
  14112. 1, 1, 1, 1, 1, 1, 1, 1,
  14113. 1, 1, 1, 1, 1, 1, 1, 1,
  14114. 1, 1, 1, 1, 1, 1, 1, 1,
  14115. 1, 1, 1, 1, 1, 1, 1, 2130,
  14116. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14117. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14118. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14119. 2130, 2130, 2130, 2130, 2130, 2131, 2132, 2132,
  14120. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14121. 2132, 2132, 2133, 2132, 2132, 2134, 2135, 2135,
  14122. 2135, 2136, 1, 2364, 1, 1, 1, 2365,
  14123. 1, 1, 1, 1, 1, 1, 1, 1,
  14124. 1, 1, 1, 1, 1, 1, 1, 1,
  14125. 1, 1, 2364, 2151, 2152, 2151, 2151, 2151,
  14126. 2151, 2151, 2366, 1, 2151, 2151, 1, 2151,
  14127. 1, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14128. 2151, 2151, 2151, 2151, 1, 1, 1, 2151,
  14129. 2141, 2151, 2142, 2151, 2151, 2151, 2151, 2151,
  14130. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14131. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14132. 2151, 2151, 2151, 2151, 2151, 1, 1, 1,
  14133. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14134. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14135. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14136. 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
  14137. 2151, 1, 1, 1, 1, 1, 1, 1,
  14138. 1, 1, 1, 1, 1, 1, 1, 1,
  14139. 1, 1, 1, 1, 1, 1, 1, 1,
  14140. 1, 1, 1, 1, 1, 1, 1, 1,
  14141. 1, 1, 1, 1, 1, 1, 1, 1,
  14142. 1, 1, 1, 1, 1, 1, 1, 1,
  14143. 1, 1, 1, 1, 1, 1, 1, 1,
  14144. 1, 1, 1, 1, 1, 1, 1, 1,
  14145. 1, 1, 1, 1, 2154, 2154, 2154, 2154,
  14146. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  14147. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  14148. 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154,
  14149. 2154, 2154, 2155, 2156, 2156, 2156, 2156, 2156,
  14150. 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2157,
  14151. 2156, 2156, 2158, 2159, 2159, 2159, 2160, 1,
  14152. 2367, 1, 2364, 1, 1, 1, 1, 1,
  14153. 1, 1, 1, 1, 1, 1, 1, 1,
  14154. 1, 1, 1, 1, 1, 1, 1, 1,
  14155. 1, 2364, 1, 2368, 1, 1, 1, 2369,
  14156. 1, 1, 1, 1, 1, 1, 1, 1,
  14157. 1, 1, 1, 1, 1, 1, 1, 1,
  14158. 1, 1, 2368, 2319, 2320, 2319, 2319, 2319,
  14159. 2319, 2319, 2370, 1, 2319, 2319, 1, 2319,
  14160. 1, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14161. 2319, 2319, 2319, 2319, 1, 1, 1, 2319,
  14162. 2148, 2319, 2149, 2319, 2319, 2319, 2319, 2319,
  14163. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14164. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14165. 2319, 2319, 2319, 2319, 2319, 1, 1, 1,
  14166. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14167. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14168. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14169. 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
  14170. 2319, 1, 1, 1, 1, 1, 1, 1,
  14171. 1, 1, 1, 1, 1, 1, 1, 1,
  14172. 1, 1, 1, 1, 1, 1, 1, 1,
  14173. 1, 1, 1, 1, 1, 1, 1, 1,
  14174. 1, 1, 1, 1, 1, 1, 1, 1,
  14175. 1, 1, 1, 1, 1, 1, 1, 1,
  14176. 1, 1, 1, 1, 1, 1, 1, 1,
  14177. 1, 1, 1, 1, 1, 1, 1, 1,
  14178. 1, 1, 1, 1, 2322, 2322, 2322, 2322,
  14179. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  14180. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  14181. 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322,
  14182. 2322, 2322, 2323, 2324, 2324, 2324, 2324, 2324,
  14183. 2324, 2324, 2324, 2324, 2324, 2324, 2324, 2325,
  14184. 2324, 2324, 2326, 2327, 2327, 2327, 2328, 1,
  14185. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14186. 2372, 1, 2371, 2371, 2373, 2371, 2371, 2371,
  14187. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14188. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2372,
  14189. 2371, 2297, 2371, 2371, 2371, 2371, 2371, 2371,
  14190. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14191. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14192. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14193. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14194. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14195. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14196. 2371, 2371, 2371, 2374, 2371, 2371, 2371, 2371,
  14197. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14198. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14199. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
  14200. 2371, 2371, 2371, 2371, 2371, 2371, 2371, 1,
  14201. 1, 1, 1, 1, 1, 1, 1, 1,
  14202. 1, 1, 1, 1, 1, 1, 1, 1,
  14203. 1, 1, 1, 1, 1, 1, 1, 1,
  14204. 1, 1, 1, 1, 1, 1, 1, 1,
  14205. 1, 1, 1, 1, 1, 1, 1, 1,
  14206. 1, 1, 1, 1, 1, 1, 1, 1,
  14207. 1, 1, 1, 1, 1, 1, 1, 1,
  14208. 1, 1, 1, 1, 1, 1, 1, 1,
  14209. 1, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
  14210. 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
  14211. 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2375,
  14212. 2375, 2375, 2375, 2375, 2375, 2375, 2375, 2376,
  14213. 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
  14214. 2377, 2377, 2377, 2377, 2378, 2377, 2377, 2379,
  14215. 2380, 2380, 2380, 2381, 1, 2382, 2382, 2382,
  14216. 2382, 2382, 2382, 2382, 2382, 2382, 1, 2382,
  14217. 2382, 2383, 2382, 2382, 2382, 2382, 2382, 2382,
  14218. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14219. 2382, 2382, 2382, 2382, 2382, 2382, 2384, 2382,
  14220. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14221. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14222. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14223. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14224. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14225. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14226. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14227. 2385, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14228. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14229. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14230. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14231. 2382, 2382, 2382, 2382, 1, 1, 1, 1,
  14232. 1, 1, 1, 1, 1, 1, 1, 1,
  14233. 1, 1, 1, 1, 1, 1, 1, 1,
  14234. 1, 1, 1, 1, 1, 1, 1, 1,
  14235. 1, 1, 1, 1, 1, 1, 1, 1,
  14236. 1, 1, 1, 1, 1, 1, 1, 1,
  14237. 1, 1, 1, 1, 1, 1, 1, 1,
  14238. 1, 1, 1, 1, 1, 1, 1, 1,
  14239. 1, 1, 1, 1, 1, 1, 2386, 2386,
  14240. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14241. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14242. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14243. 2386, 2386, 2386, 2386, 2387, 2388, 2388, 2388,
  14244. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14245. 2388, 2389, 2388, 2388, 2390, 2391, 2391, 2391,
  14246. 2392, 1, 2393, 1, 2382, 1, 1, 1,
  14247. 1, 1, 1, 1, 1, 1, 1, 1,
  14248. 1, 1, 1, 1, 1, 1, 1, 1,
  14249. 1, 1, 1, 2382, 1, 2122, 1, 1,
  14250. 1, 2123, 1, 1, 1, 1, 1, 1,
  14251. 1, 1, 1, 1, 1, 1, 1, 1,
  14252. 1, 1, 1, 1, 2122, 2340, 2125, 2340,
  14253. 2340, 2340, 2340, 2340, 2126, 1, 2340, 2340,
  14254. 1, 2340, 2127, 2340, 2340, 2340, 2340, 2340,
  14255. 2340, 2340, 2340, 2340, 2340, 2340, 1, 1,
  14256. 1, 2340, 2128, 2340, 2129, 2340, 2340, 2340,
  14257. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14258. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14259. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 1,
  14260. 1, 1, 2340, 2340, 2340, 2340, 2340, 2340,
  14261. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14262. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14263. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14264. 2340, 2340, 2340, 1, 1, 1, 1, 1,
  14265. 1, 1, 1, 1, 1, 1, 1, 1,
  14266. 1, 1, 1, 1, 1, 1, 1, 1,
  14267. 1, 1, 1, 1, 1, 1, 1, 1,
  14268. 1, 1, 1, 1, 1, 1, 1, 1,
  14269. 1, 1, 1, 1, 1, 1, 1, 1,
  14270. 1, 1, 1, 1, 1, 1, 1, 1,
  14271. 1, 1, 1, 1, 1, 1, 1, 1,
  14272. 1, 1, 1, 1, 1, 1, 2345, 2345,
  14273. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14274. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14275. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14276. 2345, 2345, 2345, 2345, 2346, 2347, 2347, 2347,
  14277. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347,
  14278. 2347, 2348, 2347, 2347, 2349, 2350, 2350, 2350,
  14279. 2351, 1, 2382, 2382, 2382, 2382, 2382, 2382,
  14280. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14281. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14282. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14283. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14284. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14285. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14286. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14287. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14288. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14289. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14290. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14291. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14292. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14293. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14294. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14295. 2382, 2382, 1, 1, 1, 1, 1, 1,
  14296. 1, 1, 1, 1, 1, 1, 1, 1,
  14297. 1, 1, 1, 1, 1, 1, 1, 1,
  14298. 1, 1, 1, 1, 1, 1, 1, 1,
  14299. 1, 1, 1, 1, 1, 1, 1, 1,
  14300. 1, 1, 1, 1, 1, 1, 1, 1,
  14301. 1, 1, 1, 1, 1, 1, 1, 1,
  14302. 1, 1, 1, 1, 1, 1, 1, 1,
  14303. 1, 1, 1, 1, 2386, 2386, 2386, 2386,
  14304. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14305. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14306. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14307. 2386, 2386, 2387, 2388, 2388, 2388, 2388, 2388,
  14308. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2389,
  14309. 2388, 2388, 2390, 2391, 2391, 2391, 2392, 1,
  14310. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14311. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14312. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14313. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14314. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14315. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14316. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14317. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14318. 1, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14319. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14320. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14321. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14322. 2386, 1, 2386, 2386, 2386, 2386, 2386, 2386,
  14323. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14324. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14325. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14326. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14327. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14328. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14329. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14330. 2386, 2386, 1, 2386, 2386, 2386, 2386, 2386,
  14331. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14332. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14333. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14334. 2386, 2386, 2386, 1, 2388, 2388, 2388, 2388,
  14335. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14336. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14337. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14338. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14339. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14340. 2388, 2388, 2388, 2388, 1, 2388, 2388, 2388,
  14341. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14342. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14343. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14344. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14345. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14346. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14347. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14348. 2388, 2388, 2388, 2388, 2388, 1, 2388, 2388,
  14349. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14350. 2388, 2388, 2388, 2388, 2388, 2388, 1, 2382,
  14351. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2394,
  14352. 1, 2382, 2382, 2395, 2382, 2382, 2382, 2382,
  14353. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14354. 2382, 2382, 2382, 2382, 2382, 2382, 2394, 2382,
  14355. 2308, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14356. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14357. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14358. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14359. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14360. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14361. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14362. 2382, 2382, 2385, 2382, 2382, 2382, 2382, 2382,
  14363. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14364. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14365. 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382,
  14366. 2382, 2382, 2382, 2382, 2382, 2382, 1, 1,
  14367. 1, 1, 1, 1, 1, 1, 1, 1,
  14368. 1, 1, 1, 1, 1, 1, 1, 1,
  14369. 1, 1, 1, 1, 1, 1, 1, 1,
  14370. 1, 1, 1, 1, 1, 1, 1, 1,
  14371. 1, 1, 1, 1, 1, 1, 1, 1,
  14372. 1, 1, 1, 1, 1, 1, 1, 1,
  14373. 1, 1, 1, 1, 1, 1, 1, 1,
  14374. 1, 1, 1, 1, 1, 1, 1, 1,
  14375. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14376. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14377. 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
  14378. 2386, 2386, 2386, 2386, 2386, 2386, 2387, 2388,
  14379. 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
  14380. 2388, 2388, 2388, 2389, 2388, 2388, 2390, 2391,
  14381. 2391, 2391, 2392, 1, 2396, 1, 2394, 1,
  14382. 1, 1, 1, 1, 1, 1, 1, 1,
  14383. 1, 1, 1, 1, 1, 1, 1, 1,
  14384. 1, 1, 1, 1, 1, 2394, 1, 2124,
  14385. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14386. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14387. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14388. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14389. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14390. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14391. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
  14392. 2124, 2124, 2124, 2124, 2124, 2124, 2124, 1,
  14393. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14394. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14395. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14396. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14397. 1, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14398. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14399. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14400. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14401. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14402. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14403. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14404. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14405. 2130, 1, 2130, 2130, 2130, 2130, 2130, 2130,
  14406. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14407. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14408. 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
  14409. 2130, 2130, 1, 2132, 2132, 2132, 2132, 2132,
  14410. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14411. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14412. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14413. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14414. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14415. 2132, 2132, 2132, 1, 2132, 2132, 2132, 2132,
  14416. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14417. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14418. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14419. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14420. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14421. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14422. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14423. 2132, 2132, 2132, 2132, 1, 2132, 2132, 2132,
  14424. 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
  14425. 2132, 2132, 2132, 2132, 2132, 1, 2397, 2397,
  14426. 2397, 2397, 2397, 2397, 2397, 2397, 2398, 1,
  14427. 2397, 2397, 2399, 2397, 2397, 2397, 2397, 2397,
  14428. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14429. 2397, 2397, 2397, 2397, 2397, 2398, 2397, 2400,
  14430. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14431. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14432. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14433. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14434. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14435. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14436. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14437. 2397, 2401, 2397, 2397, 2397, 2397, 2397, 2397,
  14438. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14439. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14440. 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
  14441. 2397, 2397, 2397, 2397, 2397, 1, 1, 1,
  14442. 1, 1, 1, 1, 1, 1, 1, 1,
  14443. 1, 1, 1, 1, 1, 1, 1, 1,
  14444. 1, 1, 1, 1, 1, 1, 1, 1,
  14445. 1, 1, 1, 1, 1, 1, 1, 1,
  14446. 1, 1, 1, 1, 1, 1, 1, 1,
  14447. 1, 1, 1, 1, 1, 1, 1, 1,
  14448. 1, 1, 1, 1, 1, 1, 1, 1,
  14449. 1, 1, 1, 1, 1, 1, 1, 2402,
  14450. 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402,
  14451. 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402,
  14452. 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402,
  14453. 2402, 2402, 2402, 2402, 2402, 2403, 2404, 2404,
  14454. 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404,
  14455. 2404, 2404, 2405, 2404, 2404, 2406, 2407, 2407,
  14456. 2407, 2408, 1, 2409, 2409, 2409, 2409, 2409,
  14457. 2409, 2409, 2409, 2409, 1, 2409, 2409, 2410,
  14458. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14459. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14460. 2409, 2409, 2409, 2409, 2411, 2409, 2409, 2409,
  14461. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14462. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14463. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14464. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14465. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14466. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14467. 2409, 2409, 2409, 2409, 2409, 2409, 2412, 2409,
  14468. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14469. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14470. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14471. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14472. 2409, 2409, 1, 1, 1, 1, 1, 1,
  14473. 1, 1, 1, 1, 1, 1, 1, 1,
  14474. 1, 1, 1, 1, 1, 1, 1, 1,
  14475. 1, 1, 1, 1, 1, 1, 1, 1,
  14476. 1, 1, 1, 1, 1, 1, 1, 1,
  14477. 1, 1, 1, 1, 1, 1, 1, 1,
  14478. 1, 1, 1, 1, 1, 1, 1, 1,
  14479. 1, 1, 1, 1, 1, 1, 1, 1,
  14480. 1, 1, 1, 1, 2413, 2413, 2413, 2413,
  14481. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14482. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14483. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14484. 2413, 2413, 2414, 2415, 2415, 2415, 2415, 2415,
  14485. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2416,
  14486. 2415, 2415, 2417, 2418, 2418, 2418, 2419, 1,
  14487. 2420, 1, 2409, 1, 1, 1, 1, 1,
  14488. 1, 1, 1, 1, 1, 1, 1, 1,
  14489. 1, 1, 1, 1, 1, 1, 1, 1,
  14490. 1, 2409, 1, 2421, 1, 1, 1, 2422,
  14491. 1, 1, 1, 1, 1, 1, 1, 1,
  14492. 1, 1, 1, 1, 1, 1, 1, 1,
  14493. 1, 1, 2421, 2340, 2125, 2340, 2340, 2340,
  14494. 2340, 2340, 2423, 1, 2340, 2340, 1, 2340,
  14495. 2127, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14496. 2340, 2340, 2340, 2340, 1, 1, 1, 2340,
  14497. 2128, 2340, 2424, 2340, 2340, 2340, 2340, 2340,
  14498. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14499. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14500. 2340, 2340, 2340, 2340, 2340, 1, 1, 1,
  14501. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14502. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14503. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14504. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14505. 2340, 1, 1, 1, 1, 1, 1, 1,
  14506. 1, 1, 1, 1, 1, 1, 1, 1,
  14507. 1, 1, 1, 1, 1, 1, 1, 1,
  14508. 1, 1, 1, 1, 1, 1, 1, 1,
  14509. 1, 1, 1, 1, 1, 1, 1, 1,
  14510. 1, 1, 1, 1, 1, 1, 1, 1,
  14511. 1, 1, 1, 1, 1, 1, 1, 1,
  14512. 1, 1, 1, 1, 1, 1, 1, 1,
  14513. 1, 1, 1, 1, 2345, 2345, 2345, 2345,
  14514. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14515. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14516. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14517. 2345, 2345, 2346, 2347, 2347, 2347, 2347, 2347,
  14518. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2348,
  14519. 2347, 2347, 2349, 2350, 2350, 2350, 2351, 1,
  14520. 2425, 1, 1, 1, 2426, 1, 1, 1,
  14521. 1, 1, 1, 1, 1, 1, 1, 1,
  14522. 1, 1, 1, 1, 1, 1, 1, 2425,
  14523. 1, 1, 1, 1, 1, 1, 1, 2427,
  14524. 1, 1, 1, 1, 1, 2140, 1, 1,
  14525. 1, 1, 1, 1, 1, 1, 1, 1,
  14526. 1, 1, 1, 1, 1, 2141, 1, 2428,
  14527. 1, 2429, 1, 2425, 1, 1, 1, 1,
  14528. 1, 1, 1, 1, 1, 1, 1, 1,
  14529. 1, 1, 1, 1, 1, 1, 1, 1,
  14530. 1, 1, 2425, 1, 2430, 1, 1, 1,
  14531. 2431, 1, 1, 1, 1, 1, 1, 1,
  14532. 1, 1, 1, 1, 1, 1, 1, 1,
  14533. 1, 1, 1, 2430, 1, 1, 1, 1,
  14534. 1, 1, 1, 2432, 1, 1, 1, 1,
  14535. 1, 2147, 1, 1, 1, 1, 1, 1,
  14536. 1, 1, 1, 1, 1, 1, 1, 1,
  14537. 1, 2148, 1, 2433, 1, 2409, 2409, 2409,
  14538. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14539. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14540. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14541. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14542. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14543. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14544. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14545. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14546. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14547. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14548. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14549. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14550. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14551. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14552. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14553. 2409, 2409, 2409, 2409, 2409, 1, 1, 1,
  14554. 1, 1, 1, 1, 1, 1, 1, 1,
  14555. 1, 1, 1, 1, 1, 1, 1, 1,
  14556. 1, 1, 1, 1, 1, 1, 1, 1,
  14557. 1, 1, 1, 1, 1, 1, 1, 1,
  14558. 1, 1, 1, 1, 1, 1, 1, 1,
  14559. 1, 1, 1, 1, 1, 1, 1, 1,
  14560. 1, 1, 1, 1, 1, 1, 1, 1,
  14561. 1, 1, 1, 1, 1, 1, 1, 2413,
  14562. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14563. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14564. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14565. 2413, 2413, 2413, 2413, 2413, 2414, 2415, 2415,
  14566. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14567. 2415, 2415, 2416, 2415, 2415, 2417, 2418, 2418,
  14568. 2418, 2419, 1, 2409, 2409, 2409, 2409, 2409,
  14569. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14570. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14571. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14572. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14573. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14574. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14575. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14576. 2409, 2409, 2409, 1, 2413, 2413, 2413, 2413,
  14577. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14578. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14579. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14580. 2413, 2413, 2413, 2413, 1, 2413, 2413, 2413,
  14581. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14582. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14583. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14584. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14585. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14586. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14587. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14588. 2413, 2413, 2413, 2413, 2413, 1, 2413, 2413,
  14589. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14590. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14591. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14592. 2413, 2413, 2413, 2413, 2413, 2413, 1, 2415,
  14593. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14594. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14595. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14596. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14597. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14598. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 1,
  14599. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14600. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14601. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14602. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14603. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14604. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14605. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14606. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14607. 1, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14608. 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
  14609. 2415, 1, 2409, 2409, 2409, 2409, 2409, 2409,
  14610. 2409, 2409, 2434, 1, 2409, 2409, 2435, 2409,
  14611. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14612. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14613. 2409, 2434, 2409, 2436, 2409, 2409, 2409, 2409,
  14614. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14615. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14616. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14617. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14618. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14619. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14620. 2409, 2409, 2409, 2409, 2409, 2412, 2409, 2409,
  14621. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14622. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14623. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14624. 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409,
  14625. 2409, 1, 1, 1, 1, 1, 1, 1,
  14626. 1, 1, 1, 1, 1, 1, 1, 1,
  14627. 1, 1, 1, 1, 1, 1, 1, 1,
  14628. 1, 1, 1, 1, 1, 1, 1, 1,
  14629. 1, 1, 1, 1, 1, 1, 1, 1,
  14630. 1, 1, 1, 1, 1, 1, 1, 1,
  14631. 1, 1, 1, 1, 1, 1, 1, 1,
  14632. 1, 1, 1, 1, 1, 1, 1, 1,
  14633. 1, 1, 1, 2413, 2413, 2413, 2413, 2413,
  14634. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14635. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14636. 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
  14637. 2413, 2414, 2415, 2415, 2415, 2415, 2415, 2415,
  14638. 2415, 2415, 2415, 2415, 2415, 2415, 2416, 2415,
  14639. 2415, 2417, 2418, 2418, 2418, 2419, 1, 2437,
  14640. 1, 2434, 1, 1, 1, 1, 1, 1,
  14641. 1, 1, 1, 1, 1, 1, 1, 1,
  14642. 1, 1, 1, 1, 1, 1, 1, 1,
  14643. 2434, 1, 2438, 1, 1, 1, 2439, 1,
  14644. 1, 1, 1, 1, 1, 1, 1, 1,
  14645. 1, 1, 1, 1, 1, 1, 1, 1,
  14646. 1, 2438, 1, 1, 1, 1, 1, 1,
  14647. 1, 2440, 1, 1, 1, 1, 1, 2140,
  14648. 1, 1, 1, 1, 1, 1, 1, 1,
  14649. 1, 1, 1, 1, 1, 1, 1, 2141,
  14650. 1, 2441, 1, 2442, 1, 2438, 1, 1,
  14651. 1, 1, 1, 1, 1, 1, 1, 1,
  14652. 1, 1, 1, 1, 1, 1, 1, 1,
  14653. 1, 1, 1, 1, 2438, 1, 2443, 1,
  14654. 1, 1, 2444, 1, 1, 1, 1, 1,
  14655. 1, 1, 1, 1, 1, 1, 1, 1,
  14656. 1, 1, 1, 1, 1, 2443, 1, 1,
  14657. 1, 1, 1, 1, 1, 2445, 1, 1,
  14658. 1, 1, 1, 2147, 1, 1, 1, 1,
  14659. 1, 1, 1, 1, 1, 1, 1, 1,
  14660. 1, 1, 1, 2148, 1, 2446, 1, 2447,
  14661. 1, 1, 1, 2448, 1, 1, 1, 1,
  14662. 1, 1, 1, 1, 1, 1, 1, 1,
  14663. 1, 1, 1, 1, 1, 1, 2447, 2449,
  14664. 2450, 2449, 2449, 2449, 2449, 2449, 2451, 1,
  14665. 2449, 2449, 2452, 2449, 2453, 2449, 2449, 2449,
  14666. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14667. 1, 1, 1, 2449, 1, 2449, 2454, 2449,
  14668. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14669. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14670. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14671. 2449, 1, 1, 1, 2449, 2449, 2449, 2449,
  14672. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14673. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14674. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14675. 2449, 2449, 2449, 2449, 2449, 1, 1, 1,
  14676. 1, 1, 1, 1, 1, 1, 1, 1,
  14677. 1, 1, 1, 1, 1, 1, 1, 1,
  14678. 1, 1, 1, 1, 1, 1, 1, 1,
  14679. 1, 1, 1, 1, 1, 1, 1, 1,
  14680. 1, 1, 1, 1, 1, 1, 1, 1,
  14681. 1, 1, 1, 1, 1, 1, 1, 1,
  14682. 1, 1, 1, 1, 1, 1, 1, 1,
  14683. 1, 1, 1, 1, 1, 1, 1, 1,
  14684. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14685. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14686. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14687. 2455, 2455, 2455, 2455, 2455, 2455, 2456, 2457,
  14688. 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457,
  14689. 2457, 2457, 2457, 2458, 2457, 2457, 2459, 2460,
  14690. 2460, 2460, 2461, 1, 2119, 1, 1, 1,
  14691. 2462, 1, 1, 1, 1, 1, 1, 1,
  14692. 1, 1, 1, 1, 1, 1, 1, 1,
  14693. 1, 1, 1, 2119, 1, 1, 1, 1,
  14694. 1, 1, 1, 2463, 1, 1, 1, 2119,
  14695. 1, 1, 1, 1, 1, 1, 1, 1,
  14696. 1, 1, 1, 1, 1, 1, 1, 1,
  14697. 1, 1, 1, 2120, 1, 2464, 1, 2119,
  14698. 1, 1, 1, 1, 1, 1, 1, 1,
  14699. 1, 1, 1, 1, 1, 1, 1, 1,
  14700. 1, 1, 1, 1, 1, 1, 2119, 1,
  14701. 2452, 1, 1, 1, 2465, 1, 1, 1,
  14702. 1, 1, 1, 1, 1, 1, 1, 1,
  14703. 1, 1, 1, 1, 1, 1, 1, 2452,
  14704. 1, 1, 1, 1, 1, 1, 1, 2466,
  14705. 1, 1, 1, 2452, 1, 1, 1, 1,
  14706. 1, 1, 1, 1, 1, 1, 1, 1,
  14707. 1, 1, 1, 1, 1, 1, 1, 2454,
  14708. 1, 2467, 1, 1, 1, 2468, 1, 1,
  14709. 1, 1, 1, 1, 1, 1, 1, 1,
  14710. 1, 1, 1, 1, 1, 1, 1, 1,
  14711. 2467, 2469, 2470, 2469, 2469, 2469, 2469, 2469,
  14712. 2471, 1, 2469, 2469, 1, 2469, 2472, 2469,
  14713. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14714. 2469, 2469, 1, 1, 1, 2469, 1, 2469,
  14715. 1, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14716. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14717. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14718. 2469, 2469, 2469, 2473, 1, 1, 2469, 2469,
  14719. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14720. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14721. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
  14722. 2469, 2469, 2469, 2469, 2469, 2469, 2469, 1,
  14723. 1, 1, 1, 1, 1, 1, 1, 1,
  14724. 1, 1, 1, 1, 1, 1, 1, 1,
  14725. 1, 1, 1, 1, 1, 1, 1, 1,
  14726. 1, 1, 1, 1, 1, 1, 1, 1,
  14727. 1, 1, 1, 1, 1, 1, 1, 1,
  14728. 1, 1, 1, 1, 1, 1, 1, 1,
  14729. 1, 1, 1, 1, 1, 1, 1, 1,
  14730. 1, 1, 1, 1, 1, 1, 1, 1,
  14731. 1, 1, 2474, 2474, 2474, 2474, 2474, 2474,
  14732. 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474,
  14733. 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474,
  14734. 2474, 2474, 2474, 2474, 2474, 2474, 2474, 2474,
  14735. 2475, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
  14736. 2476, 2476, 2476, 2476, 2476, 2477, 2476, 2476,
  14737. 2478, 2479, 2479, 2479, 2480, 1, 2481, 1,
  14738. 1, 1, 2482, 1, 1, 1, 1, 1,
  14739. 1, 1, 1, 1, 1, 1, 1, 1,
  14740. 1, 1, 1, 1, 1, 2481, 2483, 2484,
  14741. 2483, 2483, 2483, 2483, 2483, 2485, 1, 2483,
  14742. 2483, 1, 2483, 2486, 2483, 2483, 2483, 2483,
  14743. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 1,
  14744. 1, 1, 2483, 1, 2483, 1, 2483, 2483,
  14745. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14746. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14747. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14748. 2487, 1, 1, 2483, 2483, 2483, 2483, 2483,
  14749. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14750. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14751. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14752. 2483, 2483, 2483, 2483, 1, 1, 1, 1,
  14753. 1, 1, 1, 1, 1, 1, 1, 1,
  14754. 1, 1, 1, 1, 1, 1, 1, 1,
  14755. 1, 1, 1, 1, 1, 1, 1, 1,
  14756. 1, 1, 1, 1, 1, 1, 1, 1,
  14757. 1, 1, 1, 1, 1, 1, 1, 1,
  14758. 1, 1, 1, 1, 1, 1, 1, 1,
  14759. 1, 1, 1, 1, 1, 1, 1, 1,
  14760. 1, 1, 1, 1, 1, 1, 1, 2488,
  14761. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14762. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14763. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14764. 2488, 2488, 2488, 2488, 2488, 2489, 2490, 2490,
  14765. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  14766. 2490, 2490, 2491, 2490, 2490, 2492, 2493, 2493,
  14767. 2493, 2494, 1, 2495, 1, 2481, 1, 1,
  14768. 1, 1, 1, 1, 1, 1, 1, 1,
  14769. 1, 1, 1, 1, 1, 1, 1, 1,
  14770. 1, 1, 1, 1, 2481, 1, 2496, 1,
  14771. 1, 1, 2497, 1, 1, 1, 1, 1,
  14772. 1, 1, 1, 1, 1, 1, 1, 1,
  14773. 1, 1, 1, 1, 1, 2496, 2483, 2484,
  14774. 2483, 2483, 2483, 2483, 2483, 2498, 1, 2483,
  14775. 2483, 2499, 2483, 2500, 2483, 2483, 2483, 2483,
  14776. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2501,
  14777. 1, 1, 2483, 1, 2483, 1, 2483, 2483,
  14778. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14779. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14780. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14781. 1, 1, 1, 2483, 2483, 2483, 2483, 2483,
  14782. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14783. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14784. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  14785. 2483, 2483, 2483, 2483, 1, 1, 1, 1,
  14786. 1, 1, 1, 1, 1, 1, 1, 1,
  14787. 1, 1, 1, 1, 1, 1, 1, 1,
  14788. 1, 1, 1, 1, 1, 1, 1, 1,
  14789. 1, 1, 1, 1, 1, 1, 1, 1,
  14790. 1, 1, 1, 1, 1, 1, 1, 1,
  14791. 1, 1, 1, 1, 1, 1, 1, 1,
  14792. 1, 1, 1, 1, 1, 1, 1, 1,
  14793. 1, 1, 1, 1, 1, 1, 1, 2488,
  14794. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14795. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14796. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  14797. 2488, 2488, 2488, 2488, 2488, 2489, 2490, 2490,
  14798. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  14799. 2490, 2490, 2491, 2490, 2490, 2492, 2493, 2493,
  14800. 2493, 2494, 1, 2496, 1, 1, 1, 2497,
  14801. 1, 1, 1, 1, 1, 1, 1, 1,
  14802. 1, 1, 1, 1, 1, 1, 1, 1,
  14803. 1, 1, 2496, 1, 1, 1, 1, 1,
  14804. 1, 1, 2498, 1, 1, 1, 2499, 1,
  14805. 2502, 1, 1, 1, 1, 1, 1, 1,
  14806. 1, 1, 1, 1, 2501, 1, 2503, 1,
  14807. 2496, 1, 1, 1, 1, 1, 1, 1,
  14808. 1, 1, 1, 1, 1, 1, 1, 1,
  14809. 1, 1, 1, 1, 1, 1, 1, 2496,
  14810. 1, 2504, 1, 1, 1, 2505, 1, 1,
  14811. 1, 1, 1, 1, 1, 1, 1, 1,
  14812. 1, 1, 1, 1, 1, 1, 1, 1,
  14813. 2504, 1, 1, 1, 1, 1, 1, 1,
  14814. 2506, 1, 1, 1, 2507, 1, 2508, 1,
  14815. 1, 1, 1, 1, 1, 1, 1, 1,
  14816. 1, 1, 2509, 1, 2510, 1, 1, 1,
  14817. 2511, 1, 1, 1, 1, 1, 1, 1,
  14818. 1, 1, 1, 1, 1, 1, 1, 1,
  14819. 1, 1, 1, 2510, 1, 1, 1, 1,
  14820. 1, 1, 1, 2512, 1, 1, 1, 2510,
  14821. 1, 1, 1, 1, 1, 1, 1, 1,
  14822. 1, 1, 1, 1, 1, 2513, 1, 1,
  14823. 1, 1, 1, 2120, 1, 2514, 1, 2510,
  14824. 1, 1, 1, 1, 1, 1, 1, 1,
  14825. 1, 1, 1, 1, 1, 1, 1, 1,
  14826. 1, 1, 1, 1, 1, 1, 2510, 1,
  14827. 2515, 1, 1, 1, 2516, 1, 1, 1,
  14828. 1, 1, 1, 1, 1, 1, 1, 1,
  14829. 1, 1, 1, 1, 1, 1, 1, 2515,
  14830. 1, 1, 1, 1, 1, 1, 1, 2517,
  14831. 1, 1, 1, 2515, 1, 1, 1, 1,
  14832. 1, 1, 1, 1, 1, 1, 1, 1,
  14833. 1, 2518, 1, 1, 1, 1, 1, 2454,
  14834. 1, 2519, 1, 1, 1, 2520, 1, 1,
  14835. 1, 1, 1, 1, 1, 1, 1, 1,
  14836. 1, 1, 1, 1, 1, 1, 1, 1,
  14837. 2519, 2521, 2522, 2521, 2521, 2521, 2521, 2521,
  14838. 2523, 1, 2521, 2521, 1, 2521, 2524, 2521,
  14839. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14840. 2521, 2521, 1, 1, 1, 2521, 1, 2521,
  14841. 1, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14842. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14843. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14844. 2521, 2521, 2521, 1, 1, 1, 2521, 2521,
  14845. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14846. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14847. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
  14848. 2521, 2521, 2521, 2521, 2521, 2521, 2521, 1,
  14849. 1, 1, 1, 1, 1, 1, 1, 1,
  14850. 1, 1, 1, 1, 1, 1, 1, 1,
  14851. 1, 1, 1, 1, 1, 1, 1, 1,
  14852. 1, 1, 1, 1, 1, 1, 1, 1,
  14853. 1, 1, 1, 1, 1, 1, 1, 1,
  14854. 1, 1, 1, 1, 1, 1, 1, 1,
  14855. 1, 1, 1, 1, 1, 1, 1, 1,
  14856. 1, 1, 1, 1, 1, 1, 1, 1,
  14857. 1, 1, 2525, 2525, 2525, 2525, 2525, 2525,
  14858. 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
  14859. 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
  14860. 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
  14861. 2526, 2527, 2527, 2527, 2527, 2527, 2527, 2527,
  14862. 2527, 2527, 2527, 2527, 2527, 2528, 2527, 2527,
  14863. 2529, 2530, 2530, 2530, 2531, 1, 2532, 1,
  14864. 1, 1, 2533, 1, 1, 1, 1, 1,
  14865. 1, 1, 1, 1, 1, 1, 1, 1,
  14866. 1, 1, 1, 1, 1, 2532, 2103, 2104,
  14867. 2103, 2103, 2103, 2103, 2103, 2534, 1, 2103,
  14868. 2103, 1, 2103, 2107, 2103, 2103, 2103, 2103,
  14869. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 1,
  14870. 1, 1, 2103, 1, 2103, 1, 2103, 2103,
  14871. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14872. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14873. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14874. 1, 1, 1, 2103, 2103, 2103, 2103, 2103,
  14875. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14876. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14877. 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
  14878. 2103, 2103, 2103, 2103, 1, 1, 1, 1,
  14879. 1, 1, 1, 1, 1, 1, 1, 1,
  14880. 1, 1, 1, 1, 1, 1, 1, 1,
  14881. 1, 1, 1, 1, 1, 1, 1, 1,
  14882. 1, 1, 1, 1, 1, 1, 1, 1,
  14883. 1, 1, 1, 1, 1, 1, 1, 1,
  14884. 1, 1, 1, 1, 1, 1, 1, 1,
  14885. 1, 1, 1, 1, 1, 1, 1, 1,
  14886. 1, 1, 1, 1, 1, 1, 1, 2109,
  14887. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  14888. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  14889. 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
  14890. 2109, 2109, 2109, 2109, 2109, 2110, 2111, 2111,
  14891. 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
  14892. 2111, 2111, 2112, 2111, 2111, 2113, 2114, 2114,
  14893. 2114, 2115, 1, 2535, 1, 2532, 1, 1,
  14894. 1, 1, 1, 1, 1, 1, 1, 1,
  14895. 1, 1, 1, 1, 1, 1, 1, 1,
  14896. 1, 1, 1, 1, 2532, 1, 2536, 1,
  14897. 1, 1, 2537, 1, 1, 1, 1, 1,
  14898. 1, 1, 1, 1, 1, 1, 1, 1,
  14899. 1, 1, 1, 1, 1, 2536, 2449, 2450,
  14900. 2449, 2449, 2449, 2449, 2449, 2538, 1, 2449,
  14901. 2449, 1, 2449, 2453, 2449, 2449, 2449, 2449,
  14902. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 1,
  14903. 1, 1, 2449, 1, 2449, 1, 2449, 2449,
  14904. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14905. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14906. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14907. 1, 1, 1, 2449, 2449, 2449, 2449, 2449,
  14908. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14909. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14910. 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
  14911. 2449, 2449, 2449, 2449, 1, 1, 1, 1,
  14912. 1, 1, 1, 1, 1, 1, 1, 1,
  14913. 1, 1, 1, 1, 1, 1, 1, 1,
  14914. 1, 1, 1, 1, 1, 1, 1, 1,
  14915. 1, 1, 1, 1, 1, 1, 1, 1,
  14916. 1, 1, 1, 1, 1, 1, 1, 1,
  14917. 1, 1, 1, 1, 1, 1, 1, 1,
  14918. 1, 1, 1, 1, 1, 1, 1, 1,
  14919. 1, 1, 1, 1, 1, 1, 1, 2455,
  14920. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14921. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14922. 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455,
  14923. 2455, 2455, 2455, 2455, 2455, 2456, 2457, 2457,
  14924. 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457,
  14925. 2457, 2457, 2458, 2457, 2457, 2459, 2460, 2460,
  14926. 2460, 2461, 1, 2340, 2125, 2340, 2340, 2340,
  14927. 2340, 2340, 1, 1, 2340, 2340, 1, 2340,
  14928. 2539, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14929. 2340, 2340, 2340, 2340, 1, 1, 1, 2340,
  14930. 1, 2340, 1, 2340, 2340, 2340, 2340, 2340,
  14931. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14932. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14933. 2340, 2340, 2340, 2340, 2340, 1, 1, 1,
  14934. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14935. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14936. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14937. 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340,
  14938. 2340, 1, 1, 1, 1, 1, 1, 1,
  14939. 1, 1, 1, 1, 1, 1, 1, 1,
  14940. 1, 1, 1, 1, 1, 1, 1, 1,
  14941. 1, 1, 1, 1, 1, 1, 1, 1,
  14942. 1, 1, 1, 1, 1, 1, 1, 1,
  14943. 1, 1, 1, 1, 1, 1, 1, 1,
  14944. 1, 1, 1, 1, 1, 1, 1, 1,
  14945. 1, 1, 1, 1, 1, 1, 1, 1,
  14946. 1, 1, 1, 1, 2345, 2345, 2345, 2345,
  14947. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14948. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14949. 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
  14950. 2345, 2345, 2346, 2347, 2347, 2347, 2347, 2347,
  14951. 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2348,
  14952. 2347, 2347, 2349, 2350, 2350, 2350, 2351, 1,
  14953. 2502, 1, 1, 1, 2540, 1, 1, 1,
  14954. 1, 1, 1, 1, 1, 1, 1, 1,
  14955. 1, 1, 1, 1, 1, 1, 1, 2502,
  14956. 2541, 1, 2541, 2541, 2541, 2541, 2541, 2542,
  14957. 1, 2541, 2541, 1, 2541, 1, 2541, 2541,
  14958. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14959. 2541, 1, 1, 1, 2541, 1, 2541, 1,
  14960. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14961. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14962. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14963. 2541, 2541, 1, 1, 1, 2541, 2541, 2541,
  14964. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14965. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14966. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14967. 2541, 2541, 2541, 2541, 2541, 2541, 1, 1,
  14968. 1, 1, 1, 1, 1, 1, 1, 1,
  14969. 1, 1, 1, 1, 1, 1, 1, 1,
  14970. 1, 1, 1, 1, 1, 1, 1, 1,
  14971. 1, 1, 1, 1, 1, 1, 1, 1,
  14972. 1, 1, 1, 1, 1, 1, 1, 1,
  14973. 1, 1, 1, 1, 1, 1, 1, 1,
  14974. 1, 1, 1, 1, 1, 1, 1, 1,
  14975. 1, 1, 1, 1, 1, 1, 1, 1,
  14976. 1, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  14977. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  14978. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  14979. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2544,
  14980. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  14981. 2545, 2545, 2545, 2545, 2546, 2545, 2545, 2547,
  14982. 2548, 2548, 2548, 2549, 1, 2550, 1, 2502,
  14983. 1, 1, 1, 1, 1, 1, 1, 1,
  14984. 1, 1, 1, 1, 1, 1, 1, 1,
  14985. 1, 1, 1, 1, 1, 1, 2502, 1,
  14986. 2496, 1, 1, 1, 2497, 1, 1, 1,
  14987. 1, 1, 1, 1, 1, 1, 1, 1,
  14988. 1, 1, 1, 1, 1, 1, 1, 2496,
  14989. 2541, 1, 2541, 2541, 2541, 2541, 2541, 2498,
  14990. 1, 2541, 2541, 2499, 2541, 2502, 2541, 2541,
  14991. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14992. 2541, 2501, 1, 1, 2541, 1, 2541, 1,
  14993. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14994. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14995. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14996. 2541, 2541, 1, 1, 1, 2541, 2541, 2541,
  14997. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14998. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  14999. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15000. 2541, 2541, 2541, 2541, 2541, 2541, 1, 1,
  15001. 1, 1, 1, 1, 1, 1, 1, 1,
  15002. 1, 1, 1, 1, 1, 1, 1, 1,
  15003. 1, 1, 1, 1, 1, 1, 1, 1,
  15004. 1, 1, 1, 1, 1, 1, 1, 1,
  15005. 1, 1, 1, 1, 1, 1, 1, 1,
  15006. 1, 1, 1, 1, 1, 1, 1, 1,
  15007. 1, 1, 1, 1, 1, 1, 1, 1,
  15008. 1, 1, 1, 1, 1, 1, 1, 1,
  15009. 1, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15010. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15011. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15012. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2544,
  15013. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15014. 2545, 2545, 2545, 2545, 2546, 2545, 2545, 2547,
  15015. 2548, 2548, 2548, 2549, 1, 2541, 2541, 2541,
  15016. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15017. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15018. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15019. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15020. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15021. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15022. 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541,
  15023. 2541, 2541, 2541, 2541, 2541, 1, 2543, 2543,
  15024. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15025. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15026. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15027. 2543, 2543, 2543, 2543, 2543, 2543, 1, 2543,
  15028. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15029. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15030. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15031. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15032. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15033. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15034. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15035. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 1,
  15036. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15037. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15038. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15039. 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
  15040. 1, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15041. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15042. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15043. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15044. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15045. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15046. 2545, 1, 2545, 2545, 2545, 2545, 2545, 2545,
  15047. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15048. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15049. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15050. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15051. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15052. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15053. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15054. 2545, 2545, 1, 2545, 2545, 2545, 2545, 2545,
  15055. 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
  15056. 2545, 2545, 2545, 1, 2508, 1, 1, 1,
  15057. 2551, 1, 1, 1, 1, 1, 1, 1,
  15058. 1, 1, 1, 1, 1, 1, 1, 1,
  15059. 1, 1, 1, 2508, 2552, 1, 2552, 2552,
  15060. 2552, 2552, 2552, 2553, 1, 2552, 2552, 1,
  15061. 2552, 1, 2552, 2552, 2552, 2552, 2552, 2552,
  15062. 2552, 2552, 2552, 2552, 2552, 1, 1, 1,
  15063. 2552, 1, 2552, 1, 2552, 2552, 2552, 2552,
  15064. 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15065. 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15066. 2552, 2552, 2552, 2552, 2552, 2552, 1, 1,
  15067. 1, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15068. 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15069. 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15070. 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
  15071. 2552, 2552, 1, 1, 1, 1, 1, 1,
  15072. 1, 1, 1, 1, 1, 1, 1, 1,
  15073. 1, 1, 1, 1, 1, 1, 1, 1,
  15074. 1, 1, 1, 1, 1, 1, 1, 1,
  15075. 1, 1, 1, 1, 1, 1, 1, 1,
  15076. 1, 1, 1, 1, 1, 1, 1, 1,
  15077. 1, 1, 1, 1, 1, 1, 1, 1,
  15078. 1, 1, 1, 1, 1, 1, 1, 1,
  15079. 1, 1, 1, 1, 1, 2554, 2554, 2554,
  15080. 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
  15081. 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
  15082. 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
  15083. 2554, 2554, 2554, 2555, 2556, 2556, 2556, 2556,
  15084. 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556,
  15085. 2557, 2556, 2556, 2558, 2559, 2559, 2559, 2560,
  15086. 1, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15087. 2561, 2484, 1, 2561, 2561, 2562, 2561, 2561,
  15088. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15089. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15090. 2484, 2561, 1, 2561, 2561, 2561, 2561, 2561,
  15091. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15092. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15093. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15094. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15095. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15096. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15097. 2561, 2561, 2561, 2561, 2563, 2561, 2561, 2561,
  15098. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15099. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15100. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15101. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15102. 1, 1, 1, 1, 1, 1, 1, 1,
  15103. 1, 1, 1, 1, 1, 1, 1, 1,
  15104. 1, 1, 1, 1, 1, 1, 1, 1,
  15105. 1, 1, 1, 1, 1, 1, 1, 1,
  15106. 1, 1, 1, 1, 1, 1, 1, 1,
  15107. 1, 1, 1, 1, 1, 1, 1, 1,
  15108. 1, 1, 1, 1, 1, 1, 1, 1,
  15109. 1, 1, 1, 1, 1, 1, 1, 1,
  15110. 1, 1, 2564, 2564, 2564, 2564, 2564, 2564,
  15111. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15112. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15113. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15114. 2565, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15115. 2566, 2566, 2566, 2566, 2566, 2567, 2566, 2566,
  15116. 2568, 2569, 2569, 2569, 2570, 1, 2561, 2561,
  15117. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 1,
  15118. 2561, 2561, 2571, 2561, 2561, 2561, 2561, 2561,
  15119. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15120. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2572,
  15121. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15122. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15123. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15124. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15125. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15126. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15127. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15128. 2561, 2563, 2561, 2561, 2561, 2561, 2561, 2561,
  15129. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15130. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15131. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15132. 2561, 2561, 2561, 2561, 2561, 1, 1, 1,
  15133. 1, 1, 1, 1, 1, 1, 1, 1,
  15134. 1, 1, 1, 1, 1, 1, 1, 1,
  15135. 1, 1, 1, 1, 1, 1, 1, 1,
  15136. 1, 1, 1, 1, 1, 1, 1, 1,
  15137. 1, 1, 1, 1, 1, 1, 1, 1,
  15138. 1, 1, 1, 1, 1, 1, 1, 1,
  15139. 1, 1, 1, 1, 1, 1, 1, 1,
  15140. 1, 1, 1, 1, 1, 1, 1, 2564,
  15141. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15142. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15143. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15144. 2564, 2564, 2564, 2564, 2564, 2565, 2566, 2566,
  15145. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15146. 2566, 2566, 2567, 2566, 2566, 2568, 2569, 2569,
  15147. 2569, 2570, 1, 2573, 1, 2561, 1, 1,
  15148. 1, 1, 1, 1, 1, 1, 1, 1,
  15149. 1, 1, 1, 1, 1, 1, 1, 1,
  15150. 1, 1, 1, 1, 2561, 1, 2574, 1,
  15151. 1, 1, 2575, 1, 1, 1, 1, 1,
  15152. 1, 1, 1, 1, 1, 1, 1, 1,
  15153. 1, 1, 1, 1, 1, 2574, 2572, 2484,
  15154. 2572, 2572, 2572, 2572, 2572, 2576, 1, 2572,
  15155. 2572, 2499, 2572, 2486, 2572, 2572, 2572, 2572,
  15156. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2501,
  15157. 1, 1, 2572, 1, 2572, 1, 2572, 2572,
  15158. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15159. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15160. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15161. 1, 1, 1, 2572, 2572, 2572, 2572, 2572,
  15162. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15163. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15164. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15165. 2572, 2572, 2572, 2572, 1, 1, 1, 1,
  15166. 1, 1, 1, 1, 1, 1, 1, 1,
  15167. 1, 1, 1, 1, 1, 1, 1, 1,
  15168. 1, 1, 1, 1, 1, 1, 1, 1,
  15169. 1, 1, 1, 1, 1, 1, 1, 1,
  15170. 1, 1, 1, 1, 1, 1, 1, 1,
  15171. 1, 1, 1, 1, 1, 1, 1, 1,
  15172. 1, 1, 1, 1, 1, 1, 1, 1,
  15173. 1, 1, 1, 1, 1, 1, 1, 2577,
  15174. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15175. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15176. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15177. 2577, 2577, 2577, 2577, 2577, 2578, 2579, 2579,
  15178. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15179. 2579, 2579, 2580, 2579, 2579, 2581, 2582, 2582,
  15180. 2582, 2583, 1, 2574, 1, 1, 1, 2575,
  15181. 1, 1, 1, 1, 1, 1, 1, 1,
  15182. 1, 1, 1, 1, 1, 1, 1, 1,
  15183. 1, 1, 2574, 1, 1, 1, 1, 1,
  15184. 1, 1, 2576, 1, 1, 1, 2499, 1,
  15185. 1, 1, 1, 1, 1, 1, 1, 1,
  15186. 1, 1, 1, 1, 2501, 1, 2584, 1,
  15187. 2574, 1, 1, 1, 1, 1, 1, 1,
  15188. 1, 1, 1, 1, 1, 1, 1, 1,
  15189. 1, 1, 1, 1, 1, 1, 1, 2574,
  15190. 1, 2585, 1, 1, 1, 2586, 1, 1,
  15191. 1, 1, 1, 1, 1, 1, 1, 1,
  15192. 1, 1, 1, 1, 1, 1, 1, 1,
  15193. 2585, 1, 1, 1, 1, 1, 1, 1,
  15194. 2587, 1, 1, 1, 2507, 1, 1, 1,
  15195. 1, 1, 1, 1, 1, 1, 1, 1,
  15196. 1, 1, 2509, 1, 2572, 2484, 2572, 2572,
  15197. 2572, 2572, 2572, 1, 1, 2572, 2572, 1,
  15198. 2572, 2486, 2572, 2572, 2572, 2572, 2572, 2572,
  15199. 2572, 2572, 2572, 2572, 2572, 1, 1, 1,
  15200. 2572, 1, 2572, 1, 2572, 2572, 2572, 2572,
  15201. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15202. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15203. 2572, 2572, 2572, 2572, 2572, 2572, 1, 1,
  15204. 1, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15205. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15206. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15207. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15208. 2572, 2572, 1, 1, 1, 1, 1, 1,
  15209. 1, 1, 1, 1, 1, 1, 1, 1,
  15210. 1, 1, 1, 1, 1, 1, 1, 1,
  15211. 1, 1, 1, 1, 1, 1, 1, 1,
  15212. 1, 1, 1, 1, 1, 1, 1, 1,
  15213. 1, 1, 1, 1, 1, 1, 1, 1,
  15214. 1, 1, 1, 1, 1, 1, 1, 1,
  15215. 1, 1, 1, 1, 1, 1, 1, 1,
  15216. 1, 1, 1, 1, 1, 2577, 2577, 2577,
  15217. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15218. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15219. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15220. 2577, 2577, 2577, 2578, 2579, 2579, 2579, 2579,
  15221. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15222. 2580, 2579, 2579, 2581, 2582, 2582, 2582, 2583,
  15223. 1, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15224. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15225. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15226. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15227. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15228. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15229. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15230. 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572,
  15231. 2572, 1, 2577, 2577, 2577, 2577, 2577, 2577,
  15232. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15233. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15234. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15235. 2577, 2577, 1, 2577, 2577, 2577, 2577, 2577,
  15236. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15237. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15238. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15239. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15240. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15241. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15242. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15243. 2577, 2577, 2577, 1, 2577, 2577, 2577, 2577,
  15244. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15245. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15246. 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
  15247. 2577, 2577, 2577, 2577, 1, 2579, 2579, 2579,
  15248. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15249. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15250. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15251. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15252. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15253. 2579, 2579, 2579, 2579, 2579, 1, 2579, 2579,
  15254. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15255. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15256. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15257. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15258. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15259. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15260. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15261. 2579, 2579, 2579, 2579, 2579, 2579, 1, 2579,
  15262. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
  15263. 2579, 2579, 2579, 2579, 2579, 2579, 2579, 1,
  15264. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15265. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15266. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15267. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15268. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15269. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15270. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15271. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15272. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15273. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15274. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15275. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15276. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15277. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15278. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15279. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15280. 1, 1, 1, 1, 1, 1, 1, 1,
  15281. 1, 1, 1, 1, 1, 1, 1, 1,
  15282. 1, 1, 1, 1, 1, 1, 1, 1,
  15283. 1, 1, 1, 1, 1, 1, 1, 1,
  15284. 1, 1, 1, 1, 1, 1, 1, 1,
  15285. 1, 1, 1, 1, 1, 1, 1, 1,
  15286. 1, 1, 1, 1, 1, 1, 1, 1,
  15287. 1, 1, 1, 1, 1, 1, 1, 1,
  15288. 1, 1, 2564, 2564, 2564, 2564, 2564, 2564,
  15289. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15290. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15291. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15292. 2565, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15293. 2566, 2566, 2566, 2566, 2566, 2567, 2566, 2566,
  15294. 2568, 2569, 2569, 2569, 2570, 1, 2561, 2561,
  15295. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15296. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15297. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15298. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15299. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15300. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15301. 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561,
  15302. 2561, 2561, 2561, 2561, 2561, 2561, 1, 2564,
  15303. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15304. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15305. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15306. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 1,
  15307. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15308. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15309. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15310. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15311. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15312. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15313. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15314. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15315. 1, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15316. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15317. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15318. 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
  15319. 2564, 1, 2566, 2566, 2566, 2566, 2566, 2566,
  15320. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15321. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15322. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15323. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15324. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15325. 2566, 2566, 1, 2566, 2566, 2566, 2566, 2566,
  15326. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15327. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15328. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15329. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15330. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15331. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15332. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15333. 2566, 2566, 2566, 1, 2566, 2566, 2566, 2566,
  15334. 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566,
  15335. 2566, 2566, 2566, 2566, 1, 2588, 1, 2484,
  15336. 1, 1, 1, 1, 1, 1, 1, 1,
  15337. 1, 1, 1, 1, 1, 1, 1, 1,
  15338. 1, 1, 1, 1, 1, 1, 2484, 1,
  15339. 2502, 1, 1, 1, 2540, 1, 1, 1,
  15340. 1, 1, 1, 1, 1, 1, 1, 1,
  15341. 1, 1, 1, 1, 1, 1, 1, 2502,
  15342. 2483, 2484, 2483, 2483, 2483, 2483, 2483, 2542,
  15343. 1, 2483, 2483, 1, 2483, 2486, 2483, 2483,
  15344. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15345. 2483, 1, 1, 1, 2483, 1, 2483, 1,
  15346. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15347. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15348. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15349. 2483, 2483, 1, 1, 1, 2483, 2483, 2483,
  15350. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15351. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15352. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15353. 2483, 2483, 2483, 2483, 2483, 2483, 1, 1,
  15354. 1, 1, 1, 1, 1, 1, 1, 1,
  15355. 1, 1, 1, 1, 1, 1, 1, 1,
  15356. 1, 1, 1, 1, 1, 1, 1, 1,
  15357. 1, 1, 1, 1, 1, 1, 1, 1,
  15358. 1, 1, 1, 1, 1, 1, 1, 1,
  15359. 1, 1, 1, 1, 1, 1, 1, 1,
  15360. 1, 1, 1, 1, 1, 1, 1, 1,
  15361. 1, 1, 1, 1, 1, 1, 1, 1,
  15362. 1, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15363. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15364. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15365. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2489,
  15366. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15367. 2490, 2490, 2490, 2490, 2491, 2490, 2490, 2492,
  15368. 2493, 2493, 2493, 2494, 1, 2483, 2483, 2483,
  15369. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15370. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15371. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15372. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15373. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15374. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15375. 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
  15376. 2483, 2483, 2483, 2483, 2483, 1, 2488, 2488,
  15377. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15378. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15379. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15380. 2488, 2488, 2488, 2488, 2488, 2488, 1, 2488,
  15381. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15382. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15383. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15384. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15385. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15386. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15387. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15388. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 1,
  15389. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15390. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15391. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15392. 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
  15393. 1, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15394. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15395. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15396. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15397. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15398. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15399. 2490, 1, 2490, 2490, 2490, 2490, 2490, 2490,
  15400. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15401. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15402. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15403. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15404. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15405. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15406. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15407. 2490, 2490, 1, 2490, 2490, 2490, 2490, 2490,
  15408. 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
  15409. 2490, 2490, 2490, 1, 2589, 1, 1, 1,
  15410. 2590, 1, 1, 1, 1, 1, 1, 1,
  15411. 1, 1, 1, 1, 1, 1, 1, 1,
  15412. 1, 1, 1, 2589, 2591, 2592, 2591, 2591,
  15413. 2591, 2591, 2591, 2593, 1, 2591, 2591, 1,
  15414. 2591, 2594, 2591, 2591, 2591, 2591, 2591, 2591,
  15415. 2591, 2591, 2591, 2591, 2591, 1, 1, 1,
  15416. 2591, 1, 2591, 1, 2591, 2591, 2591, 2591,
  15417. 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15418. 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15419. 2591, 2591, 2591, 2591, 2591, 2591, 2595, 1,
  15420. 1, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15421. 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15422. 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15423. 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591,
  15424. 2591, 2591, 1, 1, 1, 1, 1, 1,
  15425. 1, 1, 1, 1, 1, 1, 1, 1,
  15426. 1, 1, 1, 1, 1, 1, 1, 1,
  15427. 1, 1, 1, 1, 1, 1, 1, 1,
  15428. 1, 1, 1, 1, 1, 1, 1, 1,
  15429. 1, 1, 1, 1, 1, 1, 1, 1,
  15430. 1, 1, 1, 1, 1, 1, 1, 1,
  15431. 1, 1, 1, 1, 1, 1, 1, 1,
  15432. 1, 1, 1, 1, 1, 2596, 2596, 2596,
  15433. 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
  15434. 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
  15435. 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
  15436. 2596, 2596, 2596, 2597, 2598, 2598, 2598, 2598,
  15437. 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
  15438. 2599, 2598, 2598, 2600, 2601, 2601, 2601, 2602,
  15439. 1, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15440. 2487, 2487, 1, 2487, 2487, 2603, 2487, 2487,
  15441. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15442. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15443. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15444. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15445. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15446. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15447. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15448. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15449. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15450. 2487, 2487, 2487, 1, 2604, 2574, 2487, 2487,
  15451. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15452. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15453. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15454. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15455. 1, 1, 1, 1, 1, 1, 1, 1,
  15456. 1, 1, 1, 1, 1, 1, 1, 1,
  15457. 1, 1, 1, 1, 1, 1, 1, 1,
  15458. 1, 1, 1, 1, 1, 1, 1, 1,
  15459. 1, 1, 1, 1, 1, 1, 1, 1,
  15460. 1, 1, 1, 1, 1, 1, 1, 1,
  15461. 1, 1, 1, 1, 1, 1, 1, 1,
  15462. 1, 1, 1, 1, 1, 1, 1, 1,
  15463. 1, 1, 2605, 2605, 2605, 2605, 2605, 2605,
  15464. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15465. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15466. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15467. 2606, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15468. 2607, 2607, 2607, 2607, 2607, 2608, 2607, 2607,
  15469. 2609, 2610, 2610, 2610, 2611, 1, 2612, 1,
  15470. 2487, 1, 1, 1, 1, 1, 1, 1,
  15471. 1, 1, 1, 1, 1, 1, 1, 1,
  15472. 1, 1, 1, 1, 1, 1, 1, 2487,
  15473. 1, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15474. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15475. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15476. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15477. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15478. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15479. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15480. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15481. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15482. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15483. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15484. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15485. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15486. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15487. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15488. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15489. 2487, 1, 1, 1, 1, 1, 1, 1,
  15490. 1, 1, 1, 1, 1, 1, 1, 1,
  15491. 1, 1, 1, 1, 1, 1, 1, 1,
  15492. 1, 1, 1, 1, 1, 1, 1, 1,
  15493. 1, 1, 1, 1, 1, 1, 1, 1,
  15494. 1, 1, 1, 1, 1, 1, 1, 1,
  15495. 1, 1, 1, 1, 1, 1, 1, 1,
  15496. 1, 1, 1, 1, 1, 1, 1, 1,
  15497. 1, 1, 1, 2605, 2605, 2605, 2605, 2605,
  15498. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15499. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15500. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15501. 2605, 2606, 2607, 2607, 2607, 2607, 2607, 2607,
  15502. 2607, 2607, 2607, 2607, 2607, 2607, 2608, 2607,
  15503. 2607, 2609, 2610, 2610, 2610, 2611, 1, 2487,
  15504. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15505. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15506. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15507. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15508. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15509. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15510. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
  15511. 2487, 2487, 2487, 2487, 2487, 2487, 2487, 1,
  15512. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15513. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15514. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15515. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15516. 1, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15517. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15518. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15519. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15520. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15521. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15522. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15523. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15524. 2605, 1, 2605, 2605, 2605, 2605, 2605, 2605,
  15525. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15526. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15527. 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
  15528. 2605, 2605, 1, 2607, 2607, 2607, 2607, 2607,
  15529. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15530. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15531. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15532. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15533. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15534. 2607, 2607, 2607, 1, 2607, 2607, 2607, 2607,
  15535. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15536. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15537. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15538. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15539. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15540. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15541. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15542. 2607, 2607, 2607, 2607, 1, 2607, 2607, 2607,
  15543. 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
  15544. 2607, 2607, 2607, 2607, 2607, 1, 2032, 2032,
  15545. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15546. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15547. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15548. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15549. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15550. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15551. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15552. 2032, 2032, 2032, 2032, 2032, 2032, 1, 2039,
  15553. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15554. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15555. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15556. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 1,
  15557. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15558. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15559. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15560. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15561. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15562. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15563. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15564. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15565. 1, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15566. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15567. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15568. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15569. 2039, 1, 2041, 2041, 2041, 2041, 2041, 2041,
  15570. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15571. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15572. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15573. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15574. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15575. 2041, 2041, 1, 2041, 2041, 2041, 2041, 2041,
  15576. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15577. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15578. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15579. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15580. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15581. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15582. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15583. 2041, 2041, 2041, 1, 2041, 2041, 2041, 2041,
  15584. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15585. 2041, 2041, 2041, 2041, 1, 2613, 1, 1,
  15586. 1, 2614, 1, 1, 1, 1, 1, 1,
  15587. 1, 1, 1, 1, 1, 1, 1, 1,
  15588. 1, 1, 1, 1, 2613, 2078, 2079, 2078,
  15589. 2078, 2078, 2078, 2078, 2615, 1, 2078, 2078,
  15590. 2616, 2078, 2617, 2078, 2078, 2078, 2078, 2078,
  15591. 2078, 2078, 2078, 2078, 2078, 2078, 1, 2618,
  15592. 2082, 2078, 1, 2078, 2619, 2078, 2078, 2078,
  15593. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15594. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15595. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 1,
  15596. 1, 1, 2078, 2078, 2078, 2078, 2078, 2078,
  15597. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15598. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15599. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15600. 2078, 2078, 2078, 1, 1, 1, 1, 1,
  15601. 1, 1, 1, 1, 1, 1, 1, 1,
  15602. 1, 1, 1, 1, 1, 1, 1, 1,
  15603. 1, 1, 1, 1, 1, 1, 1, 1,
  15604. 1, 1, 1, 1, 1, 1, 1, 1,
  15605. 1, 1, 1, 1, 1, 1, 1, 1,
  15606. 1, 1, 1, 1, 1, 1, 1, 1,
  15607. 1, 1, 1, 1, 1, 1, 1, 1,
  15608. 1, 1, 1, 1, 1, 1, 2083, 2083,
  15609. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15610. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15611. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15612. 2083, 2083, 2083, 2083, 2084, 2085, 2085, 2085,
  15613. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  15614. 2085, 2086, 2085, 2085, 2087, 2088, 2088, 2088,
  15615. 2089, 1, 2620, 1, 1, 1, 2621, 1,
  15616. 1, 1, 1, 1, 1, 1, 1, 1,
  15617. 1, 1, 1, 1, 1, 1, 1, 1,
  15618. 1, 2620, 2622, 2623, 2622, 2622, 2622, 2622,
  15619. 2622, 2624, 1, 2622, 2622, 1, 2622, 2051,
  15620. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15621. 2622, 2622, 2622, 1, 1, 2021, 2622, 1,
  15622. 2622, 2051, 2622, 2622, 2622, 2622, 2622, 2622,
  15623. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15624. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15625. 2622, 2622, 2622, 2622, 1, 1, 1, 2622,
  15626. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15627. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15628. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15629. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15630. 1, 1, 1, 1, 1, 1, 1, 1,
  15631. 1, 1, 1, 1, 1, 1, 1, 1,
  15632. 1, 1, 1, 1, 1, 1, 1, 1,
  15633. 1, 1, 1, 1, 1, 1, 1, 1,
  15634. 1, 1, 1, 1, 1, 1, 1, 1,
  15635. 1, 1, 1, 1, 1, 1, 1, 1,
  15636. 1, 1, 1, 1, 1, 1, 1, 1,
  15637. 1, 1, 1, 1, 1, 1, 1, 1,
  15638. 1, 1, 1, 2625, 2625, 2625, 2625, 2625,
  15639. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15640. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15641. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15642. 2625, 2626, 2627, 2627, 2627, 2627, 2627, 2627,
  15643. 2627, 2627, 2627, 2627, 2627, 2627, 2628, 2627,
  15644. 2627, 2629, 2630, 2630, 2630, 2631, 1, 2632,
  15645. 1, 1, 1, 2633, 1, 1, 1, 1,
  15646. 1, 1, 1, 1, 1, 1, 1, 1,
  15647. 1, 1, 1, 1, 1, 1, 2632, 2622,
  15648. 2623, 2622, 2622, 2622, 2622, 2622, 2634, 1,
  15649. 2622, 2622, 1, 2622, 1, 2622, 2622, 2622,
  15650. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15651. 1, 1, 2004, 2622, 1, 2622, 1, 2622,
  15652. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15653. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15654. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15655. 2622, 1, 1, 1, 2622, 2622, 2622, 2622,
  15656. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15657. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15658. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15659. 2622, 2622, 2622, 2622, 2622, 1, 1, 1,
  15660. 1, 1, 1, 1, 1, 1, 1, 1,
  15661. 1, 1, 1, 1, 1, 1, 1, 1,
  15662. 1, 1, 1, 1, 1, 1, 1, 1,
  15663. 1, 1, 1, 1, 1, 1, 1, 1,
  15664. 1, 1, 1, 1, 1, 1, 1, 1,
  15665. 1, 1, 1, 1, 1, 1, 1, 1,
  15666. 1, 1, 1, 1, 1, 1, 1, 1,
  15667. 1, 1, 1, 1, 1, 1, 1, 1,
  15668. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15669. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15670. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15671. 2625, 2625, 2625, 2625, 2625, 2625, 2626, 2627,
  15672. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  15673. 2627, 2627, 2627, 2628, 2627, 2627, 2629, 2630,
  15674. 2630, 2630, 2631, 1, 2635, 1, 2632, 1,
  15675. 1, 1, 1, 1, 1, 1, 1, 1,
  15676. 1, 1, 1, 1, 1, 1, 1, 1,
  15677. 1, 1, 1, 1, 1, 2632, 1, 2636,
  15678. 1, 1, 1, 2637, 1, 1, 1, 1,
  15679. 1, 1, 1, 1, 1, 1, 1, 1,
  15680. 1, 1, 1, 1, 1, 1, 2636, 2622,
  15681. 2033, 2622, 2622, 2622, 2622, 2622, 2638, 1,
  15682. 2622, 2622, 2173, 2622, 2036, 2622, 2622, 2622,
  15683. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15684. 1, 2174, 2021, 2622, 1, 2622, 2639, 2622,
  15685. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15686. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15687. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15688. 2622, 1, 1, 1, 2622, 2622, 2622, 2622,
  15689. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15690. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15691. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  15692. 2622, 2622, 2622, 2622, 2622, 1, 1, 1,
  15693. 1, 1, 1, 1, 1, 1, 1, 1,
  15694. 1, 1, 1, 1, 1, 1, 1, 1,
  15695. 1, 1, 1, 1, 1, 1, 1, 1,
  15696. 1, 1, 1, 1, 1, 1, 1, 1,
  15697. 1, 1, 1, 1, 1, 1, 1, 1,
  15698. 1, 1, 1, 1, 1, 1, 1, 1,
  15699. 1, 1, 1, 1, 1, 1, 1, 1,
  15700. 1, 1, 1, 1, 1, 1, 1, 1,
  15701. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15702. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15703. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  15704. 2625, 2625, 2625, 2625, 2625, 2625, 2626, 2627,
  15705. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  15706. 2627, 2627, 2627, 2628, 2627, 2627, 2629, 2630,
  15707. 2630, 2630, 2631, 1, 2636, 1, 1, 1,
  15708. 2637, 1, 1, 1, 1, 1, 1, 1,
  15709. 1, 1, 1, 1, 1, 1, 1, 1,
  15710. 1, 1, 1, 2636, 2032, 2033, 2032, 2032,
  15711. 2032, 2032, 2032, 2638, 1, 2032, 2032, 2173,
  15712. 2032, 2036, 2032, 2032, 2032, 2032, 2032, 2032,
  15713. 2032, 2032, 2032, 2032, 2032, 1, 2174, 2021,
  15714. 2032, 1, 2032, 2639, 2032, 2032, 2032, 2032,
  15715. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15716. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15717. 2032, 2032, 2032, 2032, 2032, 2032, 1, 1,
  15718. 1, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15719. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15720. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15721. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15722. 2032, 2032, 1, 1, 1, 1, 1, 1,
  15723. 1, 1, 1, 1, 1, 1, 1, 1,
  15724. 1, 1, 1, 1, 1, 1, 1, 1,
  15725. 1, 1, 1, 1, 1, 1, 1, 1,
  15726. 1, 1, 1, 1, 1, 1, 1, 1,
  15727. 1, 1, 1, 1, 1, 1, 1, 1,
  15728. 1, 1, 1, 1, 1, 1, 1, 1,
  15729. 1, 1, 1, 1, 1, 1, 1, 1,
  15730. 1, 1, 1, 1, 1, 2039, 2039, 2039,
  15731. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15732. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15733. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15734. 2039, 2039, 2039, 2040, 2041, 2041, 2041, 2041,
  15735. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  15736. 2042, 2041, 2041, 2043, 2044, 2044, 2044, 2045,
  15737. 1, 2640, 1, 2641, 1, 1, 1, 1,
  15738. 1, 1, 1, 1, 1, 1, 1, 1,
  15739. 1, 1, 1, 1, 1, 1, 1, 1,
  15740. 1, 1, 2641, 1, 2642, 1, 1, 1,
  15741. 2643, 1, 1, 1, 1, 1, 1, 1,
  15742. 1, 1, 1, 1, 1, 1, 1, 1,
  15743. 1, 1, 1, 2642, 2078, 2079, 2078, 2078,
  15744. 2078, 2078, 2078, 2644, 1, 2078, 2078, 2178,
  15745. 2078, 2617, 2078, 2078, 2078, 2078, 2078, 2078,
  15746. 2078, 2078, 2078, 2078, 2078, 1, 2179, 2082,
  15747. 2078, 1, 2078, 2645, 2078, 2078, 2078, 2078,
  15748. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15749. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15750. 2078, 2078, 2078, 2078, 2078, 2078, 1, 1,
  15751. 1, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15752. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15753. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15754. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15755. 2078, 2078, 1, 1, 1, 1, 1, 1,
  15756. 1, 1, 1, 1, 1, 1, 1, 1,
  15757. 1, 1, 1, 1, 1, 1, 1, 1,
  15758. 1, 1, 1, 1, 1, 1, 1, 1,
  15759. 1, 1, 1, 1, 1, 1, 1, 1,
  15760. 1, 1, 1, 1, 1, 1, 1, 1,
  15761. 1, 1, 1, 1, 1, 1, 1, 1,
  15762. 1, 1, 1, 1, 1, 1, 1, 1,
  15763. 1, 1, 1, 1, 1, 2083, 2083, 2083,
  15764. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15765. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15766. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15767. 2083, 2083, 2083, 2084, 2085, 2085, 2085, 2085,
  15768. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  15769. 2086, 2085, 2085, 2087, 2088, 2088, 2088, 2089,
  15770. 1, 2646, 1, 1, 1, 2647, 1, 1,
  15771. 1, 1, 1, 1, 1, 1, 1, 1,
  15772. 1, 1, 1, 1, 1, 1, 1, 1,
  15773. 2646, 2648, 2649, 2648, 2648, 2648, 2648, 2648,
  15774. 2650, 1, 2648, 2648, 1, 2648, 2651, 2648,
  15775. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15776. 2648, 2648, 1, 1, 2021, 2648, 1, 2648,
  15777. 2051, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15778. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15779. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15780. 2648, 2648, 2648, 2652, 1, 1, 2648, 2648,
  15781. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15782. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15783. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
  15784. 2648, 2648, 2648, 2648, 2648, 2648, 2648, 1,
  15785. 1, 1, 1, 1, 1, 1, 1, 1,
  15786. 1, 1, 1, 1, 1, 1, 1, 1,
  15787. 1, 1, 1, 1, 1, 1, 1, 1,
  15788. 1, 1, 1, 1, 1, 1, 1, 1,
  15789. 1, 1, 1, 1, 1, 1, 1, 1,
  15790. 1, 1, 1, 1, 1, 1, 1, 1,
  15791. 1, 1, 1, 1, 1, 1, 1, 1,
  15792. 1, 1, 1, 1, 1, 1, 1, 1,
  15793. 1, 1, 2653, 2653, 2653, 2653, 2653, 2653,
  15794. 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
  15795. 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
  15796. 2653, 2653, 2653, 2653, 2653, 2653, 2653, 2653,
  15797. 2654, 2655, 2655, 2655, 2655, 2655, 2655, 2655,
  15798. 2655, 2655, 2655, 2655, 2655, 2656, 2655, 2655,
  15799. 2657, 2658, 2658, 2658, 2659, 1, 2660, 1,
  15800. 1, 1, 2661, 1, 1, 1, 1, 1,
  15801. 1, 1, 1, 1, 1, 1, 1, 1,
  15802. 1, 1, 1, 1, 1, 2660, 2662, 2663,
  15803. 2662, 2662, 2662, 2662, 2662, 2664, 1, 2662,
  15804. 2662, 1, 2662, 2665, 2662, 2662, 2662, 2662,
  15805. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 1,
  15806. 1, 2004, 2662, 1, 2662, 1, 2662, 2662,
  15807. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15808. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15809. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15810. 2666, 1, 1, 2662, 2662, 2662, 2662, 2662,
  15811. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15812. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15813. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15814. 2662, 2662, 2662, 2662, 1, 1, 1, 1,
  15815. 1, 1, 1, 1, 1, 1, 1, 1,
  15816. 1, 1, 1, 1, 1, 1, 1, 1,
  15817. 1, 1, 1, 1, 1, 1, 1, 1,
  15818. 1, 1, 1, 1, 1, 1, 1, 1,
  15819. 1, 1, 1, 1, 1, 1, 1, 1,
  15820. 1, 1, 1, 1, 1, 1, 1, 1,
  15821. 1, 1, 1, 1, 1, 1, 1, 1,
  15822. 1, 1, 1, 1, 1, 1, 1, 2667,
  15823. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15824. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15825. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15826. 2667, 2667, 2667, 2667, 2667, 2668, 2669, 2669,
  15827. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  15828. 2669, 2669, 2670, 2669, 2669, 2671, 2672, 2672,
  15829. 2672, 2673, 1, 2674, 1, 2660, 1, 1,
  15830. 1, 1, 1, 1, 1, 1, 1, 1,
  15831. 1, 1, 1, 1, 1, 1, 1, 1,
  15832. 1, 1, 1, 1, 2660, 1, 2675, 1,
  15833. 1, 1, 2676, 1, 1, 1, 1, 1,
  15834. 1, 1, 1, 1, 1, 1, 1, 1,
  15835. 1, 1, 1, 1, 1, 2675, 2662, 2663,
  15836. 2662, 2662, 2662, 2662, 2662, 2677, 1, 2662,
  15837. 2662, 2678, 2662, 2679, 2662, 2662, 2662, 2662,
  15838. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 1,
  15839. 2680, 2021, 2662, 1, 2662, 2051, 2662, 2662,
  15840. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15841. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15842. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15843. 1, 1, 1, 2662, 2662, 2662, 2662, 2662,
  15844. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15845. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15846. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  15847. 2662, 2662, 2662, 2662, 1, 1, 1, 1,
  15848. 1, 1, 1, 1, 1, 1, 1, 1,
  15849. 1, 1, 1, 1, 1, 1, 1, 1,
  15850. 1, 1, 1, 1, 1, 1, 1, 1,
  15851. 1, 1, 1, 1, 1, 1, 1, 1,
  15852. 1, 1, 1, 1, 1, 1, 1, 1,
  15853. 1, 1, 1, 1, 1, 1, 1, 1,
  15854. 1, 1, 1, 1, 1, 1, 1, 1,
  15855. 1, 1, 1, 1, 1, 1, 1, 2667,
  15856. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15857. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15858. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  15859. 2667, 2667, 2667, 2667, 2667, 2668, 2669, 2669,
  15860. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  15861. 2669, 2669, 2670, 2669, 2669, 2671, 2672, 2672,
  15862. 2672, 2673, 1, 2675, 1, 1, 1, 2676,
  15863. 1, 1, 1, 1, 1, 1, 1, 1,
  15864. 1, 1, 1, 1, 1, 1, 1, 1,
  15865. 1, 1, 2675, 2032, 2033, 2032, 2032, 2032,
  15866. 2032, 2032, 2677, 1, 2032, 2032, 2678, 2032,
  15867. 2681, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15868. 2032, 2032, 2032, 2032, 1, 2680, 2021, 2032,
  15869. 1, 2032, 2051, 2032, 2032, 2032, 2032, 2032,
  15870. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15871. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15872. 2032, 2032, 2032, 2032, 2032, 1, 1, 1,
  15873. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15874. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15875. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15876. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  15877. 2032, 1, 1, 1, 1, 1, 1, 1,
  15878. 1, 1, 1, 1, 1, 1, 1, 1,
  15879. 1, 1, 1, 1, 1, 1, 1, 1,
  15880. 1, 1, 1, 1, 1, 1, 1, 1,
  15881. 1, 1, 1, 1, 1, 1, 1, 1,
  15882. 1, 1, 1, 1, 1, 1, 1, 1,
  15883. 1, 1, 1, 1, 1, 1, 1, 1,
  15884. 1, 1, 1, 1, 1, 1, 1, 1,
  15885. 1, 1, 1, 1, 2039, 2039, 2039, 2039,
  15886. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15887. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15888. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  15889. 2039, 2039, 2040, 2041, 2041, 2041, 2041, 2041,
  15890. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2042,
  15891. 2041, 2041, 2043, 2044, 2044, 2044, 2045, 1,
  15892. 2682, 1, 2683, 1, 1, 1, 1, 1,
  15893. 1, 1, 1, 1, 1, 1, 1, 1,
  15894. 1, 1, 1, 1, 1, 1, 1, 1,
  15895. 1, 2683, 1, 2684, 1, 1, 1, 2685,
  15896. 1, 1, 1, 1, 1, 1, 1, 1,
  15897. 1, 1, 1, 1, 1, 1, 1, 1,
  15898. 1, 1, 2684, 2078, 2079, 2078, 2078, 2078,
  15899. 2078, 2078, 2686, 1, 2078, 2078, 2687, 2078,
  15900. 2688, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15901. 2078, 2078, 2078, 2078, 1, 2689, 2082, 2078,
  15902. 1, 2078, 2081, 2078, 2078, 2078, 2078, 2078,
  15903. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15904. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15905. 2078, 2078, 2078, 2078, 2078, 1, 1, 1,
  15906. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15907. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15908. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15909. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  15910. 2078, 1, 1, 1, 1, 1, 1, 1,
  15911. 1, 1, 1, 1, 1, 1, 1, 1,
  15912. 1, 1, 1, 1, 1, 1, 1, 1,
  15913. 1, 1, 1, 1, 1, 1, 1, 1,
  15914. 1, 1, 1, 1, 1, 1, 1, 1,
  15915. 1, 1, 1, 1, 1, 1, 1, 1,
  15916. 1, 1, 1, 1, 1, 1, 1, 1,
  15917. 1, 1, 1, 1, 1, 1, 1, 1,
  15918. 1, 1, 1, 1, 2083, 2083, 2083, 2083,
  15919. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15920. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15921. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  15922. 2083, 2083, 2084, 2085, 2085, 2085, 2085, 2085,
  15923. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2086,
  15924. 2085, 2085, 2087, 2088, 2088, 2088, 2089, 1,
  15925. 2690, 1, 1, 1, 2691, 1, 1, 1,
  15926. 1, 1, 1, 1, 1, 1, 1, 1,
  15927. 1, 1, 1, 1, 1, 1, 1, 2690,
  15928. 2692, 2033, 2692, 2692, 2692, 2692, 2692, 2693,
  15929. 1, 2692, 2692, 1, 2692, 2051, 2692, 2692,
  15930. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15931. 2692, 1, 1, 2021, 2692, 1, 2692, 2051,
  15932. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15933. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15934. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15935. 2692, 2692, 1, 1, 1, 2692, 2692, 2692,
  15936. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15937. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15938. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15939. 2692, 2692, 2692, 2692, 2692, 2692, 1, 1,
  15940. 1, 1, 1, 1, 1, 1, 1, 1,
  15941. 1, 1, 1, 1, 1, 1, 1, 1,
  15942. 1, 1, 1, 1, 1, 1, 1, 1,
  15943. 1, 1, 1, 1, 1, 1, 1, 1,
  15944. 1, 1, 1, 1, 1, 1, 1, 1,
  15945. 1, 1, 1, 1, 1, 1, 1, 1,
  15946. 1, 1, 1, 1, 1, 1, 1, 1,
  15947. 1, 1, 1, 1, 1, 1, 1, 1,
  15948. 1, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15949. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15950. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15951. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2695,
  15952. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  15953. 2696, 2696, 2696, 2696, 2697, 2696, 2696, 2698,
  15954. 2699, 2699, 2699, 2700, 1, 2701, 1, 1,
  15955. 1, 2702, 1, 1, 1, 1, 1, 1,
  15956. 1, 1, 1, 1, 1, 1, 1, 1,
  15957. 1, 1, 1, 1, 2701, 2692, 2033, 2692,
  15958. 2692, 2692, 2692, 2692, 2703, 1, 2692, 2692,
  15959. 1, 2692, 1, 2692, 2692, 2692, 2692, 2692,
  15960. 2692, 2692, 2692, 2692, 2692, 2692, 1, 1,
  15961. 2004, 2692, 1, 2692, 1, 2692, 2692, 2692,
  15962. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15963. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15964. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 1,
  15965. 1, 1, 2692, 2692, 2692, 2692, 2692, 2692,
  15966. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15967. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15968. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15969. 2692, 2692, 2692, 1, 1, 1, 1, 1,
  15970. 1, 1, 1, 1, 1, 1, 1, 1,
  15971. 1, 1, 1, 1, 1, 1, 1, 1,
  15972. 1, 1, 1, 1, 1, 1, 1, 1,
  15973. 1, 1, 1, 1, 1, 1, 1, 1,
  15974. 1, 1, 1, 1, 1, 1, 1, 1,
  15975. 1, 1, 1, 1, 1, 1, 1, 1,
  15976. 1, 1, 1, 1, 1, 1, 1, 1,
  15977. 1, 1, 1, 1, 1, 1, 2694, 2694,
  15978. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15979. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15980. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  15981. 2694, 2694, 2694, 2694, 2695, 2696, 2696, 2696,
  15982. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  15983. 2696, 2697, 2696, 2696, 2698, 2699, 2699, 2699,
  15984. 2700, 1, 2704, 1, 2701, 1, 1, 1,
  15985. 1, 1, 1, 1, 1, 1, 1, 1,
  15986. 1, 1, 1, 1, 1, 1, 1, 1,
  15987. 1, 1, 1, 2701, 1, 2675, 1, 1,
  15988. 1, 2676, 1, 1, 1, 1, 1, 1,
  15989. 1, 1, 1, 1, 1, 1, 1, 1,
  15990. 1, 1, 1, 1, 2675, 2692, 2033, 2692,
  15991. 2692, 2692, 2692, 2692, 2677, 1, 2692, 2692,
  15992. 2678, 2692, 2681, 2692, 2692, 2692, 2692, 2692,
  15993. 2692, 2692, 2692, 2692, 2692, 2692, 1, 2680,
  15994. 2021, 2692, 1, 2692, 2051, 2692, 2692, 2692,
  15995. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15996. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  15997. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 1,
  15998. 1, 1, 2692, 2692, 2692, 2692, 2692, 2692,
  15999. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16000. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16001. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16002. 2692, 2692, 2692, 1, 1, 1, 1, 1,
  16003. 1, 1, 1, 1, 1, 1, 1, 1,
  16004. 1, 1, 1, 1, 1, 1, 1, 1,
  16005. 1, 1, 1, 1, 1, 1, 1, 1,
  16006. 1, 1, 1, 1, 1, 1, 1, 1,
  16007. 1, 1, 1, 1, 1, 1, 1, 1,
  16008. 1, 1, 1, 1, 1, 1, 1, 1,
  16009. 1, 1, 1, 1, 1, 1, 1, 1,
  16010. 1, 1, 1, 1, 1, 1, 2694, 2694,
  16011. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16012. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16013. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16014. 2694, 2694, 2694, 2694, 2695, 2696, 2696, 2696,
  16015. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16016. 2696, 2697, 2696, 2696, 2698, 2699, 2699, 2699,
  16017. 2700, 1, 2692, 2692, 2692, 2692, 2692, 2692,
  16018. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16019. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16020. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16021. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16022. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16023. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16024. 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
  16025. 2692, 2692, 1, 2694, 2694, 2694, 2694, 2694,
  16026. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16027. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16028. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16029. 2694, 2694, 2694, 1, 2694, 2694, 2694, 2694,
  16030. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16031. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16032. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16033. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16034. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16035. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16036. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16037. 2694, 2694, 2694, 2694, 1, 2694, 2694, 2694,
  16038. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16039. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16040. 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
  16041. 2694, 2694, 2694, 2694, 2694, 1, 2696, 2696,
  16042. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16043. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16044. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16045. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16046. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16047. 2696, 2696, 2696, 2696, 2696, 2696, 1, 2696,
  16048. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16049. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16050. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16051. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16052. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16053. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16054. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16055. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 1,
  16056. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16057. 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696,
  16058. 1, 2705, 1, 1, 1, 2706, 1, 1,
  16059. 1, 1, 1, 1, 1, 1, 1, 1,
  16060. 1, 1, 1, 1, 1, 1, 1, 1,
  16061. 2705, 2707, 2079, 2707, 2707, 2707, 2707, 2707,
  16062. 2708, 1, 2707, 2707, 1, 2707, 1, 2707,
  16063. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16064. 2707, 2707, 1, 1, 2100, 2707, 1, 2707,
  16065. 1, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16066. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16067. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16068. 2707, 2707, 2707, 1, 1, 1, 2707, 2707,
  16069. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16070. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16071. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
  16072. 2707, 2707, 2707, 2707, 2707, 2707, 2707, 1,
  16073. 1, 1, 1, 1, 1, 1, 1, 1,
  16074. 1, 1, 1, 1, 1, 1, 1, 1,
  16075. 1, 1, 1, 1, 1, 1, 1, 1,
  16076. 1, 1, 1, 1, 1, 1, 1, 1,
  16077. 1, 1, 1, 1, 1, 1, 1, 1,
  16078. 1, 1, 1, 1, 1, 1, 1, 1,
  16079. 1, 1, 1, 1, 1, 1, 1, 1,
  16080. 1, 1, 1, 1, 1, 1, 1, 1,
  16081. 1, 1, 2709, 2709, 2709, 2709, 2709, 2709,
  16082. 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
  16083. 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
  16084. 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
  16085. 2710, 2711, 2711, 2711, 2711, 2711, 2711, 2711,
  16086. 2711, 2711, 2711, 2711, 2711, 2712, 2711, 2711,
  16087. 2713, 2714, 2714, 2714, 2715, 1, 2716, 2716,
  16088. 2716, 2716, 2716, 2716, 2716, 2716, 2717, 1,
  16089. 2716, 2716, 2718, 2716, 2716, 2716, 2716, 2716,
  16090. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16091. 2716, 2716, 2716, 2716, 2716, 2717, 2716, 2055,
  16092. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16093. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16094. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16095. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16096. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16097. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16098. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16099. 2716, 2719, 2716, 2716, 2716, 2716, 2716, 2716,
  16100. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16101. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16102. 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
  16103. 2716, 2716, 2716, 2716, 2716, 1, 1, 1,
  16104. 1, 1, 1, 1, 1, 1, 1, 1,
  16105. 1, 1, 1, 1, 1, 1, 1, 1,
  16106. 1, 1, 1, 1, 1, 1, 1, 1,
  16107. 1, 1, 1, 1, 1, 1, 1, 1,
  16108. 1, 1, 1, 1, 1, 1, 1, 1,
  16109. 1, 1, 1, 1, 1, 1, 1, 1,
  16110. 1, 1, 1, 1, 1, 1, 1, 1,
  16111. 1, 1, 1, 1, 1, 1, 1, 2720,
  16112. 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
  16113. 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
  16114. 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
  16115. 2720, 2720, 2720, 2720, 2720, 2721, 2722, 2722,
  16116. 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722,
  16117. 2722, 2722, 2723, 2722, 2722, 2724, 2725, 2725,
  16118. 2725, 2726, 1, 2727, 2727, 2727, 2727, 2727,
  16119. 2727, 2727, 2727, 2727, 1, 2727, 2727, 2728,
  16120. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16121. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16122. 2727, 2727, 2727, 2727, 2729, 2727, 2727, 2727,
  16123. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16124. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16125. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16126. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16127. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16128. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16129. 2727, 2727, 2727, 2727, 2727, 2727, 2730, 2727,
  16130. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16131. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16132. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16133. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16134. 2727, 2727, 1, 1, 1, 1, 1, 1,
  16135. 1, 1, 1, 1, 1, 1, 1, 1,
  16136. 1, 1, 1, 1, 1, 1, 1, 1,
  16137. 1, 1, 1, 1, 1, 1, 1, 1,
  16138. 1, 1, 1, 1, 1, 1, 1, 1,
  16139. 1, 1, 1, 1, 1, 1, 1, 1,
  16140. 1, 1, 1, 1, 1, 1, 1, 1,
  16141. 1, 1, 1, 1, 1, 1, 1, 1,
  16142. 1, 1, 1, 1, 2731, 2731, 2731, 2731,
  16143. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16144. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16145. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16146. 2731, 2731, 2732, 2733, 2733, 2733, 2733, 2733,
  16147. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2734,
  16148. 2733, 2733, 2735, 2736, 2736, 2736, 2737, 1,
  16149. 2738, 1, 2727, 1, 1, 1, 1, 1,
  16150. 1, 1, 1, 1, 1, 1, 1, 1,
  16151. 1, 1, 1, 1, 1, 1, 1, 1,
  16152. 1, 2727, 1, 2739, 1, 1, 1, 2740,
  16153. 1, 1, 1, 1, 1, 1, 1, 1,
  16154. 1, 1, 1, 1, 1, 1, 1, 1,
  16155. 1, 1, 2739, 2741, 2663, 2741, 2741, 2741,
  16156. 2741, 2741, 2742, 1, 2741, 2741, 2678, 2741,
  16157. 2743, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16158. 2741, 2741, 2741, 2741, 1, 2680, 2021, 2741,
  16159. 1, 2741, 2051, 2741, 2741, 2741, 2741, 2741,
  16160. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16161. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16162. 2741, 2741, 2741, 2741, 2741, 1, 1, 1,
  16163. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16164. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16165. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16166. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16167. 2741, 1, 1, 1, 1, 1, 1, 1,
  16168. 1, 1, 1, 1, 1, 1, 1, 1,
  16169. 1, 1, 1, 1, 1, 1, 1, 1,
  16170. 1, 1, 1, 1, 1, 1, 1, 1,
  16171. 1, 1, 1, 1, 1, 1, 1, 1,
  16172. 1, 1, 1, 1, 1, 1, 1, 1,
  16173. 1, 1, 1, 1, 1, 1, 1, 1,
  16174. 1, 1, 1, 1, 1, 1, 1, 1,
  16175. 1, 1, 1, 1, 2744, 2744, 2744, 2744,
  16176. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16177. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16178. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16179. 2744, 2744, 2745, 2746, 2746, 2746, 2746, 2746,
  16180. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2747,
  16181. 2746, 2746, 2748, 2749, 2749, 2749, 2750, 1,
  16182. 2739, 1, 1, 1, 2740, 1, 1, 1,
  16183. 1, 1, 1, 1, 1, 1, 1, 1,
  16184. 1, 1, 1, 1, 1, 1, 1, 2739,
  16185. 2032, 2033, 2032, 2032, 2032, 2032, 2032, 2742,
  16186. 1, 2032, 2032, 2678, 2032, 2051, 2032, 2032,
  16187. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16188. 2032, 1, 2680, 2021, 2032, 1, 2032, 2051,
  16189. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16190. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16191. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16192. 2032, 2032, 1, 1, 1, 2032, 2032, 2032,
  16193. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16194. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16195. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  16196. 2032, 2032, 2032, 2032, 2032, 2032, 1, 1,
  16197. 1, 1, 1, 1, 1, 1, 1, 1,
  16198. 1, 1, 1, 1, 1, 1, 1, 1,
  16199. 1, 1, 1, 1, 1, 1, 1, 1,
  16200. 1, 1, 1, 1, 1, 1, 1, 1,
  16201. 1, 1, 1, 1, 1, 1, 1, 1,
  16202. 1, 1, 1, 1, 1, 1, 1, 1,
  16203. 1, 1, 1, 1, 1, 1, 1, 1,
  16204. 1, 1, 1, 1, 1, 1, 1, 1,
  16205. 1, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  16206. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  16207. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  16208. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2040,
  16209. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  16210. 2041, 2041, 2041, 2041, 2042, 2041, 2041, 2043,
  16211. 2044, 2044, 2044, 2045, 1, 2751, 1, 2752,
  16212. 1, 1, 1, 1, 1, 1, 1, 1,
  16213. 1, 1, 1, 1, 1, 1, 1, 1,
  16214. 1, 1, 1, 1, 1, 1, 2752, 1,
  16215. 2753, 1, 1, 1, 2754, 1, 1, 1,
  16216. 1, 1, 1, 1, 1, 1, 1, 1,
  16217. 1, 1, 1, 1, 1, 1, 1, 2753,
  16218. 2078, 2079, 2078, 2078, 2078, 2078, 2078, 2755,
  16219. 1, 2078, 2078, 2687, 2078, 2081, 2078, 2078,
  16220. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16221. 2078, 1, 2689, 2082, 2078, 1, 2078, 2081,
  16222. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16223. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16224. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16225. 2078, 2078, 1, 1, 1, 2078, 2078, 2078,
  16226. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16227. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16228. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  16229. 2078, 2078, 2078, 2078, 2078, 2078, 1, 1,
  16230. 1, 1, 1, 1, 1, 1, 1, 1,
  16231. 1, 1, 1, 1, 1, 1, 1, 1,
  16232. 1, 1, 1, 1, 1, 1, 1, 1,
  16233. 1, 1, 1, 1, 1, 1, 1, 1,
  16234. 1, 1, 1, 1, 1, 1, 1, 1,
  16235. 1, 1, 1, 1, 1, 1, 1, 1,
  16236. 1, 1, 1, 1, 1, 1, 1, 1,
  16237. 1, 1, 1, 1, 1, 1, 1, 1,
  16238. 1, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  16239. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  16240. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  16241. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2084,
  16242. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  16243. 2085, 2085, 2085, 2085, 2086, 2085, 2085, 2087,
  16244. 2088, 2088, 2088, 2089, 1, 2090, 1, 1,
  16245. 1, 2091, 1, 1, 1, 1, 1, 1,
  16246. 1, 1, 1, 1, 1, 1, 1, 1,
  16247. 1, 1, 1, 1, 2090, 2741, 2663, 2741,
  16248. 2741, 2741, 2741, 2741, 2092, 1, 2741, 2741,
  16249. 1, 2741, 2743, 2741, 2741, 2741, 2741, 2741,
  16250. 2741, 2741, 2741, 2741, 2741, 2741, 1, 1,
  16251. 2021, 2741, 1, 2741, 2051, 2741, 2741, 2741,
  16252. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16253. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16254. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 1,
  16255. 1, 1, 2741, 2741, 2741, 2741, 2741, 2741,
  16256. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16257. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16258. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16259. 2741, 2741, 2741, 1, 1, 1, 1, 1,
  16260. 1, 1, 1, 1, 1, 1, 1, 1,
  16261. 1, 1, 1, 1, 1, 1, 1, 1,
  16262. 1, 1, 1, 1, 1, 1, 1, 1,
  16263. 1, 1, 1, 1, 1, 1, 1, 1,
  16264. 1, 1, 1, 1, 1, 1, 1, 1,
  16265. 1, 1, 1, 1, 1, 1, 1, 1,
  16266. 1, 1, 1, 1, 1, 1, 1, 1,
  16267. 1, 1, 1, 1, 1, 1, 2744, 2744,
  16268. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16269. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16270. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16271. 2744, 2744, 2744, 2744, 2745, 2746, 2746, 2746,
  16272. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16273. 2746, 2747, 2746, 2746, 2748, 2749, 2749, 2749,
  16274. 2750, 1, 2741, 2741, 2741, 2741, 2741, 2741,
  16275. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16276. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16277. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16278. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16279. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16280. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16281. 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741,
  16282. 2741, 2741, 1, 2744, 2744, 2744, 2744, 2744,
  16283. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16284. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16285. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16286. 2744, 2744, 2744, 1, 2744, 2744, 2744, 2744,
  16287. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16288. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16289. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16290. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16291. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16292. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16293. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16294. 2744, 2744, 2744, 2744, 1, 2744, 2744, 2744,
  16295. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16296. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16297. 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744,
  16298. 2744, 2744, 2744, 2744, 2744, 1, 2746, 2746,
  16299. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16300. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16301. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16302. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16303. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16304. 2746, 2746, 2746, 2746, 2746, 2746, 1, 2746,
  16305. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16306. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16307. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16308. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16309. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16310. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16311. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16312. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 1,
  16313. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16314. 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
  16315. 1, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16316. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16317. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16318. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16319. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16320. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16321. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16322. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16323. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16324. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16325. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16326. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16327. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16328. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16329. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16330. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16331. 2727, 1, 1, 1, 1, 1, 1, 1,
  16332. 1, 1, 1, 1, 1, 1, 1, 1,
  16333. 1, 1, 1, 1, 1, 1, 1, 1,
  16334. 1, 1, 1, 1, 1, 1, 1, 1,
  16335. 1, 1, 1, 1, 1, 1, 1, 1,
  16336. 1, 1, 1, 1, 1, 1, 1, 1,
  16337. 1, 1, 1, 1, 1, 1, 1, 1,
  16338. 1, 1, 1, 1, 1, 1, 1, 1,
  16339. 1, 1, 1, 2731, 2731, 2731, 2731, 2731,
  16340. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16341. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16342. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16343. 2731, 2732, 2733, 2733, 2733, 2733, 2733, 2733,
  16344. 2733, 2733, 2733, 2733, 2733, 2733, 2734, 2733,
  16345. 2733, 2735, 2736, 2736, 2736, 2737, 1, 2727,
  16346. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16347. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16348. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16349. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16350. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16351. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16352. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16353. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 1,
  16354. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16355. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16356. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16357. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16358. 1, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16359. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16360. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16361. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16362. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16363. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16364. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16365. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16366. 2731, 1, 2731, 2731, 2731, 2731, 2731, 2731,
  16367. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16368. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16369. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16370. 2731, 2731, 1, 2733, 2733, 2733, 2733, 2733,
  16371. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16372. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16373. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16374. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16375. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16376. 2733, 2733, 2733, 1, 2733, 2733, 2733, 2733,
  16377. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16378. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16379. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16380. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16381. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16382. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16383. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16384. 2733, 2733, 2733, 2733, 1, 2733, 2733, 2733,
  16385. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16386. 2733, 2733, 2733, 2733, 2733, 1, 2727, 2727,
  16387. 2727, 2727, 2727, 2727, 2727, 2727, 2756, 1,
  16388. 2727, 2727, 2757, 2727, 2727, 2727, 2727, 2727,
  16389. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16390. 2727, 2727, 2727, 2727, 2727, 2756, 2727, 2066,
  16391. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16392. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16393. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16394. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16395. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16396. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16397. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16398. 2727, 2730, 2727, 2727, 2727, 2727, 2727, 2727,
  16399. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16400. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16401. 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
  16402. 2727, 2727, 2727, 2727, 2727, 1, 1, 1,
  16403. 1, 1, 1, 1, 1, 1, 1, 1,
  16404. 1, 1, 1, 1, 1, 1, 1, 1,
  16405. 1, 1, 1, 1, 1, 1, 1, 1,
  16406. 1, 1, 1, 1, 1, 1, 1, 1,
  16407. 1, 1, 1, 1, 1, 1, 1, 1,
  16408. 1, 1, 1, 1, 1, 1, 1, 1,
  16409. 1, 1, 1, 1, 1, 1, 1, 1,
  16410. 1, 1, 1, 1, 1, 1, 1, 2731,
  16411. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16412. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16413. 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
  16414. 2731, 2731, 2731, 2731, 2731, 2732, 2733, 2733,
  16415. 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
  16416. 2733, 2733, 2734, 2733, 2733, 2735, 2736, 2736,
  16417. 2736, 2737, 1, 2758, 1, 2756, 1, 1,
  16418. 1, 1, 1, 1, 1, 1, 1, 1,
  16419. 1, 1, 1, 1, 1, 1, 1, 1,
  16420. 1, 1, 1, 1, 2756, 1, 2690, 1,
  16421. 1, 1, 2691, 1, 1, 1, 1, 1,
  16422. 1, 1, 1, 1, 1, 1, 1, 1,
  16423. 1, 1, 1, 1, 1, 2690, 2662, 2663,
  16424. 2662, 2662, 2662, 2662, 2662, 2693, 1, 2662,
  16425. 2662, 1, 2662, 2743, 2662, 2662, 2662, 2662,
  16426. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 1,
  16427. 1, 2021, 2662, 1, 2662, 2051, 2662, 2662,
  16428. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16429. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16430. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16431. 1, 1, 1, 2662, 2662, 2662, 2662, 2662,
  16432. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16433. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16434. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16435. 2662, 2662, 2662, 2662, 1, 1, 1, 1,
  16436. 1, 1, 1, 1, 1, 1, 1, 1,
  16437. 1, 1, 1, 1, 1, 1, 1, 1,
  16438. 1, 1, 1, 1, 1, 1, 1, 1,
  16439. 1, 1, 1, 1, 1, 1, 1, 1,
  16440. 1, 1, 1, 1, 1, 1, 1, 1,
  16441. 1, 1, 1, 1, 1, 1, 1, 1,
  16442. 1, 1, 1, 1, 1, 1, 1, 1,
  16443. 1, 1, 1, 1, 1, 1, 1, 2667,
  16444. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16445. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16446. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16447. 2667, 2667, 2667, 2667, 2667, 2668, 2669, 2669,
  16448. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16449. 2669, 2669, 2670, 2669, 2669, 2671, 2672, 2672,
  16450. 2672, 2673, 1, 2662, 2662, 2662, 2662, 2662,
  16451. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16452. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16453. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16454. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16455. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16456. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16457. 2662, 2662, 2662, 2662, 2662, 2662, 2662, 2662,
  16458. 2662, 2662, 2662, 1, 2667, 2667, 2667, 2667,
  16459. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16460. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16461. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16462. 2667, 2667, 2667, 2667, 1, 2667, 2667, 2667,
  16463. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16464. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16465. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16466. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16467. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16468. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16469. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16470. 2667, 2667, 2667, 2667, 2667, 1, 2667, 2667,
  16471. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16472. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16473. 2667, 2667, 2667, 2667, 2667, 2667, 2667, 2667,
  16474. 2667, 2667, 2667, 2667, 2667, 2667, 1, 2669,
  16475. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16476. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16477. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16478. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16479. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16480. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 1,
  16481. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16482. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16483. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16484. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16485. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16486. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16487. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16488. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16489. 1, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16490. 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
  16491. 2669, 1, 2759, 1, 1, 1, 2760, 1,
  16492. 1, 1, 1, 1, 1, 1, 1, 1,
  16493. 1, 1, 1, 1, 1, 1, 1, 1,
  16494. 1, 2759, 2761, 2762, 2761, 2761, 2761, 2761,
  16495. 2761, 2763, 1, 2761, 2761, 1, 2761, 2764,
  16496. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16497. 2761, 2761, 2761, 1, 1, 2100, 2761, 1,
  16498. 2761, 1, 2761, 2761, 2761, 2761, 2761, 2761,
  16499. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16500. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16501. 2761, 2761, 2761, 2761, 2765, 1, 1, 2761,
  16502. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16503. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16504. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16505. 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761,
  16506. 1, 1, 1, 1, 1, 1, 1, 1,
  16507. 1, 1, 1, 1, 1, 1, 1, 1,
  16508. 1, 1, 1, 1, 1, 1, 1, 1,
  16509. 1, 1, 1, 1, 1, 1, 1, 1,
  16510. 1, 1, 1, 1, 1, 1, 1, 1,
  16511. 1, 1, 1, 1, 1, 1, 1, 1,
  16512. 1, 1, 1, 1, 1, 1, 1, 1,
  16513. 1, 1, 1, 1, 1, 1, 1, 1,
  16514. 1, 1, 1, 2766, 2766, 2766, 2766, 2766,
  16515. 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766,
  16516. 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766,
  16517. 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766,
  16518. 2766, 2767, 2768, 2768, 2768, 2768, 2768, 2768,
  16519. 2768, 2768, 2768, 2768, 2768, 2768, 2769, 2768,
  16520. 2768, 2770, 2771, 2771, 2771, 2772, 1, 2773,
  16521. 2774, 2773, 2773, 2773, 2773, 2773, 1, 1,
  16522. 2773, 2773, 1, 2773, 2665, 2773, 2773, 2773,
  16523. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16524. 1, 1, 1, 2773, 1, 2773, 1, 2773,
  16525. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16526. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16527. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16528. 2773, 1, 1, 1, 2773, 2773, 2773, 2773,
  16529. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16530. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16531. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16532. 2773, 2773, 2773, 2773, 2773, 1, 1, 1,
  16533. 1, 1, 1, 1, 1, 1, 1, 1,
  16534. 1, 1, 1, 1, 1, 1, 1, 1,
  16535. 1, 1, 1, 1, 1, 1, 1, 1,
  16536. 1, 1, 1, 1, 1, 1, 1, 1,
  16537. 1, 1, 1, 1, 1, 1, 1, 1,
  16538. 1, 1, 1, 1, 1, 1, 1, 1,
  16539. 1, 1, 1, 1, 1, 1, 1, 1,
  16540. 1, 1, 1, 1, 1, 1, 1, 1,
  16541. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16542. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16543. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16544. 2775, 2775, 2775, 2775, 2775, 2775, 2776, 2777,
  16545. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16546. 2777, 2777, 2777, 2778, 2777, 2777, 2779, 2780,
  16547. 2780, 2780, 2781, 1, 2782, 1, 1, 1,
  16548. 2783, 1, 1, 1, 1, 1, 1, 1,
  16549. 1, 1, 1, 1, 1, 1, 1, 1,
  16550. 1, 1, 1, 2782, 2773, 2774, 2773, 2773,
  16551. 2773, 2773, 2773, 2784, 1, 2773, 2773, 2678,
  16552. 2773, 2665, 2773, 2773, 2773, 2773, 2773, 2773,
  16553. 2773, 2773, 2773, 2773, 2773, 1, 2680, 1,
  16554. 2773, 1, 2773, 1, 2773, 2773, 2773, 2773,
  16555. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16556. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16557. 2773, 2773, 2773, 2773, 2773, 2773, 1, 1,
  16558. 1, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16559. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16560. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16561. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16562. 2773, 2773, 1, 1, 1, 1, 1, 1,
  16563. 1, 1, 1, 1, 1, 1, 1, 1,
  16564. 1, 1, 1, 1, 1, 1, 1, 1,
  16565. 1, 1, 1, 1, 1, 1, 1, 1,
  16566. 1, 1, 1, 1, 1, 1, 1, 1,
  16567. 1, 1, 1, 1, 1, 1, 1, 1,
  16568. 1, 1, 1, 1, 1, 1, 1, 1,
  16569. 1, 1, 1, 1, 1, 1, 1, 1,
  16570. 1, 1, 1, 1, 1, 2775, 2775, 2775,
  16571. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16572. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16573. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16574. 2775, 2775, 2775, 2776, 2777, 2777, 2777, 2777,
  16575. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16576. 2778, 2777, 2777, 2779, 2780, 2780, 2780, 2781,
  16577. 1, 2782, 1, 1, 1, 2783, 1, 1,
  16578. 1, 1, 1, 1, 1, 1, 1, 1,
  16579. 1, 1, 1, 1, 1, 1, 1, 1,
  16580. 2782, 1, 1, 1, 1, 1, 1, 1,
  16581. 2784, 1, 1, 1, 2678, 1, 1, 1,
  16582. 1, 1, 1, 1, 1, 1, 1, 1,
  16583. 1, 1, 1, 2680, 1, 2785, 1, 2782,
  16584. 1, 1, 1, 1, 1, 1, 1, 1,
  16585. 1, 1, 1, 1, 1, 1, 1, 1,
  16586. 1, 1, 1, 1, 1, 1, 2782, 1,
  16587. 2786, 1, 1, 1, 2787, 1, 1, 1,
  16588. 1, 1, 1, 1, 1, 1, 1, 1,
  16589. 1, 1, 1, 1, 1, 1, 1, 2786,
  16590. 1, 1, 1, 1, 1, 1, 1, 2788,
  16591. 1, 1, 1, 2687, 1, 1, 1, 1,
  16592. 1, 1, 1, 1, 1, 1, 1, 1,
  16593. 1, 1, 2689, 1, 2789, 2789, 2789, 2789,
  16594. 2789, 2789, 2789, 2789, 2774, 1, 2789, 2789,
  16595. 2790, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16596. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16597. 2789, 2789, 2789, 2774, 2789, 1, 2789, 2789,
  16598. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16599. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16600. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16601. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16602. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16603. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16604. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2791,
  16605. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16606. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16607. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16608. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16609. 2789, 2789, 2789, 1, 1, 1, 1, 1,
  16610. 1, 1, 1, 1, 1, 1, 1, 1,
  16611. 1, 1, 1, 1, 1, 1, 1, 1,
  16612. 1, 1, 1, 1, 1, 1, 1, 1,
  16613. 1, 1, 1, 1, 1, 1, 1, 1,
  16614. 1, 1, 1, 1, 1, 1, 1, 1,
  16615. 1, 1, 1, 1, 1, 1, 1, 1,
  16616. 1, 1, 1, 1, 1, 1, 1, 1,
  16617. 1, 1, 1, 1, 1, 2792, 2792, 2792,
  16618. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16619. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16620. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16621. 2792, 2792, 2792, 2793, 2794, 2794, 2794, 2794,
  16622. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16623. 2795, 2794, 2794, 2796, 2797, 2797, 2797, 2798,
  16624. 1, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16625. 2789, 2789, 1, 2789, 2789, 2799, 2789, 2789,
  16626. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16627. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16628. 2789, 2789, 2773, 2789, 2789, 2789, 2789, 2789,
  16629. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16630. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16631. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16632. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16633. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16634. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16635. 2789, 2789, 2789, 2789, 2791, 2789, 2789, 2789,
  16636. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16637. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16638. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16639. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16640. 1, 1, 1, 1, 1, 1, 1, 1,
  16641. 1, 1, 1, 1, 1, 1, 1, 1,
  16642. 1, 1, 1, 1, 1, 1, 1, 1,
  16643. 1, 1, 1, 1, 1, 1, 1, 1,
  16644. 1, 1, 1, 1, 1, 1, 1, 1,
  16645. 1, 1, 1, 1, 1, 1, 1, 1,
  16646. 1, 1, 1, 1, 1, 1, 1, 1,
  16647. 1, 1, 1, 1, 1, 1, 1, 1,
  16648. 1, 1, 2792, 2792, 2792, 2792, 2792, 2792,
  16649. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16650. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16651. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16652. 2793, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16653. 2794, 2794, 2794, 2794, 2794, 2795, 2794, 2794,
  16654. 2796, 2797, 2797, 2797, 2798, 1, 2800, 1,
  16655. 2789, 1, 1, 1, 1, 1, 1, 1,
  16656. 1, 1, 1, 1, 1, 1, 1, 1,
  16657. 1, 1, 1, 1, 1, 1, 1, 2789,
  16658. 1, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16659. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16660. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16661. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16662. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16663. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16664. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16665. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16666. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16667. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16668. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16669. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16670. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16671. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16672. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16673. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16674. 2789, 1, 1, 1, 1, 1, 1, 1,
  16675. 1, 1, 1, 1, 1, 1, 1, 1,
  16676. 1, 1, 1, 1, 1, 1, 1, 1,
  16677. 1, 1, 1, 1, 1, 1, 1, 1,
  16678. 1, 1, 1, 1, 1, 1, 1, 1,
  16679. 1, 1, 1, 1, 1, 1, 1, 1,
  16680. 1, 1, 1, 1, 1, 1, 1, 1,
  16681. 1, 1, 1, 1, 1, 1, 1, 1,
  16682. 1, 1, 1, 2792, 2792, 2792, 2792, 2792,
  16683. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16684. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16685. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16686. 2792, 2793, 2794, 2794, 2794, 2794, 2794, 2794,
  16687. 2794, 2794, 2794, 2794, 2794, 2794, 2795, 2794,
  16688. 2794, 2796, 2797, 2797, 2797, 2798, 1, 2789,
  16689. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16690. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16691. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16692. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16693. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16694. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16695. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
  16696. 2789, 2789, 2789, 2789, 2789, 2789, 2789, 1,
  16697. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16698. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16699. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16700. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16701. 1, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16702. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16703. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16704. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16705. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16706. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16707. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16708. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16709. 2792, 1, 2792, 2792, 2792, 2792, 2792, 2792,
  16710. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16711. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16712. 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792,
  16713. 2792, 2792, 1, 2794, 2794, 2794, 2794, 2794,
  16714. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16715. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16716. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16717. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16718. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16719. 2794, 2794, 2794, 1, 2794, 2794, 2794, 2794,
  16720. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16721. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16722. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16723. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16724. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16725. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16726. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16727. 2794, 2794, 2794, 2794, 1, 2794, 2794, 2794,
  16728. 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794,
  16729. 2794, 2794, 2794, 2794, 2794, 1, 2801, 1,
  16730. 2774, 1, 1, 1, 1, 1, 1, 1,
  16731. 1, 1, 1, 1, 1, 1, 1, 1,
  16732. 1, 1, 1, 1, 1, 1, 1, 2774,
  16733. 1, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16734. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16735. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16736. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16737. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16738. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16739. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16740. 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
  16741. 2773, 1, 2775, 2775, 2775, 2775, 2775, 2775,
  16742. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16743. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16744. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16745. 2775, 2775, 1, 2775, 2775, 2775, 2775, 2775,
  16746. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16747. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16748. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16749. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16750. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16751. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16752. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16753. 2775, 2775, 2775, 1, 2775, 2775, 2775, 2775,
  16754. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16755. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16756. 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
  16757. 2775, 2775, 2775, 2775, 1, 2777, 2777, 2777,
  16758. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16759. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16760. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16761. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16762. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16763. 2777, 2777, 2777, 2777, 2777, 1, 2777, 2777,
  16764. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16765. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16766. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16767. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16768. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16769. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16770. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16771. 2777, 2777, 2777, 2777, 2777, 2777, 1, 2777,
  16772. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777,
  16773. 2777, 2777, 2777, 2777, 2777, 2777, 2777, 1,
  16774. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16775. 2666, 1, 2666, 2666, 2802, 2666, 2666, 2666,
  16776. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16777. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16778. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16779. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16780. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16781. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16782. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16783. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16784. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16785. 2666, 2666, 1, 2803, 2782, 2666, 2666, 2666,
  16786. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16787. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16788. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16789. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 1,
  16790. 1, 1, 1, 1, 1, 1, 1, 1,
  16791. 1, 1, 1, 1, 1, 1, 1, 1,
  16792. 1, 1, 1, 1, 1, 1, 1, 1,
  16793. 1, 1, 1, 1, 1, 1, 1, 1,
  16794. 1, 1, 1, 1, 1, 1, 1, 1,
  16795. 1, 1, 1, 1, 1, 1, 1, 1,
  16796. 1, 1, 1, 1, 1, 1, 1, 1,
  16797. 1, 1, 1, 1, 1, 1, 1, 1,
  16798. 1, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16799. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16800. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16801. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2805,
  16802. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16803. 2806, 2806, 2806, 2806, 2807, 2806, 2806, 2808,
  16804. 2809, 2809, 2809, 2810, 1, 2811, 1, 2666,
  16805. 1, 1, 1, 1, 1, 1, 1, 1,
  16806. 1, 1, 1, 1, 1, 1, 1, 1,
  16807. 1, 1, 1, 1, 1, 1, 2666, 1,
  16808. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16809. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16810. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16811. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16812. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16813. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16814. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16815. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16816. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16817. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16818. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16819. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16820. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16821. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16822. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16823. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16824. 1, 1, 1, 1, 1, 1, 1, 1,
  16825. 1, 1, 1, 1, 1, 1, 1, 1,
  16826. 1, 1, 1, 1, 1, 1, 1, 1,
  16827. 1, 1, 1, 1, 1, 1, 1, 1,
  16828. 1, 1, 1, 1, 1, 1, 1, 1,
  16829. 1, 1, 1, 1, 1, 1, 1, 1,
  16830. 1, 1, 1, 1, 1, 1, 1, 1,
  16831. 1, 1, 1, 1, 1, 1, 1, 1,
  16832. 1, 1, 2804, 2804, 2804, 2804, 2804, 2804,
  16833. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16834. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16835. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16836. 2805, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16837. 2806, 2806, 2806, 2806, 2806, 2807, 2806, 2806,
  16838. 2808, 2809, 2809, 2809, 2810, 1, 2666, 2666,
  16839. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16840. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16841. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16842. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16843. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16844. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16845. 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
  16846. 2666, 2666, 2666, 2666, 2666, 2666, 1, 2804,
  16847. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16848. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16849. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16850. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 1,
  16851. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16852. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16853. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16854. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16855. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16856. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16857. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16858. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16859. 1, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16860. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16861. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16862. 2804, 2804, 2804, 2804, 2804, 2804, 2804, 2804,
  16863. 2804, 1, 2806, 2806, 2806, 2806, 2806, 2806,
  16864. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16865. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16866. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16867. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16868. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16869. 2806, 2806, 1, 2806, 2806, 2806, 2806, 2806,
  16870. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16871. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16872. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16873. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16874. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16875. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16876. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16877. 2806, 2806, 2806, 1, 2806, 2806, 2806, 2806,
  16878. 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
  16879. 2806, 2806, 2806, 2806, 1, 2622, 2622, 2622,
  16880. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16881. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16882. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16883. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16884. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16885. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16886. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  16887. 2622, 2622, 2622, 2622, 2622, 1, 2625, 2625,
  16888. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16889. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16890. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16891. 2625, 2625, 2625, 2625, 2625, 2625, 1, 2625,
  16892. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16893. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16894. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16895. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16896. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16897. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16898. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16899. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 1,
  16900. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16901. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16902. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16903. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  16904. 1, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16905. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16906. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16907. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16908. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16909. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16910. 2627, 1, 2627, 2627, 2627, 2627, 2627, 2627,
  16911. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16912. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16913. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16914. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16915. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16916. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16917. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16918. 2627, 2627, 1, 2627, 2627, 2627, 2627, 2627,
  16919. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  16920. 2627, 2627, 2627, 1, 2812, 2812, 2812, 2812,
  16921. 2812, 2812, 2812, 2812, 2812, 1, 2812, 2812,
  16922. 2813, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16923. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16924. 2812, 2812, 2812, 2812, 2812, 2814, 2812, 2812,
  16925. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16926. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16927. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16928. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16929. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16930. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16931. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2815,
  16932. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16933. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16934. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16935. 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
  16936. 2812, 2812, 2812, 1, 1, 1, 1, 1,
  16937. 1, 1, 1, 1, 1, 1, 1, 1,
  16938. 1, 1, 1, 1, 1, 1, 1, 1,
  16939. 1, 1, 1, 1, 1, 1, 1, 1,
  16940. 1, 1, 1, 1, 1, 1, 1, 1,
  16941. 1, 1, 1, 1, 1, 1, 1, 1,
  16942. 1, 1, 1, 1, 1, 1, 1, 1,
  16943. 1, 1, 1, 1, 1, 1, 1, 1,
  16944. 1, 1, 1, 1, 1, 2816, 2816, 2816,
  16945. 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
  16946. 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
  16947. 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
  16948. 2816, 2816, 2816, 2817, 2818, 2818, 2818, 2818,
  16949. 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818,
  16950. 2819, 2818, 2818, 2820, 2821, 2821, 2821, 2822,
  16951. 1, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16952. 2823, 2823, 1, 2823, 2823, 2824, 2823, 2823,
  16953. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16954. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16955. 2823, 2823, 2825, 2823, 2823, 2823, 2823, 2823,
  16956. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16957. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16958. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16959. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16960. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16961. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16962. 2823, 2823, 2823, 2823, 2826, 2823, 2823, 2823,
  16963. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16964. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16965. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16966. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16967. 1, 1, 1, 1, 1, 1, 1, 1,
  16968. 1, 1, 1, 1, 1, 1, 1, 1,
  16969. 1, 1, 1, 1, 1, 1, 1, 1,
  16970. 1, 1, 1, 1, 1, 1, 1, 1,
  16971. 1, 1, 1, 1, 1, 1, 1, 1,
  16972. 1, 1, 1, 1, 1, 1, 1, 1,
  16973. 1, 1, 1, 1, 1, 1, 1, 1,
  16974. 1, 1, 1, 1, 1, 1, 1, 1,
  16975. 1, 1, 2827, 2827, 2827, 2827, 2827, 2827,
  16976. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  16977. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  16978. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  16979. 2828, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  16980. 2829, 2829, 2829, 2829, 2829, 2830, 2829, 2829,
  16981. 2831, 2832, 2832, 2832, 2833, 1, 2834, 1,
  16982. 2823, 1, 1, 1, 1, 1, 1, 1,
  16983. 1, 1, 1, 1, 1, 1, 1, 1,
  16984. 1, 1, 1, 1, 1, 1, 1, 2823,
  16985. 1, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16986. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16987. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16988. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16989. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16990. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16991. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16992. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16993. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16994. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16995. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16996. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16997. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16998. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  16999. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17000. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17001. 2823, 1, 1, 1, 1, 1, 1, 1,
  17002. 1, 1, 1, 1, 1, 1, 1, 1,
  17003. 1, 1, 1, 1, 1, 1, 1, 1,
  17004. 1, 1, 1, 1, 1, 1, 1, 1,
  17005. 1, 1, 1, 1, 1, 1, 1, 1,
  17006. 1, 1, 1, 1, 1, 1, 1, 1,
  17007. 1, 1, 1, 1, 1, 1, 1, 1,
  17008. 1, 1, 1, 1, 1, 1, 1, 1,
  17009. 1, 1, 1, 2827, 2827, 2827, 2827, 2827,
  17010. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17011. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17012. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17013. 2827, 2828, 2829, 2829, 2829, 2829, 2829, 2829,
  17014. 2829, 2829, 2829, 2829, 2829, 2829, 2830, 2829,
  17015. 2829, 2831, 2832, 2832, 2832, 2833, 1, 2823,
  17016. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17017. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17018. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17019. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17020. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17021. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17022. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
  17023. 2823, 2823, 2823, 2823, 2823, 2823, 2823, 1,
  17024. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17025. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17026. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17027. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17028. 1, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17029. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17030. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17031. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17032. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17033. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17034. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17035. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17036. 2827, 1, 2827, 2827, 2827, 2827, 2827, 2827,
  17037. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17038. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17039. 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
  17040. 2827, 2827, 1, 2829, 2829, 2829, 2829, 2829,
  17041. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17042. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17043. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17044. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17045. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17046. 2829, 2829, 2829, 1, 2829, 2829, 2829, 2829,
  17047. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17048. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17049. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17050. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17051. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17052. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17053. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17054. 2829, 2829, 2829, 2829, 1, 2829, 2829, 2829,
  17055. 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
  17056. 2829, 2829, 2829, 2829, 2829, 1, 2835, 1,
  17057. 1, 1, 2836, 1, 1, 1, 1, 1,
  17058. 1, 1, 1, 1, 1, 1, 1, 1,
  17059. 1, 1, 1, 1, 1, 2835, 2837, 2838,
  17060. 2837, 2837, 2837, 2837, 2837, 2839, 1, 2837,
  17061. 2837, 1, 2837, 1, 2837, 2837, 2837, 2837,
  17062. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 1,
  17063. 1, 2100, 2837, 1, 2837, 1, 2837, 2837,
  17064. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17065. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17066. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17067. 1, 1, 1, 2837, 2837, 2837, 2837, 2837,
  17068. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17069. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17070. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17071. 2837, 2837, 2837, 2837, 1, 1, 1, 1,
  17072. 1, 1, 1, 1, 1, 1, 1, 1,
  17073. 1, 1, 1, 1, 1, 1, 1, 1,
  17074. 1, 1, 1, 1, 1, 1, 1, 1,
  17075. 1, 1, 1, 1, 1, 1, 1, 1,
  17076. 1, 1, 1, 1, 1, 1, 1, 1,
  17077. 1, 1, 1, 1, 1, 1, 1, 1,
  17078. 1, 1, 1, 1, 1, 1, 1, 1,
  17079. 1, 1, 1, 1, 1, 1, 1, 2840,
  17080. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17081. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17082. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17083. 2840, 2840, 2840, 2840, 2840, 2841, 2842, 2842,
  17084. 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
  17085. 2842, 2842, 2843, 2842, 2842, 2844, 2845, 2845,
  17086. 2845, 2846, 1, 2847, 2847, 2847, 2847, 2847,
  17087. 2847, 2847, 2847, 2848, 1, 2847, 2847, 2849,
  17088. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17089. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17090. 2847, 2847, 2848, 2847, 2055, 2847, 2847, 2847,
  17091. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17092. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17093. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17094. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17095. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17096. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17097. 2847, 2847, 2847, 2847, 2847, 2847, 2850, 2847,
  17098. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17099. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17100. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17101. 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
  17102. 2847, 2847, 1, 1, 1, 1, 1, 1,
  17103. 1, 1, 1, 1, 1, 1, 1, 1,
  17104. 1, 1, 1, 1, 1, 1, 1, 1,
  17105. 1, 1, 1, 1, 1, 1, 1, 1,
  17106. 1, 1, 1, 1, 1, 1, 1, 1,
  17107. 1, 1, 1, 1, 1, 1, 1, 1,
  17108. 1, 1, 1, 1, 1, 1, 1, 1,
  17109. 1, 1, 1, 1, 1, 1, 1, 1,
  17110. 1, 1, 1, 1, 2851, 2851, 2851, 2851,
  17111. 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
  17112. 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
  17113. 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
  17114. 2851, 2851, 2852, 2853, 2853, 2853, 2853, 2853,
  17115. 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2854,
  17116. 2853, 2853, 2855, 2856, 2856, 2856, 2857, 1,
  17117. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17118. 2858, 1, 2858, 2858, 2859, 2858, 2858, 2858,
  17119. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17120. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17121. 2858, 2860, 2858, 2858, 2858, 2858, 2858, 2858,
  17122. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17123. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17124. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17125. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17126. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17127. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17128. 2858, 2858, 2858, 2861, 2858, 2858, 2858, 2858,
  17129. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17130. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17131. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17132. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 1,
  17133. 1, 1, 1, 1, 1, 1, 1, 1,
  17134. 1, 1, 1, 1, 1, 1, 1, 1,
  17135. 1, 1, 1, 1, 1, 1, 1, 1,
  17136. 1, 1, 1, 1, 1, 1, 1, 1,
  17137. 1, 1, 1, 1, 1, 1, 1, 1,
  17138. 1, 1, 1, 1, 1, 1, 1, 1,
  17139. 1, 1, 1, 1, 1, 1, 1, 1,
  17140. 1, 1, 1, 1, 1, 1, 1, 1,
  17141. 1, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17142. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17143. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17144. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2863,
  17145. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17146. 2864, 2864, 2864, 2864, 2865, 2864, 2864, 2866,
  17147. 2867, 2867, 2867, 2868, 1, 2869, 1, 2858,
  17148. 1, 1, 1, 1, 1, 1, 1, 1,
  17149. 1, 1, 1, 1, 1, 1, 1, 1,
  17150. 1, 1, 1, 1, 1, 1, 2858, 1,
  17151. 2870, 1, 1, 1, 2871, 1, 1, 1,
  17152. 1, 1, 1, 1, 1, 1, 1, 1,
  17153. 1, 1, 1, 1, 1, 1, 1, 2870,
  17154. 2872, 2016, 2872, 2872, 2872, 2872, 2872, 2873,
  17155. 1, 2872, 2872, 2018, 2872, 2874, 2872, 2872,
  17156. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17157. 2872, 1, 2020, 2021, 2872, 1, 2872, 2022,
  17158. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17159. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17160. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17161. 2872, 2872, 1, 1, 1, 2872, 2872, 2872,
  17162. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17163. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17164. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17165. 2872, 2872, 2872, 2872, 2872, 2872, 1, 1,
  17166. 1, 1, 1, 1, 1, 1, 1, 1,
  17167. 1, 1, 1, 1, 1, 1, 1, 1,
  17168. 1, 1, 1, 1, 1, 1, 1, 1,
  17169. 1, 1, 1, 1, 1, 1, 1, 1,
  17170. 1, 1, 1, 1, 1, 1, 1, 1,
  17171. 1, 1, 1, 1, 1, 1, 1, 1,
  17172. 1, 1, 1, 1, 1, 1, 1, 1,
  17173. 1, 1, 1, 1, 1, 1, 1, 1,
  17174. 1, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17175. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17176. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17177. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2876,
  17178. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17179. 2877, 2877, 2877, 2877, 2878, 2877, 2877, 2879,
  17180. 2880, 2880, 2880, 2881, 1, 2882, 1, 1,
  17181. 1, 2883, 1, 1, 1, 1, 1, 1,
  17182. 1, 1, 1, 1, 1, 1, 1, 1,
  17183. 1, 1, 1, 1, 2882, 2032, 2033, 2032,
  17184. 2032, 2032, 2032, 2032, 2884, 1, 2032, 2032,
  17185. 2035, 2032, 2051, 2032, 2032, 2032, 2032, 2032,
  17186. 2032, 2032, 2032, 2032, 2032, 2032, 1, 2037,
  17187. 2021, 2032, 1, 2032, 2038, 2032, 2032, 2032,
  17188. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17189. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17190. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 1,
  17191. 1, 1, 2032, 2032, 2032, 2032, 2032, 2032,
  17192. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17193. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17194. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17195. 2032, 2032, 2032, 1, 1, 1, 1, 1,
  17196. 1, 1, 1, 1, 1, 1, 1, 1,
  17197. 1, 1, 1, 1, 1, 1, 1, 1,
  17198. 1, 1, 1, 1, 1, 1, 1, 1,
  17199. 1, 1, 1, 1, 1, 1, 1, 1,
  17200. 1, 1, 1, 1, 1, 1, 1, 1,
  17201. 1, 1, 1, 1, 1, 1, 1, 1,
  17202. 1, 1, 1, 1, 1, 1, 1, 1,
  17203. 1, 1, 1, 1, 1, 1, 2039, 2039,
  17204. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17205. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17206. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17207. 2039, 2039, 2039, 2039, 2040, 2041, 2041, 2041,
  17208. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  17209. 2041, 2042, 2041, 2041, 2043, 2044, 2044, 2044,
  17210. 2045, 1, 2885, 1, 2886, 1, 1, 1,
  17211. 1, 1, 1, 1, 1, 1, 1, 1,
  17212. 1, 1, 1, 1, 1, 1, 1, 1,
  17213. 1, 1, 1, 2886, 1, 2887, 1, 1,
  17214. 1, 2888, 1, 1, 1, 1, 1, 1,
  17215. 1, 1, 1, 1, 1, 1, 1, 1,
  17216. 1, 1, 1, 1, 2887, 2078, 2079, 2078,
  17217. 2078, 2078, 2078, 2078, 2889, 1, 2078, 2078,
  17218. 2616, 2078, 2081, 2078, 2078, 2078, 2078, 2078,
  17219. 2078, 2078, 2078, 2078, 2078, 2078, 1, 2618,
  17220. 2082, 2078, 1, 2078, 2619, 2078, 2078, 2078,
  17221. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17222. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17223. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 1,
  17224. 1, 1, 2078, 2078, 2078, 2078, 2078, 2078,
  17225. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17226. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17227. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17228. 2078, 2078, 2078, 1, 1, 1, 1, 1,
  17229. 1, 1, 1, 1, 1, 1, 1, 1,
  17230. 1, 1, 1, 1, 1, 1, 1, 1,
  17231. 1, 1, 1, 1, 1, 1, 1, 1,
  17232. 1, 1, 1, 1, 1, 1, 1, 1,
  17233. 1, 1, 1, 1, 1, 1, 1, 1,
  17234. 1, 1, 1, 1, 1, 1, 1, 1,
  17235. 1, 1, 1, 1, 1, 1, 1, 1,
  17236. 1, 1, 1, 1, 1, 1, 2083, 2083,
  17237. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17238. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17239. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17240. 2083, 2083, 2083, 2083, 2084, 2085, 2085, 2085,
  17241. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  17242. 2085, 2086, 2085, 2085, 2087, 2088, 2088, 2088,
  17243. 2089, 1, 2890, 1, 1, 1, 2891, 1,
  17244. 1, 1, 1, 1, 1, 1, 1, 1,
  17245. 1, 1, 1, 1, 1, 1, 1, 1,
  17246. 1, 2890, 2872, 2016, 2872, 2872, 2872, 2872,
  17247. 2872, 2892, 1, 2872, 2872, 2018, 2872, 2874,
  17248. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17249. 2872, 2872, 2872, 1, 2020, 2021, 2872, 1,
  17250. 2872, 2022, 2872, 2872, 2872, 2872, 2872, 2872,
  17251. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17252. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17253. 2872, 2872, 2872, 2872, 1, 1, 1, 2872,
  17254. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17255. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17256. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17257. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17258. 1, 1, 1, 1, 1, 1, 1, 1,
  17259. 1, 1, 1, 1, 1, 1, 1, 1,
  17260. 1, 1, 1, 1, 1, 1, 1, 1,
  17261. 1, 1, 1, 1, 1, 1, 1, 1,
  17262. 1, 1, 1, 1, 1, 1, 1, 1,
  17263. 1, 1, 1, 1, 1, 1, 1, 1,
  17264. 1, 1, 1, 1, 1, 1, 1, 1,
  17265. 1, 1, 1, 1, 1, 1, 1, 1,
  17266. 1, 1, 1, 2875, 2875, 2875, 2875, 2875,
  17267. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17268. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17269. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17270. 2875, 2876, 2877, 2877, 2877, 2877, 2877, 2877,
  17271. 2877, 2877, 2877, 2877, 2877, 2877, 2878, 2877,
  17272. 2877, 2879, 2880, 2880, 2880, 2881, 1, 2893,
  17273. 1, 1, 1, 2894, 1, 1, 1, 1,
  17274. 1, 1, 1, 1, 1, 1, 1, 1,
  17275. 1, 1, 1, 1, 1, 1, 2893, 2032,
  17276. 2033, 2032, 2032, 2032, 2032, 2032, 2895, 1,
  17277. 2032, 2032, 2035, 2032, 1, 2032, 2032, 2032,
  17278. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17279. 1, 2037, 2004, 2032, 1, 2032, 2896, 2032,
  17280. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17281. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17282. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17283. 2032, 1, 1, 1, 2032, 2032, 2032, 2032,
  17284. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17285. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17286. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  17287. 2032, 2032, 2032, 2032, 2032, 1, 1, 1,
  17288. 1, 1, 1, 1, 1, 1, 1, 1,
  17289. 1, 1, 1, 1, 1, 1, 1, 1,
  17290. 1, 1, 1, 1, 1, 1, 1, 1,
  17291. 1, 1, 1, 1, 1, 1, 1, 1,
  17292. 1, 1, 1, 1, 1, 1, 1, 1,
  17293. 1, 1, 1, 1, 1, 1, 1, 1,
  17294. 1, 1, 1, 1, 1, 1, 1, 1,
  17295. 1, 1, 1, 1, 1, 1, 1, 1,
  17296. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17297. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17298. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  17299. 2039, 2039, 2039, 2039, 2039, 2039, 2040, 2041,
  17300. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  17301. 2041, 2041, 2041, 2042, 2041, 2041, 2043, 2044,
  17302. 2044, 2044, 2045, 1, 2897, 1, 2893, 1,
  17303. 1, 1, 1, 1, 1, 1, 1, 1,
  17304. 1, 1, 1, 1, 1, 1, 1, 1,
  17305. 1, 1, 1, 1, 1, 2893, 1, 2898,
  17306. 1, 1, 1, 2899, 1, 1, 1, 1,
  17307. 1, 1, 1, 1, 1, 1, 1, 1,
  17308. 1, 1, 1, 1, 1, 1, 2898, 2078,
  17309. 2079, 2078, 2078, 2078, 2078, 2078, 2900, 1,
  17310. 2078, 2078, 2616, 2078, 1, 2078, 2078, 2078,
  17311. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17312. 1, 2618, 2100, 2078, 1, 2078, 2901, 2078,
  17313. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17314. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17315. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17316. 2078, 1, 1, 1, 2078, 2078, 2078, 2078,
  17317. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17318. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17319. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  17320. 2078, 2078, 2078, 2078, 2078, 1, 1, 1,
  17321. 1, 1, 1, 1, 1, 1, 1, 1,
  17322. 1, 1, 1, 1, 1, 1, 1, 1,
  17323. 1, 1, 1, 1, 1, 1, 1, 1,
  17324. 1, 1, 1, 1, 1, 1, 1, 1,
  17325. 1, 1, 1, 1, 1, 1, 1, 1,
  17326. 1, 1, 1, 1, 1, 1, 1, 1,
  17327. 1, 1, 1, 1, 1, 1, 1, 1,
  17328. 1, 1, 1, 1, 1, 1, 1, 1,
  17329. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17330. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17331. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  17332. 2083, 2083, 2083, 2083, 2083, 2083, 2084, 2085,
  17333. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  17334. 2085, 2085, 2085, 2086, 2085, 2085, 2087, 2088,
  17335. 2088, 2088, 2089, 1, 2902, 1, 1, 1,
  17336. 2903, 1, 1, 1, 1, 1, 1, 1,
  17337. 1, 1, 1, 1, 1, 1, 1, 1,
  17338. 1, 1, 1, 2902, 2904, 2905, 2904, 2904,
  17339. 2904, 2904, 2904, 2906, 1, 2904, 2904, 1,
  17340. 2904, 2907, 2904, 2904, 2904, 2904, 2904, 2904,
  17341. 2904, 2904, 2904, 2904, 2904, 1, 1, 1,
  17342. 2904, 1, 2904, 1, 2904, 2904, 2904, 2904,
  17343. 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17344. 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17345. 2904, 2904, 2904, 2904, 2904, 2904, 2652, 1,
  17346. 1, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17347. 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17348. 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17349. 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
  17350. 2904, 2904, 1, 1, 1, 1, 1, 1,
  17351. 1, 1, 1, 1, 1, 1, 1, 1,
  17352. 1, 1, 1, 1, 1, 1, 1, 1,
  17353. 1, 1, 1, 1, 1, 1, 1, 1,
  17354. 1, 1, 1, 1, 1, 1, 1, 1,
  17355. 1, 1, 1, 1, 1, 1, 1, 1,
  17356. 1, 1, 1, 1, 1, 1, 1, 1,
  17357. 1, 1, 1, 1, 1, 1, 1, 1,
  17358. 1, 1, 1, 1, 1, 2908, 2908, 2908,
  17359. 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908,
  17360. 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908,
  17361. 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908,
  17362. 2908, 2908, 2908, 2909, 2910, 2910, 2910, 2910,
  17363. 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
  17364. 2911, 2910, 2910, 2912, 2913, 2913, 2913, 2914,
  17365. 1, 2915, 1, 1, 1, 2916, 1, 1,
  17366. 1, 1, 1, 1, 1, 1, 1, 1,
  17367. 1, 1, 1, 1, 1, 1, 1, 1,
  17368. 2915, 2917, 2774, 2917, 2917, 2917, 2917, 2917,
  17369. 2918, 1, 2917, 2917, 1, 2917, 2665, 2917,
  17370. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17371. 2917, 2917, 1, 1, 1, 2917, 1, 2917,
  17372. 1, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17373. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17374. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17375. 2917, 2917, 2917, 2666, 1, 1, 2917, 2917,
  17376. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17377. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17378. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17379. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 1,
  17380. 1, 1, 1, 1, 1, 1, 1, 1,
  17381. 1, 1, 1, 1, 1, 1, 1, 1,
  17382. 1, 1, 1, 1, 1, 1, 1, 1,
  17383. 1, 1, 1, 1, 1, 1, 1, 1,
  17384. 1, 1, 1, 1, 1, 1, 1, 1,
  17385. 1, 1, 1, 1, 1, 1, 1, 1,
  17386. 1, 1, 1, 1, 1, 1, 1, 1,
  17387. 1, 1, 1, 1, 1, 1, 1, 1,
  17388. 1, 1, 2919, 2919, 2919, 2919, 2919, 2919,
  17389. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17390. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17391. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17392. 2920, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17393. 2921, 2921, 2921, 2921, 2921, 2922, 2921, 2921,
  17394. 2923, 2924, 2924, 2924, 2925, 1, 2926, 1,
  17395. 2915, 1, 1, 1, 1, 1, 1, 1,
  17396. 1, 1, 1, 1, 1, 1, 1, 1,
  17397. 1, 1, 1, 1, 1, 1, 1, 2915,
  17398. 1, 2927, 1, 1, 1, 2928, 1, 1,
  17399. 1, 1, 1, 1, 1, 1, 1, 1,
  17400. 1, 1, 1, 1, 1, 1, 1, 1,
  17401. 2927, 2917, 2774, 2917, 2917, 2917, 2917, 2917,
  17402. 2929, 1, 2917, 2917, 2678, 2917, 2930, 2917,
  17403. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17404. 2917, 2917, 1, 2680, 1, 2917, 1, 2917,
  17405. 1, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17406. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17407. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17408. 2917, 2917, 2917, 1, 1, 1, 2917, 2917,
  17409. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17410. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17411. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17412. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 1,
  17413. 1, 1, 1, 1, 1, 1, 1, 1,
  17414. 1, 1, 1, 1, 1, 1, 1, 1,
  17415. 1, 1, 1, 1, 1, 1, 1, 1,
  17416. 1, 1, 1, 1, 1, 1, 1, 1,
  17417. 1, 1, 1, 1, 1, 1, 1, 1,
  17418. 1, 1, 1, 1, 1, 1, 1, 1,
  17419. 1, 1, 1, 1, 1, 1, 1, 1,
  17420. 1, 1, 1, 1, 1, 1, 1, 1,
  17421. 1, 1, 2919, 2919, 2919, 2919, 2919, 2919,
  17422. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17423. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17424. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17425. 2920, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17426. 2921, 2921, 2921, 2921, 2921, 2922, 2921, 2921,
  17427. 2923, 2924, 2924, 2924, 2925, 1, 2927, 1,
  17428. 1, 1, 2928, 1, 1, 1, 1, 1,
  17429. 1, 1, 1, 1, 1, 1, 1, 1,
  17430. 1, 1, 1, 1, 1, 2927, 1, 1,
  17431. 1, 1, 1, 1, 1, 2929, 1, 1,
  17432. 1, 2678, 1, 2931, 1, 1, 1, 1,
  17433. 1, 1, 1, 1, 1, 1, 1, 1,
  17434. 2680, 1, 2932, 1, 2927, 1, 1, 1,
  17435. 1, 1, 1, 1, 1, 1, 1, 1,
  17436. 1, 1, 1, 1, 1, 1, 1, 1,
  17437. 1, 1, 1, 2927, 1, 2933, 1, 1,
  17438. 1, 2934, 1, 1, 1, 1, 1, 1,
  17439. 1, 1, 1, 1, 1, 1, 1, 1,
  17440. 1, 1, 1, 1, 2933, 1, 1, 1,
  17441. 1, 1, 1, 1, 2935, 1, 1, 1,
  17442. 2687, 1, 2936, 1, 1, 1, 1, 1,
  17443. 1, 1, 1, 1, 1, 1, 1, 2689,
  17444. 1, 2931, 1, 1, 1, 2937, 1, 1,
  17445. 1, 1, 1, 1, 1, 1, 1, 1,
  17446. 1, 1, 1, 1, 1, 1, 1, 1,
  17447. 2931, 2938, 1, 2938, 2938, 2938, 2938, 2938,
  17448. 2939, 1, 2938, 2938, 1, 2938, 1, 2938,
  17449. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17450. 2938, 2938, 1, 1, 1, 2938, 1, 2938,
  17451. 1, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17452. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17453. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17454. 2938, 2938, 2938, 1, 1, 1, 2938, 2938,
  17455. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17456. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17457. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17458. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 1,
  17459. 1, 1, 1, 1, 1, 1, 1, 1,
  17460. 1, 1, 1, 1, 1, 1, 1, 1,
  17461. 1, 1, 1, 1, 1, 1, 1, 1,
  17462. 1, 1, 1, 1, 1, 1, 1, 1,
  17463. 1, 1, 1, 1, 1, 1, 1, 1,
  17464. 1, 1, 1, 1, 1, 1, 1, 1,
  17465. 1, 1, 1, 1, 1, 1, 1, 1,
  17466. 1, 1, 1, 1, 1, 1, 1, 1,
  17467. 1, 1, 2940, 2940, 2940, 2940, 2940, 2940,
  17468. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17469. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17470. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17471. 2941, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17472. 2942, 2942, 2942, 2942, 2942, 2943, 2942, 2942,
  17473. 2944, 2945, 2945, 2945, 2946, 1, 2947, 1,
  17474. 2931, 1, 1, 1, 1, 1, 1, 1,
  17475. 1, 1, 1, 1, 1, 1, 1, 1,
  17476. 1, 1, 1, 1, 1, 1, 1, 2931,
  17477. 1, 2927, 1, 1, 1, 2928, 1, 1,
  17478. 1, 1, 1, 1, 1, 1, 1, 1,
  17479. 1, 1, 1, 1, 1, 1, 1, 1,
  17480. 2927, 2938, 1, 2938, 2938, 2938, 2938, 2938,
  17481. 2929, 1, 2938, 2938, 2678, 2938, 2931, 2938,
  17482. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17483. 2938, 2938, 1, 2680, 1, 2938, 1, 2938,
  17484. 1, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17485. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17486. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17487. 2938, 2938, 2938, 1, 1, 1, 2938, 2938,
  17488. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17489. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17490. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17491. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 1,
  17492. 1, 1, 1, 1, 1, 1, 1, 1,
  17493. 1, 1, 1, 1, 1, 1, 1, 1,
  17494. 1, 1, 1, 1, 1, 1, 1, 1,
  17495. 1, 1, 1, 1, 1, 1, 1, 1,
  17496. 1, 1, 1, 1, 1, 1, 1, 1,
  17497. 1, 1, 1, 1, 1, 1, 1, 1,
  17498. 1, 1, 1, 1, 1, 1, 1, 1,
  17499. 1, 1, 1, 1, 1, 1, 1, 1,
  17500. 1, 1, 2940, 2940, 2940, 2940, 2940, 2940,
  17501. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17502. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17503. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17504. 2941, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17505. 2942, 2942, 2942, 2942, 2942, 2943, 2942, 2942,
  17506. 2944, 2945, 2945, 2945, 2946, 1, 2938, 2938,
  17507. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17508. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17509. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17510. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17511. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17512. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17513. 2938, 2938, 2938, 2938, 2938, 2938, 2938, 2938,
  17514. 2938, 2938, 2938, 2938, 2938, 2938, 1, 2940,
  17515. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17516. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17517. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17518. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 1,
  17519. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17520. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17521. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17522. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17523. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17524. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17525. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17526. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17527. 1, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17528. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17529. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17530. 2940, 2940, 2940, 2940, 2940, 2940, 2940, 2940,
  17531. 2940, 1, 2942, 2942, 2942, 2942, 2942, 2942,
  17532. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17533. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17534. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17535. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17536. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17537. 2942, 2942, 1, 2942, 2942, 2942, 2942, 2942,
  17538. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17539. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17540. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17541. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17542. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17543. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17544. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17545. 2942, 2942, 2942, 1, 2942, 2942, 2942, 2942,
  17546. 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
  17547. 2942, 2942, 2942, 2942, 1, 2936, 1, 1,
  17548. 1, 2948, 1, 1, 1, 1, 1, 1,
  17549. 1, 1, 1, 1, 1, 1, 1, 1,
  17550. 1, 1, 1, 1, 2936, 2949, 1, 2949,
  17551. 2949, 2949, 2949, 2949, 2950, 1, 2949, 2949,
  17552. 1, 2949, 1, 2949, 2949, 2949, 2949, 2949,
  17553. 2949, 2949, 2949, 2949, 2949, 2949, 1, 1,
  17554. 1, 2949, 1, 2949, 1, 2949, 2949, 2949,
  17555. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2949,
  17556. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2949,
  17557. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 1,
  17558. 1, 1, 2949, 2949, 2949, 2949, 2949, 2949,
  17559. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2949,
  17560. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2949,
  17561. 2949, 2949, 2949, 2949, 2949, 2949, 2949, 2949,
  17562. 2949, 2949, 2949, 1, 1, 1, 1, 1,
  17563. 1, 1, 1, 1, 1, 1, 1, 1,
  17564. 1, 1, 1, 1, 1, 1, 1, 1,
  17565. 1, 1, 1, 1, 1, 1, 1, 1,
  17566. 1, 1, 1, 1, 1, 1, 1, 1,
  17567. 1, 1, 1, 1, 1, 1, 1, 1,
  17568. 1, 1, 1, 1, 1, 1, 1, 1,
  17569. 1, 1, 1, 1, 1, 1, 1, 1,
  17570. 1, 1, 1, 1, 1, 1, 2951, 2951,
  17571. 2951, 2951, 2951, 2951, 2951, 2951, 2951, 2951,
  17572. 2951, 2951, 2951, 2951, 2951, 2951, 2951, 2951,
  17573. 2951, 2951, 2951, 2951, 2951, 2951, 2951, 2951,
  17574. 2951, 2951, 2951, 2951, 2952, 2953, 2953, 2953,
  17575. 2953, 2953, 2953, 2953, 2953, 2953, 2953, 2953,
  17576. 2953, 2954, 2953, 2953, 2955, 2956, 2956, 2956,
  17577. 2957, 1, 2931, 1, 1, 1, 2937, 1,
  17578. 1, 1, 1, 1, 1, 1, 1, 1,
  17579. 1, 1, 1, 1, 1, 1, 1, 1,
  17580. 1, 2931, 2917, 2774, 2917, 2917, 2917, 2917,
  17581. 2917, 2939, 1, 2917, 2917, 1, 2917, 2665,
  17582. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17583. 2917, 2917, 2917, 1, 1, 1, 2917, 1,
  17584. 2917, 1, 2917, 2917, 2917, 2917, 2917, 2917,
  17585. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17586. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17587. 2917, 2917, 2917, 2917, 1, 1, 1, 2917,
  17588. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17589. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17590. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17591. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17592. 1, 1, 1, 1, 1, 1, 1, 1,
  17593. 1, 1, 1, 1, 1, 1, 1, 1,
  17594. 1, 1, 1, 1, 1, 1, 1, 1,
  17595. 1, 1, 1, 1, 1, 1, 1, 1,
  17596. 1, 1, 1, 1, 1, 1, 1, 1,
  17597. 1, 1, 1, 1, 1, 1, 1, 1,
  17598. 1, 1, 1, 1, 1, 1, 1, 1,
  17599. 1, 1, 1, 1, 1, 1, 1, 1,
  17600. 1, 1, 1, 2919, 2919, 2919, 2919, 2919,
  17601. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17602. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17603. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17604. 2919, 2920, 2921, 2921, 2921, 2921, 2921, 2921,
  17605. 2921, 2921, 2921, 2921, 2921, 2921, 2922, 2921,
  17606. 2921, 2923, 2924, 2924, 2924, 2925, 1, 2917,
  17607. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17608. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17609. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17610. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17611. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17612. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17613. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 2917,
  17614. 2917, 2917, 2917, 2917, 2917, 2917, 2917, 1,
  17615. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17616. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17617. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17618. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17619. 1, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17620. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17621. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17622. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17623. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17624. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17625. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17626. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17627. 2919, 1, 2919, 2919, 2919, 2919, 2919, 2919,
  17628. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17629. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17630. 2919, 2919, 2919, 2919, 2919, 2919, 2919, 2919,
  17631. 2919, 2919, 1, 2921, 2921, 2921, 2921, 2921,
  17632. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17633. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17634. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17635. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17636. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17637. 2921, 2921, 2921, 1, 2921, 2921, 2921, 2921,
  17638. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17639. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17640. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17641. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17642. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17643. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17644. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17645. 2921, 2921, 2921, 2921, 1, 2921, 2921, 2921,
  17646. 2921, 2921, 2921, 2921, 2921, 2921, 2921, 2921,
  17647. 2921, 2921, 2921, 2921, 2921, 1, 2958, 1,
  17648. 1, 1, 2959, 1, 1, 1, 1, 1,
  17649. 1, 1, 1, 1, 1, 1, 1, 1,
  17650. 1, 1, 1, 1, 1, 2958, 2960, 2961,
  17651. 2960, 2960, 2960, 2960, 2960, 2962, 1, 2960,
  17652. 2960, 1, 2960, 2764, 2960, 2960, 2960, 2960,
  17653. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 1,
  17654. 1, 1, 2960, 1, 2960, 1, 2960, 2960,
  17655. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17656. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17657. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17658. 2765, 1, 1, 2960, 2960, 2960, 2960, 2960,
  17659. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17660. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17661. 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
  17662. 2960, 2960, 2960, 2960, 1, 1, 1, 1,
  17663. 1, 1, 1, 1, 1, 1, 1, 1,
  17664. 1, 1, 1, 1, 1, 1, 1, 1,
  17665. 1, 1, 1, 1, 1, 1, 1, 1,
  17666. 1, 1, 1, 1, 1, 1, 1, 1,
  17667. 1, 1, 1, 1, 1, 1, 1, 1,
  17668. 1, 1, 1, 1, 1, 1, 1, 1,
  17669. 1, 1, 1, 1, 1, 1, 1, 1,
  17670. 1, 1, 1, 1, 1, 1, 1, 2963,
  17671. 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
  17672. 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
  17673. 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
  17674. 2963, 2963, 2963, 2963, 2963, 2964, 2965, 2965,
  17675. 2965, 2965, 2965, 2965, 2965, 2965, 2965, 2965,
  17676. 2965, 2965, 2966, 2965, 2965, 2967, 2968, 2968,
  17677. 2968, 2969, 1, 2872, 2872, 2872, 2872, 2872,
  17678. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17679. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17680. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17681. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17682. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17683. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17684. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17685. 2872, 2872, 2872, 1, 2875, 2875, 2875, 2875,
  17686. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17687. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17688. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17689. 2875, 2875, 2875, 2875, 1, 2875, 2875, 2875,
  17690. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17691. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17692. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17693. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17694. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17695. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17696. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17697. 2875, 2875, 2875, 2875, 2875, 1, 2875, 2875,
  17698. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17699. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17700. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  17701. 2875, 2875, 2875, 2875, 2875, 2875, 1, 2877,
  17702. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17703. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17704. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17705. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17706. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17707. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 1,
  17708. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17709. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17710. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17711. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17712. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17713. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17714. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17715. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17716. 1, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17717. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  17718. 2877, 1, 2858, 2858, 2858, 2858, 2858, 2858,
  17719. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17720. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17721. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17722. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17723. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17724. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17725. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17726. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17727. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17728. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17729. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17730. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17731. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17732. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17733. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17734. 2858, 2858, 1, 1, 1, 1, 1, 1,
  17735. 1, 1, 1, 1, 1, 1, 1, 1,
  17736. 1, 1, 1, 1, 1, 1, 1, 1,
  17737. 1, 1, 1, 1, 1, 1, 1, 1,
  17738. 1, 1, 1, 1, 1, 1, 1, 1,
  17739. 1, 1, 1, 1, 1, 1, 1, 1,
  17740. 1, 1, 1, 1, 1, 1, 1, 1,
  17741. 1, 1, 1, 1, 1, 1, 1, 1,
  17742. 1, 1, 1, 1, 2862, 2862, 2862, 2862,
  17743. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17744. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17745. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17746. 2862, 2862, 2863, 2864, 2864, 2864, 2864, 2864,
  17747. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2865,
  17748. 2864, 2864, 2866, 2867, 2867, 2867, 2868, 1,
  17749. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17750. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17751. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17752. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17753. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17754. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17755. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17756. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17757. 1, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17758. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17759. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17760. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17761. 2862, 1, 2862, 2862, 2862, 2862, 2862, 2862,
  17762. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17763. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17764. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17765. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17766. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17767. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17768. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17769. 2862, 2862, 1, 2862, 2862, 2862, 2862, 2862,
  17770. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17771. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17772. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17773. 2862, 2862, 2862, 1, 2864, 2864, 2864, 2864,
  17774. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17775. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17776. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17777. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17778. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17779. 2864, 2864, 2864, 2864, 1, 2864, 2864, 2864,
  17780. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17781. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17782. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17783. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17784. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17785. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17786. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17787. 2864, 2864, 2864, 2864, 2864, 1, 2864, 2864,
  17788. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17789. 2864, 2864, 2864, 2864, 2864, 2864, 1, 2858,
  17790. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2970,
  17791. 1, 2858, 2858, 2971, 2858, 2858, 2858, 2858,
  17792. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17793. 2858, 2858, 2858, 2858, 2858, 2858, 2970, 2858,
  17794. 2066, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17795. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17796. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17797. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17798. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17799. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17800. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17801. 2858, 2858, 2861, 2858, 2858, 2858, 2858, 2858,
  17802. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17803. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17804. 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
  17805. 2858, 2858, 2858, 2858, 2858, 2858, 1, 1,
  17806. 1, 1, 1, 1, 1, 1, 1, 1,
  17807. 1, 1, 1, 1, 1, 1, 1, 1,
  17808. 1, 1, 1, 1, 1, 1, 1, 1,
  17809. 1, 1, 1, 1, 1, 1, 1, 1,
  17810. 1, 1, 1, 1, 1, 1, 1, 1,
  17811. 1, 1, 1, 1, 1, 1, 1, 1,
  17812. 1, 1, 1, 1, 1, 1, 1, 1,
  17813. 1, 1, 1, 1, 1, 1, 1, 1,
  17814. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17815. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17816. 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
  17817. 2862, 2862, 2862, 2862, 2862, 2862, 2863, 2864,
  17818. 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
  17819. 2864, 2864, 2864, 2865, 2864, 2864, 2866, 2867,
  17820. 2867, 2867, 2868, 1, 2972, 1, 2970, 1,
  17821. 1, 1, 1, 1, 1, 1, 1, 1,
  17822. 1, 1, 1, 1, 1, 1, 1, 1,
  17823. 1, 1, 1, 1, 1, 2970, 1, 2973,
  17824. 1, 1, 1, 2974, 1, 1, 1, 1,
  17825. 1, 1, 1, 1, 1, 1, 1, 1,
  17826. 1, 1, 1, 1, 1, 1, 2973, 2015,
  17827. 2975, 2015, 2015, 2015, 2015, 2015, 2976, 1,
  17828. 2015, 2015, 2018, 2015, 2874, 2015, 2015, 2015,
  17829. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17830. 1, 2020, 2021, 2015, 1, 2015, 2022, 2015,
  17831. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17832. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17833. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17834. 2015, 1, 1, 1, 2015, 2015, 2015, 2015,
  17835. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17836. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17837. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  17838. 2015, 2015, 2015, 2015, 2015, 1, 1, 1,
  17839. 1, 1, 1, 1, 1, 1, 1, 1,
  17840. 1, 1, 1, 1, 1, 1, 1, 1,
  17841. 1, 1, 1, 1, 1, 1, 1, 1,
  17842. 1, 1, 1, 1, 1, 1, 1, 1,
  17843. 1, 1, 1, 1, 1, 1, 1, 1,
  17844. 1, 1, 1, 1, 1, 1, 1, 1,
  17845. 1, 1, 1, 1, 1, 1, 1, 1,
  17846. 1, 1, 1, 1, 1, 1, 1, 1,
  17847. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  17848. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  17849. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  17850. 2023, 2023, 2023, 2023, 2023, 2023, 2024, 2025,
  17851. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  17852. 2025, 2025, 2025, 2026, 2025, 2025, 2027, 2028,
  17853. 2028, 2028, 2029, 1, 2977, 1, 1, 1,
  17854. 2978, 1, 1, 1, 1, 1, 1, 1,
  17855. 1, 1, 1, 1, 1, 1, 1, 1,
  17856. 1, 1, 1, 2977, 2622, 2623, 2622, 2622,
  17857. 2622, 2622, 2622, 2979, 1, 2622, 2622, 2035,
  17858. 2622, 1, 2622, 2622, 2622, 2622, 2622, 2622,
  17859. 2622, 2622, 2622, 2622, 2622, 1, 2037, 2004,
  17860. 2622, 1, 2622, 2896, 2622, 2622, 2622, 2622,
  17861. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17862. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17863. 2622, 2622, 2622, 2622, 2622, 2622, 1, 1,
  17864. 1, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17865. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17866. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17867. 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
  17868. 2622, 2622, 1, 1, 1, 1, 1, 1,
  17869. 1, 1, 1, 1, 1, 1, 1, 1,
  17870. 1, 1, 1, 1, 1, 1, 1, 1,
  17871. 1, 1, 1, 1, 1, 1, 1, 1,
  17872. 1, 1, 1, 1, 1, 1, 1, 1,
  17873. 1, 1, 1, 1, 1, 1, 1, 1,
  17874. 1, 1, 1, 1, 1, 1, 1, 1,
  17875. 1, 1, 1, 1, 1, 1, 1, 1,
  17876. 1, 1, 1, 1, 1, 2625, 2625, 2625,
  17877. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  17878. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  17879. 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
  17880. 2625, 2625, 2625, 2626, 2627, 2627, 2627, 2627,
  17881. 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
  17882. 2628, 2627, 2627, 2629, 2630, 2630, 2630, 2631,
  17883. 1, 2980, 1, 2977, 1, 1, 1, 1,
  17884. 1, 1, 1, 1, 1, 1, 1, 1,
  17885. 1, 1, 1, 1, 1, 1, 1, 1,
  17886. 1, 1, 2977, 1, 2981, 1, 1, 1,
  17887. 2982, 1, 1, 1, 1, 1, 1, 1,
  17888. 1, 1, 1, 1, 1, 1, 1, 1,
  17889. 1, 1, 1, 2981, 2837, 2838, 2837, 2837,
  17890. 2837, 2837, 2837, 2983, 1, 2837, 2837, 2616,
  17891. 2837, 1, 2837, 2837, 2837, 2837, 2837, 2837,
  17892. 2837, 2837, 2837, 2837, 2837, 1, 2618, 2100,
  17893. 2837, 1, 2837, 2901, 2837, 2837, 2837, 2837,
  17894. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17895. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17896. 2837, 2837, 2837, 2837, 2837, 2837, 1, 1,
  17897. 1, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17898. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17899. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17900. 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837,
  17901. 2837, 2837, 1, 1, 1, 1, 1, 1,
  17902. 1, 1, 1, 1, 1, 1, 1, 1,
  17903. 1, 1, 1, 1, 1, 1, 1, 1,
  17904. 1, 1, 1, 1, 1, 1, 1, 1,
  17905. 1, 1, 1, 1, 1, 1, 1, 1,
  17906. 1, 1, 1, 1, 1, 1, 1, 1,
  17907. 1, 1, 1, 1, 1, 1, 1, 1,
  17908. 1, 1, 1, 1, 1, 1, 1, 1,
  17909. 1, 1, 1, 1, 1, 2840, 2840, 2840,
  17910. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17911. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17912. 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
  17913. 2840, 2840, 2840, 2841, 2842, 2842, 2842, 2842,
  17914. 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842,
  17915. 2843, 2842, 2842, 2844, 2845, 2845, 2845, 2846,
  17916. 1, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17917. 2984, 2985, 1, 2984, 2984, 2986, 2984, 2984,
  17918. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17919. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17920. 2985, 2984, 2814, 2984, 2984, 2984, 2984, 2984,
  17921. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17922. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17923. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17924. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17925. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17926. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17927. 2984, 2984, 2984, 2984, 2987, 2984, 2984, 2984,
  17928. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17929. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17930. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17931. 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
  17932. 1, 1, 1, 1, 1, 1, 1, 1,
  17933. 1, 1, 1, 1, 1, 1, 1, 1,
  17934. 1, 1, 1, 1, 1, 1, 1, 1,
  17935. 1, 1, 1, 1, 1, 1, 1, 1,
  17936. 1, 1, 1, 1, 1, 1, 1, 1,
  17937. 1, 1, 1, 1, 1, 1, 1, 1,
  17938. 1, 1, 1, 1, 1, 1, 1, 1,
  17939. 1, 1, 1, 1, 1, 1, 1, 1,
  17940. 1, 1, 2988, 2988, 2988, 2988, 2988, 2988,
  17941. 2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988,
  17942. 2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988,
  17943. 2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988,
  17944. 2989, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
  17945. 2990, 2990, 2990, 2990, 2990, 2991, 2990, 2990,
  17946. 2992, 2993, 2993, 2993, 2994, 1, 2995, 2995,
  17947. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 1,
  17948. 2995, 2995, 2996, 2995, 2995, 2995, 2995, 2995,
  17949. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17950. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2997,
  17951. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17952. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17953. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17954. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17955. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17956. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17957. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17958. 2995, 2998, 2995, 2995, 2995, 2995, 2995, 2995,
  17959. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17960. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17961. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  17962. 2995, 2995, 2995, 2995, 2995, 1, 1, 1,
  17963. 1, 1, 1, 1, 1, 1, 1, 1,
  17964. 1, 1, 1, 1, 1, 1, 1, 1,
  17965. 1, 1, 1, 1, 1, 1, 1, 1,
  17966. 1, 1, 1, 1, 1, 1, 1, 1,
  17967. 1, 1, 1, 1, 1, 1, 1, 1,
  17968. 1, 1, 1, 1, 1, 1, 1, 1,
  17969. 1, 1, 1, 1, 1, 1, 1, 1,
  17970. 1, 1, 1, 1, 1, 1, 1, 2999,
  17971. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  17972. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  17973. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  17974. 2999, 2999, 2999, 2999, 2999, 3000, 3001, 3001,
  17975. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  17976. 3001, 3001, 3002, 3001, 3001, 3003, 3004, 3004,
  17977. 3004, 3005, 1, 3006, 1, 2995, 1, 1,
  17978. 1, 1, 1, 1, 1, 1, 1, 1,
  17979. 1, 1, 1, 1, 1, 1, 1, 1,
  17980. 1, 1, 1, 1, 2995, 1, 2013, 1,
  17981. 1, 1, 2014, 1, 1, 1, 1, 1,
  17982. 1, 1, 1, 1, 1, 1, 1, 1,
  17983. 1, 1, 1, 1, 1, 2013, 2872, 2016,
  17984. 2872, 2872, 2872, 2872, 2872, 2017, 1, 2872,
  17985. 2872, 2018, 2872, 2019, 2872, 2872, 2872, 2872,
  17986. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 1,
  17987. 2020, 2021, 2872, 1, 2872, 2022, 2872, 2872,
  17988. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17989. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17990. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17991. 1, 1, 1, 2872, 2872, 2872, 2872, 2872,
  17992. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17993. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17994. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  17995. 2872, 2872, 2872, 2872, 1, 1, 1, 1,
  17996. 1, 1, 1, 1, 1, 1, 1, 1,
  17997. 1, 1, 1, 1, 1, 1, 1, 1,
  17998. 1, 1, 1, 1, 1, 1, 1, 1,
  17999. 1, 1, 1, 1, 1, 1, 1, 1,
  18000. 1, 1, 1, 1, 1, 1, 1, 1,
  18001. 1, 1, 1, 1, 1, 1, 1, 1,
  18002. 1, 1, 1, 1, 1, 1, 1, 1,
  18003. 1, 1, 1, 1, 1, 1, 1, 2875,
  18004. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18005. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18006. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18007. 2875, 2875, 2875, 2875, 2875, 2876, 2877, 2877,
  18008. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  18009. 2877, 2877, 2878, 2877, 2877, 2879, 2880, 2880,
  18010. 2880, 2881, 1, 2995, 2995, 2995, 2995, 2995,
  18011. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18012. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18013. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18014. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18015. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18016. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18017. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18018. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18019. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18020. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18021. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18022. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18023. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18024. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18025. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18026. 2995, 2995, 2995, 1, 1, 1, 1, 1,
  18027. 1, 1, 1, 1, 1, 1, 1, 1,
  18028. 1, 1, 1, 1, 1, 1, 1, 1,
  18029. 1, 1, 1, 1, 1, 1, 1, 1,
  18030. 1, 1, 1, 1, 1, 1, 1, 1,
  18031. 1, 1, 1, 1, 1, 1, 1, 1,
  18032. 1, 1, 1, 1, 1, 1, 1, 1,
  18033. 1, 1, 1, 1, 1, 1, 1, 1,
  18034. 1, 1, 1, 1, 1, 2999, 2999, 2999,
  18035. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18036. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18037. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18038. 2999, 2999, 2999, 3000, 3001, 3001, 3001, 3001,
  18039. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18040. 3002, 3001, 3001, 3003, 3004, 3004, 3004, 3005,
  18041. 1, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18042. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18043. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18044. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18045. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18046. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18047. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18048. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18049. 2995, 1, 2999, 2999, 2999, 2999, 2999, 2999,
  18050. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18051. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18052. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18053. 2999, 2999, 1, 2999, 2999, 2999, 2999, 2999,
  18054. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18055. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18056. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18057. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18058. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18059. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18060. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18061. 2999, 2999, 2999, 1, 2999, 2999, 2999, 2999,
  18062. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18063. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18064. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18065. 2999, 2999, 2999, 2999, 1, 3001, 3001, 3001,
  18066. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18067. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18068. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18069. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18070. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18071. 3001, 3001, 3001, 3001, 3001, 1, 3001, 3001,
  18072. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18073. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18074. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18075. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18076. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18077. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18078. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18079. 3001, 3001, 3001, 3001, 3001, 3001, 1, 3001,
  18080. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18081. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 1,
  18082. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18083. 3007, 1, 2995, 2995, 3008, 2995, 2995, 2995,
  18084. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18085. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 3007,
  18086. 2995, 2825, 2995, 2995, 2995, 2995, 2995, 2995,
  18087. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18088. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18089. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18090. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18091. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18092. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18093. 2995, 2995, 2995, 2998, 2995, 2995, 2995, 2995,
  18094. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18095. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18096. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
  18097. 2995, 2995, 2995, 2995, 2995, 2995, 2995, 1,
  18098. 1, 1, 1, 1, 1, 1, 1, 1,
  18099. 1, 1, 1, 1, 1, 1, 1, 1,
  18100. 1, 1, 1, 1, 1, 1, 1, 1,
  18101. 1, 1, 1, 1, 1, 1, 1, 1,
  18102. 1, 1, 1, 1, 1, 1, 1, 1,
  18103. 1, 1, 1, 1, 1, 1, 1, 1,
  18104. 1, 1, 1, 1, 1, 1, 1, 1,
  18105. 1, 1, 1, 1, 1, 1, 1, 1,
  18106. 1, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18107. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18108. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 2999,
  18109. 2999, 2999, 2999, 2999, 2999, 2999, 2999, 3000,
  18110. 3001, 3001, 3001, 3001, 3001, 3001, 3001, 3001,
  18111. 3001, 3001, 3001, 3001, 3002, 3001, 3001, 3003,
  18112. 3004, 3004, 3004, 3005, 1, 3009, 1, 3007,
  18113. 1, 1, 1, 1, 1, 1, 1, 1,
  18114. 1, 1, 1, 1, 1, 1, 1, 1,
  18115. 1, 1, 1, 1, 1, 1, 3007, 1,
  18116. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18117. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18118. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18119. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18120. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18121. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18122. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18123. 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
  18124. 1, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18125. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18126. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18127. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18128. 2023, 1, 2023, 2023, 2023, 2023, 2023, 2023,
  18129. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18130. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18131. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18132. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18133. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18134. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18135. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18136. 2023, 2023, 1, 2023, 2023, 2023, 2023, 2023,
  18137. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18138. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18139. 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,
  18140. 2023, 2023, 2023, 1, 2025, 2025, 2025, 2025,
  18141. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18142. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18143. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18144. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18145. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18146. 2025, 2025, 2025, 2025, 1, 2025, 2025, 2025,
  18147. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18148. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18149. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18150. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18151. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18152. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18153. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18154. 2025, 2025, 2025, 2025, 2025, 1, 2025, 2025,
  18155. 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
  18156. 2025, 2025, 2025, 2025, 2025, 2025, 1, 3010,
  18157. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3011,
  18158. 1, 3010, 3010, 3012, 3010, 3010, 3010, 3010,
  18159. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18160. 3010, 3010, 3010, 3010, 3010, 3010, 3011, 3010,
  18161. 3013, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18162. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18163. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18164. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18165. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18166. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18167. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18168. 3010, 3010, 3014, 3010, 3010, 3010, 3010, 3010,
  18169. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18170. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18171. 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
  18172. 3010, 3010, 3010, 3010, 3010, 3010, 1, 1,
  18173. 1, 1, 1, 1, 1, 1, 1, 1,
  18174. 1, 1, 1, 1, 1, 1, 1, 1,
  18175. 1, 1, 1, 1, 1, 1, 1, 1,
  18176. 1, 1, 1, 1, 1, 1, 1, 1,
  18177. 1, 1, 1, 1, 1, 1, 1, 1,
  18178. 1, 1, 1, 1, 1, 1, 1, 1,
  18179. 1, 1, 1, 1, 1, 1, 1, 1,
  18180. 1, 1, 1, 1, 1, 1, 1, 1,
  18181. 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015,
  18182. 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015,
  18183. 3015, 3015, 3015, 3015, 3015, 3015, 3015, 3015,
  18184. 3015, 3015, 3015, 3015, 3015, 3015, 3016, 3017,
  18185. 3017, 3017, 3017, 3017, 3017, 3017, 3017, 3017,
  18186. 3017, 3017, 3017, 3018, 3017, 3017, 3019, 3020,
  18187. 3020, 3020, 3021, 1, 3022, 3022, 3022, 3022,
  18188. 3022, 3022, 3022, 3022, 3022, 1, 3022, 3022,
  18189. 3023, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18190. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18191. 3022, 3022, 3022, 3022, 3022, 3024, 3022, 3022,
  18192. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18193. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18194. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18195. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18196. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18197. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18198. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3025,
  18199. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18200. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18201. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18202. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18203. 3022, 3022, 3022, 1, 1, 1, 1, 1,
  18204. 1, 1, 1, 1, 1, 1, 1, 1,
  18205. 1, 1, 1, 1, 1, 1, 1, 1,
  18206. 1, 1, 1, 1, 1, 1, 1, 1,
  18207. 1, 1, 1, 1, 1, 1, 1, 1,
  18208. 1, 1, 1, 1, 1, 1, 1, 1,
  18209. 1, 1, 1, 1, 1, 1, 1, 1,
  18210. 1, 1, 1, 1, 1, 1, 1, 1,
  18211. 1, 1, 1, 1, 1, 3026, 3026, 3026,
  18212. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18213. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18214. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18215. 3026, 3026, 3026, 3027, 3028, 3028, 3028, 3028,
  18216. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18217. 3029, 3028, 3028, 3030, 3031, 3031, 3031, 3032,
  18218. 1, 3033, 1, 3022, 1, 1, 1, 1,
  18219. 1, 1, 1, 1, 1, 1, 1, 1,
  18220. 1, 1, 1, 1, 1, 1, 1, 1,
  18221. 1, 1, 3022, 1, 3034, 1, 1, 1,
  18222. 3035, 1, 1, 1, 1, 1, 1, 1,
  18223. 1, 1, 1, 1, 1, 1, 1, 1,
  18224. 1, 1, 1, 3034, 2872, 2016, 2872, 2872,
  18225. 2872, 2872, 2872, 3036, 1, 2872, 2872, 3037,
  18226. 2872, 2019, 2872, 2872, 2872, 2872, 2872, 2872,
  18227. 2872, 2872, 2872, 2872, 2872, 1, 3038, 2021,
  18228. 2872, 1, 2872, 3039, 2872, 2872, 2872, 2872,
  18229. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18230. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18231. 2872, 2872, 2872, 2872, 2872, 2872, 1, 1,
  18232. 1, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18233. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18234. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18235. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18236. 2872, 2872, 1, 1, 1, 1, 1, 1,
  18237. 1, 1, 1, 1, 1, 1, 1, 1,
  18238. 1, 1, 1, 1, 1, 1, 1, 1,
  18239. 1, 1, 1, 1, 1, 1, 1, 1,
  18240. 1, 1, 1, 1, 1, 1, 1, 1,
  18241. 1, 1, 1, 1, 1, 1, 1, 1,
  18242. 1, 1, 1, 1, 1, 1, 1, 1,
  18243. 1, 1, 1, 1, 1, 1, 1, 1,
  18244. 1, 1, 1, 1, 1, 2875, 2875, 2875,
  18245. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18246. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18247. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18248. 2875, 2875, 2875, 2876, 2877, 2877, 2877, 2877,
  18249. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  18250. 2878, 2877, 2877, 2879, 2880, 2880, 2880, 2881,
  18251. 1, 3040, 1, 1, 1, 3041, 1, 1,
  18252. 1, 1, 1, 1, 1, 1, 1, 1,
  18253. 1, 1, 1, 1, 1, 1, 1, 1,
  18254. 3040, 2032, 2033, 2032, 2032, 2032, 2032, 2032,
  18255. 3042, 1, 2032, 2032, 3043, 2032, 2036, 2032,
  18256. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18257. 2032, 2032, 1, 3044, 2021, 2032, 1, 2032,
  18258. 3045, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18259. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18260. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18261. 2032, 2032, 2032, 1, 1, 1, 2032, 2032,
  18262. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18263. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18264. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18265. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 1,
  18266. 1, 1, 1, 1, 1, 1, 1, 1,
  18267. 1, 1, 1, 1, 1, 1, 1, 1,
  18268. 1, 1, 1, 1, 1, 1, 1, 1,
  18269. 1, 1, 1, 1, 1, 1, 1, 1,
  18270. 1, 1, 1, 1, 1, 1, 1, 1,
  18271. 1, 1, 1, 1, 1, 1, 1, 1,
  18272. 1, 1, 1, 1, 1, 1, 1, 1,
  18273. 1, 1, 1, 1, 1, 1, 1, 1,
  18274. 1, 1, 2039, 2039, 2039, 2039, 2039, 2039,
  18275. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18276. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18277. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18278. 2040, 2041, 2041, 2041, 2041, 2041, 2041, 2041,
  18279. 2041, 2041, 2041, 2041, 2041, 2042, 2041, 2041,
  18280. 2043, 2044, 2044, 2044, 2045, 1, 3046, 1,
  18281. 3047, 1, 1, 1, 1, 1, 1, 1,
  18282. 1, 1, 1, 1, 1, 1, 1, 1,
  18283. 1, 1, 1, 1, 1, 1, 1, 3047,
  18284. 1, 3048, 1, 1, 1, 3049, 1, 1,
  18285. 1, 1, 1, 1, 1, 1, 1, 1,
  18286. 1, 1, 1, 1, 1, 1, 1, 1,
  18287. 3048, 2078, 2079, 2078, 2078, 2078, 2078, 2078,
  18288. 3050, 1, 2078, 2078, 3051, 2078, 2617, 2078,
  18289. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18290. 2078, 2078, 1, 3052, 2082, 2078, 1, 2078,
  18291. 3053, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18292. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18293. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18294. 2078, 2078, 2078, 1, 1, 1, 2078, 2078,
  18295. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18296. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18297. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18298. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 1,
  18299. 1, 1, 1, 1, 1, 1, 1, 1,
  18300. 1, 1, 1, 1, 1, 1, 1, 1,
  18301. 1, 1, 1, 1, 1, 1, 1, 1,
  18302. 1, 1, 1, 1, 1, 1, 1, 1,
  18303. 1, 1, 1, 1, 1, 1, 1, 1,
  18304. 1, 1, 1, 1, 1, 1, 1, 1,
  18305. 1, 1, 1, 1, 1, 1, 1, 1,
  18306. 1, 1, 1, 1, 1, 1, 1, 1,
  18307. 1, 1, 2083, 2083, 2083, 2083, 2083, 2083,
  18308. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18309. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18310. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18311. 2084, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
  18312. 2085, 2085, 2085, 2085, 2085, 2086, 2085, 2085,
  18313. 2087, 2088, 2088, 2088, 2089, 1, 3022, 3022,
  18314. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18315. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18316. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18317. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18318. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18319. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18320. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18321. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18322. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18323. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18324. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18325. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18326. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18327. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18328. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18329. 3022, 3022, 3022, 3022, 3022, 3022, 1, 1,
  18330. 1, 1, 1, 1, 1, 1, 1, 1,
  18331. 1, 1, 1, 1, 1, 1, 1, 1,
  18332. 1, 1, 1, 1, 1, 1, 1, 1,
  18333. 1, 1, 1, 1, 1, 1, 1, 1,
  18334. 1, 1, 1, 1, 1, 1, 1, 1,
  18335. 1, 1, 1, 1, 1, 1, 1, 1,
  18336. 1, 1, 1, 1, 1, 1, 1, 1,
  18337. 1, 1, 1, 1, 1, 1, 1, 1,
  18338. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18339. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18340. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18341. 3026, 3026, 3026, 3026, 3026, 3026, 3027, 3028,
  18342. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18343. 3028, 3028, 3028, 3029, 3028, 3028, 3030, 3031,
  18344. 3031, 3031, 3032, 1, 3022, 3022, 3022, 3022,
  18345. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18346. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18347. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18348. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18349. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18350. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18351. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18352. 3022, 3022, 3022, 3022, 1, 3026, 3026, 3026,
  18353. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18354. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18355. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18356. 3026, 3026, 3026, 3026, 3026, 1, 3026, 3026,
  18357. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18358. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18359. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18360. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18361. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18362. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18363. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18364. 3026, 3026, 3026, 3026, 3026, 3026, 1, 3026,
  18365. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18366. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18367. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18368. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 1,
  18369. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18370. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18371. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18372. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18373. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18374. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18375. 1, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18376. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18377. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18378. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18379. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18380. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18381. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18382. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18383. 3028, 1, 3028, 3028, 3028, 3028, 3028, 3028,
  18384. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028,
  18385. 3028, 3028, 1, 3022, 3022, 3022, 3022, 3022,
  18386. 3022, 3022, 3022, 3054, 1, 3022, 3022, 3055,
  18387. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18388. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18389. 3022, 3022, 3054, 3022, 3056, 3022, 3022, 3022,
  18390. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18391. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18392. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18393. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18394. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18395. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18396. 3022, 3022, 3022, 3022, 3022, 3022, 3025, 3022,
  18397. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18398. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18399. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18400. 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022,
  18401. 3022, 3022, 1, 1, 1, 1, 1, 1,
  18402. 1, 1, 1, 1, 1, 1, 1, 1,
  18403. 1, 1, 1, 1, 1, 1, 1, 1,
  18404. 1, 1, 1, 1, 1, 1, 1, 1,
  18405. 1, 1, 1, 1, 1, 1, 1, 1,
  18406. 1, 1, 1, 1, 1, 1, 1, 1,
  18407. 1, 1, 1, 1, 1, 1, 1, 1,
  18408. 1, 1, 1, 1, 1, 1, 1, 1,
  18409. 1, 1, 1, 1, 3026, 3026, 3026, 3026,
  18410. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18411. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18412. 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
  18413. 3026, 3026, 3027, 3028, 3028, 3028, 3028, 3028,
  18414. 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3029,
  18415. 3028, 3028, 3030, 3031, 3031, 3031, 3032, 1,
  18416. 3057, 1, 3054, 1, 1, 1, 1, 1,
  18417. 1, 1, 1, 1, 1, 1, 1, 1,
  18418. 1, 1, 1, 1, 1, 1, 1, 1,
  18419. 1, 3054, 1, 3058, 1, 1, 1, 3059,
  18420. 1, 1, 1, 1, 1, 1, 1, 1,
  18421. 1, 1, 1, 1, 1, 1, 1, 1,
  18422. 1, 1, 3058, 2032, 2033, 2032, 2032, 2032,
  18423. 2032, 2032, 3060, 1, 2032, 2032, 3061, 2032,
  18424. 2036, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18425. 2032, 2032, 2032, 2032, 1, 3062, 2021, 2032,
  18426. 1, 2032, 3063, 2032, 2032, 2032, 2032, 2032,
  18427. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18428. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18429. 2032, 2032, 2032, 2032, 2032, 1, 1, 1,
  18430. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18431. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18432. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18433. 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032,
  18434. 2032, 1, 1, 1, 1, 1, 1, 1,
  18435. 1, 1, 1, 1, 1, 1, 1, 1,
  18436. 1, 1, 1, 1, 1, 1, 1, 1,
  18437. 1, 1, 1, 1, 1, 1, 1, 1,
  18438. 1, 1, 1, 1, 1, 1, 1, 1,
  18439. 1, 1, 1, 1, 1, 1, 1, 1,
  18440. 1, 1, 1, 1, 1, 1, 1, 1,
  18441. 1, 1, 1, 1, 1, 1, 1, 1,
  18442. 1, 1, 1, 1, 2039, 2039, 2039, 2039,
  18443. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18444. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18445. 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
  18446. 2039, 2039, 2040, 2041, 2041, 2041, 2041, 2041,
  18447. 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2042,
  18448. 2041, 2041, 2043, 2044, 2044, 2044, 2045, 1,
  18449. 3064, 1, 3065, 1, 1, 1, 1, 1,
  18450. 1, 1, 1, 1, 1, 1, 1, 1,
  18451. 1, 1, 1, 1, 1, 1, 1, 1,
  18452. 1, 3065, 1, 3066, 1, 1, 1, 3067,
  18453. 1, 1, 1, 1, 1, 1, 1, 1,
  18454. 1, 1, 1, 1, 1, 1, 1, 1,
  18455. 1, 1, 3066, 2078, 2079, 2078, 2078, 2078,
  18456. 2078, 2078, 3068, 1, 2078, 2078, 3069, 2078,
  18457. 2617, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18458. 2078, 2078, 2078, 2078, 1, 3070, 2082, 2078,
  18459. 1, 2078, 3071, 2078, 2078, 2078, 2078, 2078,
  18460. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18461. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18462. 2078, 2078, 2078, 2078, 2078, 1, 1, 1,
  18463. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18464. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18465. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18466. 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
  18467. 2078, 1, 1, 1, 1, 1, 1, 1,
  18468. 1, 1, 1, 1, 1, 1, 1, 1,
  18469. 1, 1, 1, 1, 1, 1, 1, 1,
  18470. 1, 1, 1, 1, 1, 1, 1, 1,
  18471. 1, 1, 1, 1, 1, 1, 1, 1,
  18472. 1, 1, 1, 1, 1, 1, 1, 1,
  18473. 1, 1, 1, 1, 1, 1, 1, 1,
  18474. 1, 1, 1, 1, 1, 1, 1, 1,
  18475. 1, 1, 1, 1, 2083, 2083, 2083, 2083,
  18476. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18477. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18478. 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
  18479. 2083, 2083, 2084, 2085, 2085, 2085, 2085, 2085,
  18480. 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2086,
  18481. 2085, 2085, 2087, 2088, 2088, 2088, 2089, 1,
  18482. 3072, 1, 1, 1, 3073, 1, 1, 1,
  18483. 1, 1, 1, 1, 1, 1, 1, 1,
  18484. 1, 1, 1, 1, 1, 1, 1, 3072,
  18485. 3074, 3075, 3074, 3074, 3074, 3074, 3074, 3076,
  18486. 1, 3074, 3074, 1973, 3074, 3077, 3074, 3074,
  18487. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18488. 3074, 1, 1975, 2100, 3074, 1, 3074, 1,
  18489. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18490. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18491. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18492. 3074, 3074, 1, 1, 1, 3074, 3074, 3074,
  18493. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18494. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18495. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  18496. 3074, 3074, 3074, 3074, 3074, 3074, 1, 1,
  18497. 1, 1, 1, 1, 1, 1, 1, 1,
  18498. 1, 1, 1, 1, 1, 1, 1, 1,
  18499. 1, 1, 1, 1, 1, 1, 1, 1,
  18500. 1, 1, 1, 1, 1, 1, 1, 1,
  18501. 1, 1, 1, 1, 1, 1, 1, 1,
  18502. 1, 1, 1, 1, 1, 1, 1, 1,
  18503. 1, 1, 1, 1, 1, 1, 1, 1,
  18504. 1, 1, 1, 1, 1, 1, 1, 1,
  18505. 1, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  18506. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  18507. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  18508. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3079,
  18509. 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
  18510. 3080, 3080, 3080, 3080, 3081, 3080, 3080, 3082,
  18511. 3083, 3083, 3083, 3084, 1, 3085, 3086, 3085,
  18512. 3085, 3085, 3085, 3085, 1, 1, 3085, 3085,
  18513. 1, 3085, 3087, 3085, 3085, 3085, 3085, 3085,
  18514. 3085, 3085, 3085, 3085, 3085, 3085, 1, 1,
  18515. 1, 3085, 1, 3085, 1, 3085, 3085, 3085,
  18516. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18517. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18518. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 1,
  18519. 1, 1, 3085, 3085, 3085, 3085, 3085, 3085,
  18520. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18521. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18522. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18523. 3085, 3085, 3085, 1, 1, 1, 1, 1,
  18524. 1, 1, 1, 1, 1, 1, 1, 1,
  18525. 1, 1, 1, 1, 1, 1, 1, 1,
  18526. 1, 1, 1, 1, 1, 1, 1, 1,
  18527. 1, 1, 1, 1, 1, 1, 1, 1,
  18528. 1, 1, 1, 1, 1, 1, 1, 1,
  18529. 1, 1, 1, 1, 1, 1, 1, 1,
  18530. 1, 1, 1, 1, 1, 1, 1, 1,
  18531. 1, 1, 1, 1, 1, 1, 3088, 3088,
  18532. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18533. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18534. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18535. 3088, 3088, 3088, 3088, 3089, 3090, 3090, 3090,
  18536. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18537. 3090, 3091, 3090, 3090, 3092, 3093, 3093, 3093,
  18538. 3094, 1, 3095, 1, 1, 1, 3096, 1,
  18539. 1, 1, 1, 1, 1, 1, 1, 1,
  18540. 1, 1, 1, 1, 1, 1, 1, 1,
  18541. 1, 3095, 3085, 3086, 3085, 3085, 3085, 3085,
  18542. 3085, 3097, 1, 3085, 3085, 2018, 3085, 3085,
  18543. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18544. 3085, 3085, 3085, 1, 2020, 1, 3085, 1,
  18545. 3085, 3098, 3085, 3085, 3085, 3085, 3085, 3085,
  18546. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18547. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18548. 3085, 3085, 3085, 3085, 1, 1, 1, 3085,
  18549. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18550. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18551. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18552. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18553. 1, 1, 1, 1, 1, 1, 1, 1,
  18554. 1, 1, 1, 1, 1, 1, 1, 1,
  18555. 1, 1, 1, 1, 1, 1, 1, 1,
  18556. 1, 1, 1, 1, 1, 1, 1, 1,
  18557. 1, 1, 1, 1, 1, 1, 1, 1,
  18558. 1, 1, 1, 1, 1, 1, 1, 1,
  18559. 1, 1, 1, 1, 1, 1, 1, 1,
  18560. 1, 1, 1, 1, 1, 1, 1, 1,
  18561. 1, 1, 1, 3088, 3088, 3088, 3088, 3088,
  18562. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18563. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18564. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18565. 3088, 3089, 3090, 3090, 3090, 3090, 3090, 3090,
  18566. 3090, 3090, 3090, 3090, 3090, 3090, 3091, 3090,
  18567. 3090, 3092, 3093, 3093, 3093, 3094, 1, 3099,
  18568. 1, 1, 1, 3100, 1, 1, 1, 1,
  18569. 1, 1, 1, 1, 1, 1, 1, 1,
  18570. 1, 1, 1, 1, 1, 1, 3099, 1,
  18571. 1, 1, 1, 1, 1, 1, 3101, 1,
  18572. 1, 1, 2035, 1, 1, 1, 1, 1,
  18573. 1, 1, 1, 1, 1, 1, 1, 1,
  18574. 1, 2037, 1, 1, 1, 1, 2896, 1,
  18575. 3102, 1, 3099, 1, 1, 1, 1, 1,
  18576. 1, 1, 1, 1, 1, 1, 1, 1,
  18577. 1, 1, 1, 1, 1, 1, 1, 1,
  18578. 1, 3099, 1, 3103, 1, 1, 1, 3104,
  18579. 1, 1, 1, 1, 1, 1, 1, 1,
  18580. 1, 1, 1, 1, 1, 1, 1, 1,
  18581. 1, 1, 3103, 1, 1, 1, 1, 1,
  18582. 1, 1, 3105, 1, 1, 1, 2616, 1,
  18583. 1, 1, 1, 1, 1, 1, 1, 1,
  18584. 1, 1, 1, 1, 1, 2618, 1, 1,
  18585. 1, 1, 2901, 1, 3106, 3106, 3106, 3106,
  18586. 3106, 3106, 3106, 3106, 3086, 1, 3106, 3106,
  18587. 3107, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18588. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18589. 3106, 3106, 3106, 3086, 3106, 1, 3106, 3106,
  18590. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18591. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18592. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18593. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18594. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18595. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18596. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3108,
  18597. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18598. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18599. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18600. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18601. 3106, 3106, 3106, 1, 1, 1, 1, 1,
  18602. 1, 1, 1, 1, 1, 1, 1, 1,
  18603. 1, 1, 1, 1, 1, 1, 1, 1,
  18604. 1, 1, 1, 1, 1, 1, 1, 1,
  18605. 1, 1, 1, 1, 1, 1, 1, 1,
  18606. 1, 1, 1, 1, 1, 1, 1, 1,
  18607. 1, 1, 1, 1, 1, 1, 1, 1,
  18608. 1, 1, 1, 1, 1, 1, 1, 1,
  18609. 1, 1, 1, 1, 1, 3109, 3109, 3109,
  18610. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18611. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18612. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18613. 3109, 3109, 3109, 3110, 3111, 3111, 3111, 3111,
  18614. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18615. 3112, 3111, 3111, 3113, 3114, 3114, 3114, 3115,
  18616. 1, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18617. 3106, 3106, 1, 3106, 3106, 3116, 3106, 3106,
  18618. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18619. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18620. 3106, 3106, 3085, 3106, 3106, 3106, 3106, 3106,
  18621. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18622. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18623. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18624. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18625. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18626. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18627. 3106, 3106, 3106, 3106, 3108, 3106, 3106, 3106,
  18628. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18629. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18630. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18631. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18632. 1, 1, 1, 1, 1, 1, 1, 1,
  18633. 1, 1, 1, 1, 1, 1, 1, 1,
  18634. 1, 1, 1, 1, 1, 1, 1, 1,
  18635. 1, 1, 1, 1, 1, 1, 1, 1,
  18636. 1, 1, 1, 1, 1, 1, 1, 1,
  18637. 1, 1, 1, 1, 1, 1, 1, 1,
  18638. 1, 1, 1, 1, 1, 1, 1, 1,
  18639. 1, 1, 1, 1, 1, 1, 1, 1,
  18640. 1, 1, 3109, 3109, 3109, 3109, 3109, 3109,
  18641. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18642. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18643. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18644. 3110, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18645. 3111, 3111, 3111, 3111, 3111, 3112, 3111, 3111,
  18646. 3113, 3114, 3114, 3114, 3115, 1, 3117, 1,
  18647. 3106, 1, 1, 1, 1, 1, 1, 1,
  18648. 1, 1, 1, 1, 1, 1, 1, 1,
  18649. 1, 1, 1, 1, 1, 1, 1, 3106,
  18650. 1, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18651. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18652. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18653. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18654. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18655. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18656. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18657. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18658. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18659. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18660. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18661. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18662. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18663. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18664. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18665. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18666. 3106, 1, 1, 1, 1, 1, 1, 1,
  18667. 1, 1, 1, 1, 1, 1, 1, 1,
  18668. 1, 1, 1, 1, 1, 1, 1, 1,
  18669. 1, 1, 1, 1, 1, 1, 1, 1,
  18670. 1, 1, 1, 1, 1, 1, 1, 1,
  18671. 1, 1, 1, 1, 1, 1, 1, 1,
  18672. 1, 1, 1, 1, 1, 1, 1, 1,
  18673. 1, 1, 1, 1, 1, 1, 1, 1,
  18674. 1, 1, 1, 3109, 3109, 3109, 3109, 3109,
  18675. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18676. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18677. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18678. 3109, 3110, 3111, 3111, 3111, 3111, 3111, 3111,
  18679. 3111, 3111, 3111, 3111, 3111, 3111, 3112, 3111,
  18680. 3111, 3113, 3114, 3114, 3114, 3115, 1, 3106,
  18681. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18682. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18683. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18684. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18685. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18686. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18687. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 3106,
  18688. 3106, 3106, 3106, 3106, 3106, 3106, 3106, 1,
  18689. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18690. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18691. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18692. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18693. 1, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18694. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18695. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18696. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18697. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18698. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18699. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18700. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18701. 3109, 1, 3109, 3109, 3109, 3109, 3109, 3109,
  18702. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18703. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18704. 3109, 3109, 3109, 3109, 3109, 3109, 3109, 3109,
  18705. 3109, 3109, 1, 3111, 3111, 3111, 3111, 3111,
  18706. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18707. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18708. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18709. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18710. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18711. 3111, 3111, 3111, 1, 3111, 3111, 3111, 3111,
  18712. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18713. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18714. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18715. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18716. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18717. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18718. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18719. 3111, 3111, 3111, 3111, 1, 3111, 3111, 3111,
  18720. 3111, 3111, 3111, 3111, 3111, 3111, 3111, 3111,
  18721. 3111, 3111, 3111, 3111, 3111, 1, 3118, 1,
  18722. 3086, 1, 1, 1, 1, 1, 1, 1,
  18723. 1, 1, 1, 1, 1, 1, 1, 1,
  18724. 1, 1, 1, 1, 1, 1, 1, 3086,
  18725. 1, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18726. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18727. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18728. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18729. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18730. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18731. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18732. 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
  18733. 3085, 1, 3088, 3088, 3088, 3088, 3088, 3088,
  18734. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18735. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18736. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18737. 3088, 3088, 1, 3088, 3088, 3088, 3088, 3088,
  18738. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18739. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18740. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18741. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18742. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18743. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18744. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18745. 3088, 3088, 3088, 1, 3088, 3088, 3088, 3088,
  18746. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18747. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18748. 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
  18749. 3088, 3088, 3088, 3088, 1, 3090, 3090, 3090,
  18750. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18751. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18752. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18753. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18754. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18755. 3090, 3090, 3090, 3090, 3090, 1, 3090, 3090,
  18756. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18757. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18758. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18759. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18760. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18761. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18762. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18763. 3090, 3090, 3090, 3090, 3090, 3090, 1, 3090,
  18764. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 3090,
  18765. 3090, 3090, 3090, 3090, 3090, 3090, 3090, 1,
  18766. 2090, 1, 1, 1, 2091, 1, 1, 1,
  18767. 1, 1, 1, 1, 1, 1, 1, 1,
  18768. 1, 1, 1, 1, 1, 1, 1, 2090,
  18769. 2872, 2016, 2872, 2872, 2872, 2872, 2872, 2092,
  18770. 1, 2872, 2872, 1, 2872, 3119, 2872, 2872,
  18771. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18772. 2872, 1, 1, 2021, 2872, 1, 2872, 2051,
  18773. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18774. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18775. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18776. 2872, 2872, 1, 1, 1, 2872, 2872, 2872,
  18777. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18778. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18779. 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
  18780. 2872, 2872, 2872, 2872, 2872, 2872, 1, 1,
  18781. 1, 1, 1, 1, 1, 1, 1, 1,
  18782. 1, 1, 1, 1, 1, 1, 1, 1,
  18783. 1, 1, 1, 1, 1, 1, 1, 1,
  18784. 1, 1, 1, 1, 1, 1, 1, 1,
  18785. 1, 1, 1, 1, 1, 1, 1, 1,
  18786. 1, 1, 1, 1, 1, 1, 1, 1,
  18787. 1, 1, 1, 1, 1, 1, 1, 1,
  18788. 1, 1, 1, 1, 1, 1, 1, 1,
  18789. 1, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18790. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18791. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2875,
  18792. 2875, 2875, 2875, 2875, 2875, 2875, 2875, 2876,
  18793. 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
  18794. 2877, 2877, 2877, 2877, 2878, 2877, 2877, 2879,
  18795. 2880, 2880, 2880, 2881, 1, 3120, 3121, 3120,
  18796. 3120, 3120, 3120, 3120, 1, 1, 3120, 3120,
  18797. 1, 3120, 3122, 3120, 3120, 3120, 3120, 3120,
  18798. 3120, 3120, 3120, 3120, 3120, 3120, 1, 1,
  18799. 1, 3120, 1, 3120, 1, 3120, 3120, 3120,
  18800. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18801. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18802. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 1,
  18803. 1, 1, 3120, 3120, 3120, 3120, 3120, 3120,
  18804. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18805. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18806. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18807. 3120, 3120, 3120, 1, 1, 1, 1, 1,
  18808. 1, 1, 1, 1, 1, 1, 1, 1,
  18809. 1, 1, 1, 1, 1, 1, 1, 1,
  18810. 1, 1, 1, 1, 1, 1, 1, 1,
  18811. 1, 1, 1, 1, 1, 1, 1, 1,
  18812. 1, 1, 1, 1, 1, 1, 1, 1,
  18813. 1, 1, 1, 1, 1, 1, 1, 1,
  18814. 1, 1, 1, 1, 1, 1, 1, 1,
  18815. 1, 1, 1, 1, 1, 1, 3123, 3123,
  18816. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18817. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18818. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18819. 3123, 3123, 3123, 3123, 3124, 3125, 3125, 3125,
  18820. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  18821. 3125, 3126, 3125, 3125, 3127, 3128, 3128, 3128,
  18822. 3129, 1, 3130, 1, 1, 1, 3131, 1,
  18823. 1, 1, 1, 1, 1, 1, 1, 1,
  18824. 1, 1, 1, 1, 1, 1, 1, 1,
  18825. 1, 3130, 3120, 3121, 3120, 3120, 3120, 3120,
  18826. 3120, 3132, 1, 3120, 3120, 213, 3120, 3120,
  18827. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18828. 3120, 3120, 3120, 1, 215, 1, 3120, 1,
  18829. 3120, 3133, 3120, 3120, 3120, 3120, 3120, 3120,
  18830. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18831. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18832. 3120, 3120, 3120, 3120, 1, 1, 1, 3120,
  18833. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18834. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18835. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18836. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  18837. 1, 1, 1, 1, 1, 1, 1, 1,
  18838. 1, 1, 1, 1, 1, 1, 1, 1,
  18839. 1, 1, 1, 1, 1, 1, 1, 1,
  18840. 1, 1, 1, 1, 1, 1, 1, 1,
  18841. 1, 1, 1, 1, 1, 1, 1, 1,
  18842. 1, 1, 1, 1, 1, 1, 1, 1,
  18843. 1, 1, 1, 1, 1, 1, 1, 1,
  18844. 1, 1, 1, 1, 1, 1, 1, 1,
  18845. 1, 1, 1, 3123, 3123, 3123, 3123, 3123,
  18846. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18847. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18848. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  18849. 3123, 3124, 3125, 3125, 3125, 3125, 3125, 3125,
  18850. 3125, 3125, 3125, 3125, 3125, 3125, 3126, 3125,
  18851. 3125, 3127, 3128, 3128, 3128, 3129, 1, 3134,
  18852. 1, 1, 1, 3135, 1, 1, 1, 1,
  18853. 1, 1, 1, 1, 1, 1, 1, 1,
  18854. 1, 1, 1, 1, 1, 1, 3134, 1,
  18855. 1, 1, 1, 1, 1, 1, 3136, 1,
  18856. 1, 1, 230, 1, 1, 1, 1, 1,
  18857. 1, 1, 1, 1, 1, 1, 1, 1,
  18858. 1, 232, 1, 1, 1, 1, 1838, 1,
  18859. 3137, 1, 3134, 1, 1, 1, 1, 1,
  18860. 1, 1, 1, 1, 1, 1, 1, 1,
  18861. 1, 1, 1, 1, 1, 1, 1, 1,
  18862. 1, 3134, 1, 3138, 1, 1, 1, 3139,
  18863. 1, 1, 1, 1, 1, 1, 1, 1,
  18864. 1, 1, 1, 1, 1, 1, 1, 1,
  18865. 1, 1, 3138, 1, 1, 1, 1, 1,
  18866. 1, 1, 3140, 1, 1, 1, 1804, 1,
  18867. 1, 1, 1, 1, 1, 1, 1, 1,
  18868. 1, 1, 1, 1, 1, 947, 1, 1,
  18869. 1, 1, 1843, 1, 3141, 3141, 3141, 3141,
  18870. 3141, 3141, 3141, 3141, 3121, 1, 3141, 3141,
  18871. 3142, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18872. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18873. 3141, 3141, 3141, 3121, 3141, 1, 3141, 3141,
  18874. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18875. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18876. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18877. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18878. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18879. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18880. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3143,
  18881. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18882. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18883. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18884. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18885. 3141, 3141, 3141, 1, 1, 1, 1, 1,
  18886. 1, 1, 1, 1, 1, 1, 1, 1,
  18887. 1, 1, 1, 1, 1, 1, 1, 1,
  18888. 1, 1, 1, 1, 1, 1, 1, 1,
  18889. 1, 1, 1, 1, 1, 1, 1, 1,
  18890. 1, 1, 1, 1, 1, 1, 1, 1,
  18891. 1, 1, 1, 1, 1, 1, 1, 1,
  18892. 1, 1, 1, 1, 1, 1, 1, 1,
  18893. 1, 1, 1, 1, 1, 3144, 3144, 3144,
  18894. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18895. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18896. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18897. 3144, 3144, 3144, 3145, 3146, 3146, 3146, 3146,
  18898. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18899. 3147, 3146, 3146, 3148, 3149, 3149, 3149, 3150,
  18900. 1, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18901. 3141, 3141, 1, 3141, 3141, 3151, 3141, 3141,
  18902. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18903. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18904. 3141, 3141, 3120, 3141, 3141, 3141, 3141, 3141,
  18905. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18906. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18907. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18908. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18909. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18910. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18911. 3141, 3141, 3141, 3141, 3143, 3141, 3141, 3141,
  18912. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18913. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18914. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18915. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18916. 1, 1, 1, 1, 1, 1, 1, 1,
  18917. 1, 1, 1, 1, 1, 1, 1, 1,
  18918. 1, 1, 1, 1, 1, 1, 1, 1,
  18919. 1, 1, 1, 1, 1, 1, 1, 1,
  18920. 1, 1, 1, 1, 1, 1, 1, 1,
  18921. 1, 1, 1, 1, 1, 1, 1, 1,
  18922. 1, 1, 1, 1, 1, 1, 1, 1,
  18923. 1, 1, 1, 1, 1, 1, 1, 1,
  18924. 1, 1, 3144, 3144, 3144, 3144, 3144, 3144,
  18925. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18926. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18927. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18928. 3145, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18929. 3146, 3146, 3146, 3146, 3146, 3147, 3146, 3146,
  18930. 3148, 3149, 3149, 3149, 3150, 1, 3152, 1,
  18931. 3141, 1, 1, 1, 1, 1, 1, 1,
  18932. 1, 1, 1, 1, 1, 1, 1, 1,
  18933. 1, 1, 1, 1, 1, 1, 1, 3141,
  18934. 1, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18935. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18936. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18937. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18938. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18939. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18940. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18941. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18942. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18943. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18944. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18945. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18946. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18947. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18948. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18949. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18950. 3141, 1, 1, 1, 1, 1, 1, 1,
  18951. 1, 1, 1, 1, 1, 1, 1, 1,
  18952. 1, 1, 1, 1, 1, 1, 1, 1,
  18953. 1, 1, 1, 1, 1, 1, 1, 1,
  18954. 1, 1, 1, 1, 1, 1, 1, 1,
  18955. 1, 1, 1, 1, 1, 1, 1, 1,
  18956. 1, 1, 1, 1, 1, 1, 1, 1,
  18957. 1, 1, 1, 1, 1, 1, 1, 1,
  18958. 1, 1, 1, 3144, 3144, 3144, 3144, 3144,
  18959. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18960. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18961. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18962. 3144, 3145, 3146, 3146, 3146, 3146, 3146, 3146,
  18963. 3146, 3146, 3146, 3146, 3146, 3146, 3147, 3146,
  18964. 3146, 3148, 3149, 3149, 3149, 3150, 1, 3141,
  18965. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18966. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18967. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18968. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18969. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18970. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18971. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
  18972. 3141, 3141, 3141, 3141, 3141, 3141, 3141, 1,
  18973. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18974. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18975. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18976. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18977. 1, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18978. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18979. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18980. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18981. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18982. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18983. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18984. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18985. 3144, 1, 3144, 3144, 3144, 3144, 3144, 3144,
  18986. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18987. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18988. 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
  18989. 3144, 3144, 1, 3146, 3146, 3146, 3146, 3146,
  18990. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18991. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18992. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18993. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18994. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18995. 3146, 3146, 3146, 1, 3146, 3146, 3146, 3146,
  18996. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18997. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18998. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  18999. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  19000. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  19001. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  19002. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  19003. 3146, 3146, 3146, 3146, 1, 3146, 3146, 3146,
  19004. 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
  19005. 3146, 3146, 3146, 3146, 3146, 1, 3153, 1,
  19006. 3121, 1, 1, 1, 1, 1, 1, 1,
  19007. 1, 1, 1, 1, 1, 1, 1, 1,
  19008. 1, 1, 1, 1, 1, 1, 1, 3121,
  19009. 1, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19010. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19011. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19012. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19013. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19014. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19015. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19016. 3120, 3120, 3120, 3120, 3120, 3120, 3120, 3120,
  19017. 3120, 1, 3123, 3123, 3123, 3123, 3123, 3123,
  19018. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19019. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19020. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19021. 3123, 3123, 1, 3123, 3123, 3123, 3123, 3123,
  19022. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19023. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19024. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19025. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19026. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19027. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19028. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19029. 3123, 3123, 3123, 1, 3123, 3123, 3123, 3123,
  19030. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19031. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19032. 3123, 3123, 3123, 3123, 3123, 3123, 3123, 3123,
  19033. 3123, 3123, 3123, 3123, 1, 3125, 3125, 3125,
  19034. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19035. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19036. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19037. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19038. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19039. 3125, 3125, 3125, 3125, 3125, 1, 3125, 3125,
  19040. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19041. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19042. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19043. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19044. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19045. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19046. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19047. 3125, 3125, 3125, 3125, 3125, 3125, 1, 3125,
  19048. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 3125,
  19049. 3125, 3125, 3125, 3125, 3125, 3125, 3125, 1,
  19050. 285, 1, 1, 1, 286, 1, 1, 1,
  19051. 1, 1, 1, 1, 1, 1, 1, 1,
  19052. 1, 1, 1, 1, 1, 1, 1, 285,
  19053. 409, 211, 409, 409, 409, 409, 409, 287,
  19054. 1, 409, 409, 1, 409, 3154, 409, 409,
  19055. 409, 409, 409, 409, 409, 409, 409, 409,
  19056. 409, 1, 1, 216, 409, 1, 409, 246,
  19057. 409, 409, 409, 409, 409, 409, 409, 409,
  19058. 409, 409, 409, 409, 409, 409, 409, 409,
  19059. 409, 409, 409, 409, 409, 409, 409, 409,
  19060. 409, 409, 1, 1, 1, 409, 409, 409,
  19061. 409, 409, 409, 409, 409, 409, 409, 409,
  19062. 409, 409, 409, 409, 409, 409, 409, 409,
  19063. 409, 409, 409, 409, 409, 409, 409, 409,
  19064. 409, 409, 409, 409, 409, 409, 1, 1,
  19065. 1, 1, 1, 1, 1, 1, 1, 1,
  19066. 1, 1, 1, 1, 1, 1, 1, 1,
  19067. 1, 1, 1, 1, 1, 1, 1, 1,
  19068. 1, 1, 1, 1, 1, 1, 1, 1,
  19069. 1, 1, 1, 1, 1, 1, 1, 1,
  19070. 1, 1, 1, 1, 1, 1, 1, 1,
  19071. 1, 1, 1, 1, 1, 1, 1, 1,
  19072. 1, 1, 1, 1, 1, 1, 1, 1,
  19073. 1, 414, 414, 414, 414, 414, 414, 414,
  19074. 414, 414, 414, 414, 414, 414, 414, 414,
  19075. 414, 414, 414, 414, 414, 414, 414, 414,
  19076. 414, 414, 414, 414, 414, 414, 414, 415,
  19077. 416, 416, 416, 416, 416, 416, 416, 416,
  19078. 416, 416, 416, 416, 417, 416, 416, 418,
  19079. 419, 419, 419, 420, 1, 3155, 1, 1,
  19080. 1, 3156, 1, 1, 1, 1, 1, 1,
  19081. 1, 1, 1, 1, 1, 1, 1, 1,
  19082. 1, 1, 1, 1, 3155, 3157, 3158, 3157,
  19083. 3157, 3157, 3157, 3157, 3159, 1, 3157, 3157,
  19084. 1, 3157, 3160, 3157, 3157, 3157, 3157, 3157,
  19085. 3157, 3157, 3157, 3157, 3157, 3157, 1, 1,
  19086. 1, 3157, 1, 3157, 1, 3157, 3157, 3157,
  19087. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,
  19088. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,
  19089. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3161,
  19090. 1, 1, 3157, 3157, 3157, 3157, 3157, 3157,
  19091. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,
  19092. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,
  19093. 3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,
  19094. 3157, 3157, 3157, 1, 1, 1, 1, 1,
  19095. 1, 1, 1, 1, 1, 1, 1, 1,
  19096. 1, 1, 1, 1, 1, 1, 1, 1,
  19097. 1, 1, 1, 1, 1, 1, 1, 1,
  19098. 1, 1, 1, 1, 1, 1, 1, 1,
  19099. 1, 1, 1, 1, 1, 1, 1, 1,
  19100. 1, 1, 1, 1, 1, 1, 1, 1,
  19101. 1, 1, 1, 1, 1, 1, 1, 1,
  19102. 1, 1, 1, 1, 1, 1, 3162, 3162,
  19103. 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
  19104. 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
  19105. 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
  19106. 3162, 3162, 3162, 3162, 3163, 3164, 3164, 3164,
  19107. 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164,
  19108. 3164, 3165, 3164, 3164, 3166, 3167, 3167, 3167,
  19109. 3168, 1, 3169, 1, 1, 1, 3170, 1,
  19110. 1, 1, 1, 1, 1, 1, 1, 1,
  19111. 1, 1, 1, 1, 1, 1, 1, 1,
  19112. 1, 3169, 3171, 3172, 3171, 3171, 3171, 3171,
  19113. 3171, 3173, 1, 3171, 3171, 1, 3171, 3174,
  19114. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19115. 3171, 3171, 3171, 1, 1, 1, 3171, 1,
  19116. 3171, 1, 3171, 3171, 3171, 3171, 3171, 3171,
  19117. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19118. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19119. 3171, 3171, 3171, 3171, 3175, 1, 1, 3171,
  19120. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19121. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19122. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19123. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19124. 1, 1, 1, 1, 1, 1, 1, 1,
  19125. 1, 1, 1, 1, 1, 1, 1, 1,
  19126. 1, 1, 1, 1, 1, 1, 1, 1,
  19127. 1, 1, 1, 1, 1, 1, 1, 1,
  19128. 1, 1, 1, 1, 1, 1, 1, 1,
  19129. 1, 1, 1, 1, 1, 1, 1, 1,
  19130. 1, 1, 1, 1, 1, 1, 1, 1,
  19131. 1, 1, 1, 1, 1, 1, 1, 1,
  19132. 1, 1, 1, 3176, 3176, 3176, 3176, 3176,
  19133. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19134. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19135. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19136. 3176, 3177, 3178, 3178, 3178, 3178, 3178, 3178,
  19137. 3178, 3178, 3178, 3178, 3178, 3178, 3179, 3178,
  19138. 3178, 3180, 3181, 3181, 3181, 3182, 1, 3183,
  19139. 1, 3169, 1, 1, 1, 1, 1, 1,
  19140. 1, 1, 1, 1, 1, 1, 1, 1,
  19141. 1, 1, 1, 1, 1, 1, 1, 1,
  19142. 3169, 1, 3184, 1, 1, 1, 3185, 1,
  19143. 1, 1, 1, 1, 1, 1, 1, 1,
  19144. 1, 1, 1, 1, 1, 1, 1, 1,
  19145. 1, 3184, 3171, 3172, 3171, 3171, 3171, 3171,
  19146. 3171, 3186, 1, 3171, 3171, 1, 3171, 3187,
  19147. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19148. 3171, 3171, 3171, 1, 1, 1, 3171, 3188,
  19149. 3171, 1, 3171, 3171, 3171, 3171, 3171, 3171,
  19150. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19151. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19152. 3171, 3171, 3171, 3171, 1, 1, 1, 3171,
  19153. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19154. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19155. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19156. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19157. 1, 1, 1, 1, 1, 1, 1, 1,
  19158. 1, 1, 1, 1, 1, 1, 1, 1,
  19159. 1, 1, 1, 1, 1, 1, 1, 1,
  19160. 1, 1, 1, 1, 1, 1, 1, 1,
  19161. 1, 1, 1, 1, 1, 1, 1, 1,
  19162. 1, 1, 1, 1, 1, 1, 1, 1,
  19163. 1, 1, 1, 1, 1, 1, 1, 1,
  19164. 1, 1, 1, 1, 1, 1, 1, 1,
  19165. 1, 1, 1, 3176, 3176, 3176, 3176, 3176,
  19166. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19167. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19168. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19169. 3176, 3177, 3178, 3178, 3178, 3178, 3178, 3178,
  19170. 3178, 3178, 3178, 3178, 3178, 3178, 3179, 3178,
  19171. 3178, 3180, 3181, 3181, 3181, 3182, 1, 3184,
  19172. 1, 1, 1, 3185, 1, 1, 1, 1,
  19173. 1, 1, 1, 1, 1, 1, 1, 1,
  19174. 1, 1, 1, 1, 1, 1, 3184, 1,
  19175. 1, 1, 1, 1, 1, 1, 3186, 1,
  19176. 1, 1, 1, 1, 3189, 1, 1, 1,
  19177. 1, 1, 1, 1, 1, 1, 1, 1,
  19178. 1, 1, 1, 1, 3188, 1, 3190, 1,
  19179. 3184, 1, 1, 1, 1, 1, 1, 1,
  19180. 1, 1, 1, 1, 1, 1, 1, 1,
  19181. 1, 1, 1, 1, 1, 1, 1, 3184,
  19182. 1, 3191, 1, 1, 1, 3192, 1, 1,
  19183. 1, 1, 1, 1, 1, 1, 1, 1,
  19184. 1, 1, 1, 1, 1, 1, 1, 1,
  19185. 3191, 1, 1, 1, 1, 1, 1, 1,
  19186. 3193, 1, 1, 1, 1, 1, 3194, 1,
  19187. 1, 1, 1, 1, 1, 1, 1, 1,
  19188. 1, 1, 1, 1, 1, 1, 3195, 1,
  19189. 3189, 1, 1, 1, 3196, 1, 1, 1,
  19190. 1, 1, 1, 1, 1, 1, 1, 1,
  19191. 1, 1, 1, 1, 1, 1, 1, 3189,
  19192. 3197, 1, 3197, 3197, 3197, 3197, 3197, 3198,
  19193. 1, 3197, 3197, 1, 3197, 1, 3197, 3197,
  19194. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19195. 3197, 1, 1, 1, 3197, 1, 3197, 1,
  19196. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19197. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19198. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19199. 3197, 3197, 1, 1, 1, 3197, 3197, 3197,
  19200. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19201. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19202. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19203. 3197, 3197, 3197, 3197, 3197, 3197, 1, 1,
  19204. 1, 1, 1, 1, 1, 1, 1, 1,
  19205. 1, 1, 1, 1, 1, 1, 1, 1,
  19206. 1, 1, 1, 1, 1, 1, 1, 1,
  19207. 1, 1, 1, 1, 1, 1, 1, 1,
  19208. 1, 1, 1, 1, 1, 1, 1, 1,
  19209. 1, 1, 1, 1, 1, 1, 1, 1,
  19210. 1, 1, 1, 1, 1, 1, 1, 1,
  19211. 1, 1, 1, 1, 1, 1, 1, 1,
  19212. 1, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19213. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19214. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19215. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3200,
  19216. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19217. 3201, 3201, 3201, 3201, 3202, 3201, 3201, 3203,
  19218. 3204, 3204, 3204, 3205, 1, 3206, 1, 3189,
  19219. 1, 1, 1, 1, 1, 1, 1, 1,
  19220. 1, 1, 1, 1, 1, 1, 1, 1,
  19221. 1, 1, 1, 1, 1, 1, 3189, 1,
  19222. 3184, 1, 1, 1, 3185, 1, 1, 1,
  19223. 1, 1, 1, 1, 1, 1, 1, 1,
  19224. 1, 1, 1, 1, 1, 1, 1, 3184,
  19225. 3197, 1, 3197, 3197, 3197, 3197, 3197, 3186,
  19226. 1, 3197, 3197, 1, 3197, 3189, 3197, 3197,
  19227. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19228. 3197, 1, 1, 1, 3197, 3188, 3197, 1,
  19229. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19230. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19231. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19232. 3197, 3197, 1, 1, 1, 3197, 3197, 3197,
  19233. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19234. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19235. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19236. 3197, 3197, 3197, 3197, 3197, 3197, 1, 1,
  19237. 1, 1, 1, 1, 1, 1, 1, 1,
  19238. 1, 1, 1, 1, 1, 1, 1, 1,
  19239. 1, 1, 1, 1, 1, 1, 1, 1,
  19240. 1, 1, 1, 1, 1, 1, 1, 1,
  19241. 1, 1, 1, 1, 1, 1, 1, 1,
  19242. 1, 1, 1, 1, 1, 1, 1, 1,
  19243. 1, 1, 1, 1, 1, 1, 1, 1,
  19244. 1, 1, 1, 1, 1, 1, 1, 1,
  19245. 1, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19246. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19247. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19248. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3200,
  19249. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19250. 3201, 3201, 3201, 3201, 3202, 3201, 3201, 3203,
  19251. 3204, 3204, 3204, 3205, 1, 3197, 3197, 3197,
  19252. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19253. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19254. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19255. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19256. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19257. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19258. 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
  19259. 3197, 3197, 3197, 3197, 3197, 1, 3199, 3199,
  19260. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19261. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19262. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19263. 3199, 3199, 3199, 3199, 3199, 3199, 1, 3199,
  19264. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19265. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19266. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19267. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19268. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19269. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19270. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19271. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 1,
  19272. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19273. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19274. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19275. 3199, 3199, 3199, 3199, 3199, 3199, 3199, 3199,
  19276. 1, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19277. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19278. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19279. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19280. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19281. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19282. 3201, 1, 3201, 3201, 3201, 3201, 3201, 3201,
  19283. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19284. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19285. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19286. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19287. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19288. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19289. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19290. 3201, 3201, 1, 3201, 3201, 3201, 3201, 3201,
  19291. 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
  19292. 3201, 3201, 3201, 1, 3194, 1, 1, 1,
  19293. 3207, 1, 1, 1, 1, 1, 1, 1,
  19294. 1, 1, 1, 1, 1, 1, 1, 1,
  19295. 1, 1, 1, 3194, 3208, 1, 3208, 3208,
  19296. 3208, 3208, 3208, 3209, 1, 3208, 3208, 1,
  19297. 3208, 1, 3208, 3208, 3208, 3208, 3208, 3208,
  19298. 3208, 3208, 3208, 3208, 3208, 1, 1, 1,
  19299. 3208, 1, 3208, 1, 3208, 3208, 3208, 3208,
  19300. 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19301. 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19302. 3208, 3208, 3208, 3208, 3208, 3208, 1, 1,
  19303. 1, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19304. 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19305. 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19306. 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
  19307. 3208, 3208, 1, 1, 1, 1, 1, 1,
  19308. 1, 1, 1, 1, 1, 1, 1, 1,
  19309. 1, 1, 1, 1, 1, 1, 1, 1,
  19310. 1, 1, 1, 1, 1, 1, 1, 1,
  19311. 1, 1, 1, 1, 1, 1, 1, 1,
  19312. 1, 1, 1, 1, 1, 1, 1, 1,
  19313. 1, 1, 1, 1, 1, 1, 1, 1,
  19314. 1, 1, 1, 1, 1, 1, 1, 1,
  19315. 1, 1, 1, 1, 1, 3210, 3210, 3210,
  19316. 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
  19317. 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
  19318. 3210, 3210, 3210, 3210, 3210, 3210, 3210, 3210,
  19319. 3210, 3210, 3210, 3211, 3212, 3212, 3212, 3212,
  19320. 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
  19321. 3213, 3212, 3212, 3214, 3215, 3215, 3215, 3216,
  19322. 1, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19323. 3217, 3172, 1, 3217, 3217, 3218, 3217, 3217,
  19324. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19325. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19326. 3172, 3217, 1, 3217, 3217, 3217, 3217, 3217,
  19327. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19328. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19329. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19330. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19331. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19332. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19333. 3217, 3217, 3217, 3217, 3219, 3217, 3217, 3217,
  19334. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19335. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19336. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19337. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19338. 1, 1, 1, 1, 1, 1, 1, 1,
  19339. 1, 1, 1, 1, 1, 1, 1, 1,
  19340. 1, 1, 1, 1, 1, 1, 1, 1,
  19341. 1, 1, 1, 1, 1, 1, 1, 1,
  19342. 1, 1, 1, 1, 1, 1, 1, 1,
  19343. 1, 1, 1, 1, 1, 1, 1, 1,
  19344. 1, 1, 1, 1, 1, 1, 1, 1,
  19345. 1, 1, 1, 1, 1, 1, 1, 1,
  19346. 1, 1, 3220, 3220, 3220, 3220, 3220, 3220,
  19347. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19348. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19349. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19350. 3221, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19351. 3222, 3222, 3222, 3222, 3222, 3223, 3222, 3222,
  19352. 3224, 3225, 3225, 3225, 3226, 1, 3217, 3217,
  19353. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 1,
  19354. 3217, 3217, 3227, 3217, 3217, 3217, 3217, 3217,
  19355. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19356. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3228,
  19357. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19358. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19359. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19360. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19361. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19362. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19363. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19364. 3217, 3219, 3217, 3217, 3217, 3217, 3217, 3217,
  19365. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19366. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19367. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19368. 3217, 3217, 3217, 3217, 3217, 1, 1, 1,
  19369. 1, 1, 1, 1, 1, 1, 1, 1,
  19370. 1, 1, 1, 1, 1, 1, 1, 1,
  19371. 1, 1, 1, 1, 1, 1, 1, 1,
  19372. 1, 1, 1, 1, 1, 1, 1, 1,
  19373. 1, 1, 1, 1, 1, 1, 1, 1,
  19374. 1, 1, 1, 1, 1, 1, 1, 1,
  19375. 1, 1, 1, 1, 1, 1, 1, 1,
  19376. 1, 1, 1, 1, 1, 1, 1, 3220,
  19377. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19378. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19379. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19380. 3220, 3220, 3220, 3220, 3220, 3221, 3222, 3222,
  19381. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19382. 3222, 3222, 3223, 3222, 3222, 3224, 3225, 3225,
  19383. 3225, 3226, 1, 3229, 1, 3217, 1, 1,
  19384. 1, 1, 1, 1, 1, 1, 1, 1,
  19385. 1, 1, 1, 1, 1, 1, 1, 1,
  19386. 1, 1, 1, 1, 3217, 1, 3230, 1,
  19387. 1, 1, 3231, 1, 1, 1, 1, 1,
  19388. 1, 1, 1, 1, 1, 1, 1, 1,
  19389. 1, 1, 1, 1, 1, 3230, 3228, 3172,
  19390. 3228, 3228, 3228, 3228, 3228, 3232, 1, 3228,
  19391. 3228, 1, 3228, 3174, 3228, 3228, 3228, 3228,
  19392. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 1,
  19393. 1, 1, 3228, 3188, 3228, 1, 3228, 3228,
  19394. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19395. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19396. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19397. 1, 1, 1, 3228, 3228, 3228, 3228, 3228,
  19398. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19399. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19400. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19401. 3228, 3228, 3228, 3228, 1, 1, 1, 1,
  19402. 1, 1, 1, 1, 1, 1, 1, 1,
  19403. 1, 1, 1, 1, 1, 1, 1, 1,
  19404. 1, 1, 1, 1, 1, 1, 1, 1,
  19405. 1, 1, 1, 1, 1, 1, 1, 1,
  19406. 1, 1, 1, 1, 1, 1, 1, 1,
  19407. 1, 1, 1, 1, 1, 1, 1, 1,
  19408. 1, 1, 1, 1, 1, 1, 1, 1,
  19409. 1, 1, 1, 1, 1, 1, 1, 3233,
  19410. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19411. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19412. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19413. 3233, 3233, 3233, 3233, 3233, 3234, 3235, 3235,
  19414. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19415. 3235, 3235, 3236, 3235, 3235, 3237, 3238, 3238,
  19416. 3238, 3239, 1, 3230, 1, 1, 1, 3231,
  19417. 1, 1, 1, 1, 1, 1, 1, 1,
  19418. 1, 1, 1, 1, 1, 1, 1, 1,
  19419. 1, 1, 3230, 1, 1, 1, 1, 1,
  19420. 1, 1, 3232, 1, 1, 1, 1, 1,
  19421. 1, 1, 1, 1, 1, 1, 1, 1,
  19422. 1, 1, 1, 1, 1, 1, 1, 1,
  19423. 3188, 1, 3240, 1, 3230, 1, 1, 1,
  19424. 1, 1, 1, 1, 1, 1, 1, 1,
  19425. 1, 1, 1, 1, 1, 1, 1, 1,
  19426. 1, 1, 1, 3230, 1, 3241, 1, 1,
  19427. 1, 3242, 1, 1, 1, 1, 1, 1,
  19428. 1, 1, 1, 1, 1, 1, 1, 1,
  19429. 1, 1, 1, 1, 3241, 1, 1, 1,
  19430. 1, 1, 1, 1, 3243, 1, 1, 1,
  19431. 1, 1, 1, 1, 1, 1, 1, 1,
  19432. 1, 1, 1, 1, 1, 1, 1, 1,
  19433. 1, 1, 3195, 1, 3228, 3172, 3228, 3228,
  19434. 3228, 3228, 3228, 1, 1, 3228, 3228, 1,
  19435. 3228, 3174, 3228, 3228, 3228, 3228, 3228, 3228,
  19436. 3228, 3228, 3228, 3228, 3228, 1, 1, 1,
  19437. 3228, 1, 3228, 1, 3228, 3228, 3228, 3228,
  19438. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19439. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19440. 3228, 3228, 3228, 3228, 3228, 3228, 1, 1,
  19441. 1, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19442. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19443. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19444. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19445. 3228, 3228, 1, 1, 1, 1, 1, 1,
  19446. 1, 1, 1, 1, 1, 1, 1, 1,
  19447. 1, 1, 1, 1, 1, 1, 1, 1,
  19448. 1, 1, 1, 1, 1, 1, 1, 1,
  19449. 1, 1, 1, 1, 1, 1, 1, 1,
  19450. 1, 1, 1, 1, 1, 1, 1, 1,
  19451. 1, 1, 1, 1, 1, 1, 1, 1,
  19452. 1, 1, 1, 1, 1, 1, 1, 1,
  19453. 1, 1, 1, 1, 1, 3233, 3233, 3233,
  19454. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19455. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19456. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19457. 3233, 3233, 3233, 3234, 3235, 3235, 3235, 3235,
  19458. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19459. 3236, 3235, 3235, 3237, 3238, 3238, 3238, 3239,
  19460. 1, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19461. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19462. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19463. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19464. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19465. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19466. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19467. 3228, 3228, 3228, 3228, 3228, 3228, 3228, 3228,
  19468. 3228, 1, 3233, 3233, 3233, 3233, 3233, 3233,
  19469. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19470. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19471. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19472. 3233, 3233, 1, 3233, 3233, 3233, 3233, 3233,
  19473. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19474. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19475. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19476. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19477. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19478. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19479. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19480. 3233, 3233, 3233, 1, 3233, 3233, 3233, 3233,
  19481. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19482. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19483. 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
  19484. 3233, 3233, 3233, 3233, 1, 3235, 3235, 3235,
  19485. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19486. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19487. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19488. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19489. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19490. 3235, 3235, 3235, 3235, 3235, 1, 3235, 3235,
  19491. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19492. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19493. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19494. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19495. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19496. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19497. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19498. 3235, 3235, 3235, 3235, 3235, 3235, 1, 3235,
  19499. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 3235,
  19500. 3235, 3235, 3235, 3235, 3235, 3235, 3235, 1,
  19501. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19502. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19503. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19504. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19505. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19506. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19507. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19508. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19509. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19510. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19511. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19512. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19513. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19514. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19515. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19516. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19517. 1, 1, 1, 1, 1, 1, 1, 1,
  19518. 1, 1, 1, 1, 1, 1, 1, 1,
  19519. 1, 1, 1, 1, 1, 1, 1, 1,
  19520. 1, 1, 1, 1, 1, 1, 1, 1,
  19521. 1, 1, 1, 1, 1, 1, 1, 1,
  19522. 1, 1, 1, 1, 1, 1, 1, 1,
  19523. 1, 1, 1, 1, 1, 1, 1, 1,
  19524. 1, 1, 1, 1, 1, 1, 1, 1,
  19525. 1, 1, 3220, 3220, 3220, 3220, 3220, 3220,
  19526. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19527. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19528. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19529. 3221, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19530. 3222, 3222, 3222, 3222, 3222, 3223, 3222, 3222,
  19531. 3224, 3225, 3225, 3225, 3226, 1, 3217, 3217,
  19532. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19533. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19534. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19535. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19536. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19537. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19538. 3217, 3217, 3217, 3217, 3217, 3217, 3217, 3217,
  19539. 3217, 3217, 3217, 3217, 3217, 3217, 1, 3220,
  19540. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19541. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19542. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19543. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 1,
  19544. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19545. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19546. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19547. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19548. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19549. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19550. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19551. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19552. 1, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19553. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19554. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19555. 3220, 3220, 3220, 3220, 3220, 3220, 3220, 3220,
  19556. 3220, 1, 3222, 3222, 3222, 3222, 3222, 3222,
  19557. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19558. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19559. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19560. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19561. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19562. 3222, 3222, 1, 3222, 3222, 3222, 3222, 3222,
  19563. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19564. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19565. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19566. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19567. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19568. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19569. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19570. 3222, 3222, 3222, 1, 3222, 3222, 3222, 3222,
  19571. 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
  19572. 3222, 3222, 3222, 3222, 1, 3244, 1, 3172,
  19573. 1, 1, 1, 1, 1, 1, 1, 1,
  19574. 1, 1, 1, 1, 1, 1, 1, 1,
  19575. 1, 1, 1, 1, 1, 1, 3172, 1,
  19576. 3189, 1, 1, 1, 3196, 1, 1, 1,
  19577. 1, 1, 1, 1, 1, 1, 1, 1,
  19578. 1, 1, 1, 1, 1, 1, 1, 3189,
  19579. 3171, 3172, 3171, 3171, 3171, 3171, 3171, 3198,
  19580. 1, 3171, 3171, 1, 3171, 3174, 3171, 3171,
  19581. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19582. 3171, 1, 1, 1, 3171, 1, 3171, 1,
  19583. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19584. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19585. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19586. 3171, 3171, 1, 1, 1, 3171, 3171, 3171,
  19587. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19588. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19589. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19590. 3171, 3171, 3171, 3171, 3171, 3171, 1, 1,
  19591. 1, 1, 1, 1, 1, 1, 1, 1,
  19592. 1, 1, 1, 1, 1, 1, 1, 1,
  19593. 1, 1, 1, 1, 1, 1, 1, 1,
  19594. 1, 1, 1, 1, 1, 1, 1, 1,
  19595. 1, 1, 1, 1, 1, 1, 1, 1,
  19596. 1, 1, 1, 1, 1, 1, 1, 1,
  19597. 1, 1, 1, 1, 1, 1, 1, 1,
  19598. 1, 1, 1, 1, 1, 1, 1, 1,
  19599. 1, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19600. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19601. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19602. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3177,
  19603. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19604. 3178, 3178, 3178, 3178, 3179, 3178, 3178, 3180,
  19605. 3181, 3181, 3181, 3182, 1, 3171, 3171, 3171,
  19606. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19607. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19608. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19609. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19610. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19611. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19612. 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
  19613. 3171, 3171, 3171, 3171, 3171, 1, 3176, 3176,
  19614. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19615. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19616. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19617. 3176, 3176, 3176, 3176, 3176, 3176, 1, 3176,
  19618. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19619. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19620. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19621. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19622. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19623. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19624. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19625. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 1,
  19626. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19627. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19628. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19629. 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
  19630. 1, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19631. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19632. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19633. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19634. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19635. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19636. 3178, 1, 3178, 3178, 3178, 3178, 3178, 3178,
  19637. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19638. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19639. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19640. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19641. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19642. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19643. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19644. 3178, 3178, 1, 3178, 3178, 3178, 3178, 3178,
  19645. 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178,
  19646. 3178, 3178, 3178, 1, 3245, 1, 1, 1,
  19647. 3246, 1, 1, 1, 1, 1, 1, 1,
  19648. 1, 1, 1, 1, 1, 1, 1, 1,
  19649. 1, 1, 1, 3245, 3247, 3248, 3247, 3247,
  19650. 3247, 3247, 3247, 3249, 1, 3247, 3247, 1,
  19651. 3247, 3250, 3247, 3247, 3247, 3247, 3247, 3247,
  19652. 3247, 3247, 3247, 3247, 3247, 1, 1, 1,
  19653. 3247, 1, 3247, 1, 3247, 3247, 3247, 3247,
  19654. 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19655. 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19656. 3247, 3247, 3247, 3247, 3247, 3247, 3251, 1,
  19657. 1, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19658. 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19659. 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19660. 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
  19661. 3247, 3247, 1, 1, 1, 1, 1, 1,
  19662. 1, 1, 1, 1, 1, 1, 1, 1,
  19663. 1, 1, 1, 1, 1, 1, 1, 1,
  19664. 1, 1, 1, 1, 1, 1, 1, 1,
  19665. 1, 1, 1, 1, 1, 1, 1, 1,
  19666. 1, 1, 1, 1, 1, 1, 1, 1,
  19667. 1, 1, 1, 1, 1, 1, 1, 1,
  19668. 1, 1, 1, 1, 1, 1, 1, 1,
  19669. 1, 1, 1, 1, 1, 3252, 3252, 3252,
  19670. 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
  19671. 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
  19672. 3252, 3252, 3252, 3252, 3252, 3252, 3252, 3252,
  19673. 3252, 3252, 3252, 3253, 3254, 3254, 3254, 3254,
  19674. 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
  19675. 3255, 3254, 3254, 3256, 3257, 3257, 3257, 3258,
  19676. 1, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19677. 3175, 3175, 1, 3175, 3175, 3259, 3175, 3175,
  19678. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19679. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19680. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19681. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19682. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19683. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19684. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19685. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19686. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19687. 3175, 3175, 3175, 1, 3260, 3230, 3175, 3175,
  19688. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19689. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19690. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19691. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19692. 1, 1, 1, 1, 1, 1, 1, 1,
  19693. 1, 1, 1, 1, 1, 1, 1, 1,
  19694. 1, 1, 1, 1, 1, 1, 1, 1,
  19695. 1, 1, 1, 1, 1, 1, 1, 1,
  19696. 1, 1, 1, 1, 1, 1, 1, 1,
  19697. 1, 1, 1, 1, 1, 1, 1, 1,
  19698. 1, 1, 1, 1, 1, 1, 1, 1,
  19699. 1, 1, 1, 1, 1, 1, 1, 1,
  19700. 1, 1, 3261, 3261, 3261, 3261, 3261, 3261,
  19701. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19702. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19703. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19704. 3262, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19705. 3263, 3263, 3263, 3263, 3263, 3264, 3263, 3263,
  19706. 3265, 3266, 3266, 3266, 3267, 1, 3268, 1,
  19707. 3175, 1, 1, 1, 1, 1, 1, 1,
  19708. 1, 1, 1, 1, 1, 1, 1, 1,
  19709. 1, 1, 1, 1, 1, 1, 1, 3175,
  19710. 1, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19711. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19712. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19713. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19714. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19715. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19716. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19717. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19718. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19719. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19720. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19721. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19722. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19723. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19724. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19725. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19726. 3175, 1, 1, 1, 1, 1, 1, 1,
  19727. 1, 1, 1, 1, 1, 1, 1, 1,
  19728. 1, 1, 1, 1, 1, 1, 1, 1,
  19729. 1, 1, 1, 1, 1, 1, 1, 1,
  19730. 1, 1, 1, 1, 1, 1, 1, 1,
  19731. 1, 1, 1, 1, 1, 1, 1, 1,
  19732. 1, 1, 1, 1, 1, 1, 1, 1,
  19733. 1, 1, 1, 1, 1, 1, 1, 1,
  19734. 1, 1, 1, 3261, 3261, 3261, 3261, 3261,
  19735. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19736. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19737. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19738. 3261, 3262, 3263, 3263, 3263, 3263, 3263, 3263,
  19739. 3263, 3263, 3263, 3263, 3263, 3263, 3264, 3263,
  19740. 3263, 3265, 3266, 3266, 3266, 3267, 1, 3175,
  19741. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19742. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19743. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19744. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19745. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19746. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19747. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 3175,
  19748. 3175, 3175, 3175, 3175, 3175, 3175, 3175, 1,
  19749. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19750. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19751. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19752. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19753. 1, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19754. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19755. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19756. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19757. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19758. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19759. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19760. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19761. 3261, 1, 3261, 3261, 3261, 3261, 3261, 3261,
  19762. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19763. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19764. 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
  19765. 3261, 3261, 1, 3263, 3263, 3263, 3263, 3263,
  19766. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19767. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19768. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19769. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19770. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19771. 3263, 3263, 3263, 1, 3263, 3263, 3263, 3263,
  19772. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19773. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19774. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19775. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19776. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19777. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19778. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19779. 3263, 3263, 3263, 3263, 1, 3263, 3263, 3263,
  19780. 3263, 3263, 3263, 3263, 3263, 3263, 3263, 3263,
  19781. 3263, 3263, 3263, 3263, 3263, 1, 346, 346,
  19782. 346, 346, 346, 346, 346, 346, 346, 346,
  19783. 346, 346, 346, 346, 346, 346, 346, 346,
  19784. 346, 346, 346, 346, 346, 346, 346, 346,
  19785. 346, 346, 346, 346, 346, 346, 346, 346,
  19786. 346, 346, 346, 346, 346, 346, 346, 346,
  19787. 346, 346, 346, 346, 346, 346, 346, 346,
  19788. 346, 346, 346, 346, 346, 346, 346, 346,
  19789. 346, 346, 346, 346, 346, 346, 1, 349,
  19790. 349, 349, 349, 349, 349, 349, 349, 349,
  19791. 349, 349, 349, 349, 349, 349, 349, 349,
  19792. 349, 349, 349, 349, 349, 349, 349, 349,
  19793. 349, 349, 349, 349, 349, 349, 349, 1,
  19794. 349, 349, 349, 349, 349, 349, 349, 349,
  19795. 349, 349, 349, 349, 349, 349, 349, 349,
  19796. 349, 349, 349, 349, 349, 349, 349, 349,
  19797. 349, 349, 349, 349, 349, 349, 349, 349,
  19798. 349, 349, 349, 349, 349, 349, 349, 349,
  19799. 349, 349, 349, 349, 349, 349, 349, 349,
  19800. 349, 349, 349, 349, 349, 349, 349, 349,
  19801. 349, 349, 349, 349, 349, 349, 349, 349,
  19802. 1, 349, 349, 349, 349, 349, 349, 349,
  19803. 349, 349, 349, 349, 349, 349, 349, 349,
  19804. 349, 349, 349, 349, 349, 349, 349, 349,
  19805. 349, 349, 349, 349, 349, 349, 349, 349,
  19806. 349, 1, 351, 351, 351, 351, 351, 351,
  19807. 351, 351, 351, 351, 351, 351, 351, 351,
  19808. 351, 351, 351, 351, 351, 351, 351, 351,
  19809. 351, 351, 351, 351, 351, 351, 351, 351,
  19810. 351, 351, 351, 351, 351, 351, 351, 351,
  19811. 351, 351, 351, 351, 351, 351, 351, 351,
  19812. 351, 351, 1, 351, 351, 351, 351, 351,
  19813. 351, 351, 351, 351, 351, 351, 351, 351,
  19814. 351, 351, 351, 351, 351, 351, 351, 351,
  19815. 351, 351, 351, 351, 351, 351, 351, 351,
  19816. 351, 351, 351, 351, 351, 351, 351, 351,
  19817. 351, 351, 351, 351, 351, 351, 351, 351,
  19818. 351, 351, 351, 351, 351, 351, 351, 351,
  19819. 351, 351, 351, 351, 351, 351, 351, 351,
  19820. 351, 351, 351, 1, 351, 351, 351, 351,
  19821. 351, 351, 351, 351, 351, 351, 351, 351,
  19822. 351, 351, 351, 351, 1, 3269, 3269, 3269,
  19823. 3269, 3269, 3269, 3269, 3269, 3269, 1, 3269,
  19824. 3269, 3270, 3269, 3269, 3269, 3269, 3269, 3269,
  19825. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19826. 3269, 3269, 3269, 3269, 3269, 3269, 3271, 3269,
  19827. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19828. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19829. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19830. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19831. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19832. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19833. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19834. 3272, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19835. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19836. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19837. 3269, 3269, 3269, 3269, 3269, 3269, 3269, 3269,
  19838. 3269, 3269, 3269, 3269, 1, 1, 1, 1,
  19839. 1, 1, 1, 1, 1, 1, 1, 1,
  19840. 1, 1, 1, 1, 1, 1, 1, 1,
  19841. 1, 1, 1, 1, 1, 1, 1, 1,
  19842. 1, 1, 1, 1, 1, 1, 1, 1,
  19843. 1, 1, 1, 1, 1, 1, 1, 1,
  19844. 1, 1, 1, 1, 1, 1, 1, 1,
  19845. 1, 1, 1, 1, 1, 1, 1, 1,
  19846. 1, 1, 1, 1, 1, 1, 3273, 3273,
  19847. 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
  19848. 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
  19849. 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
  19850. 3273, 3273, 3273, 3273, 3274, 3275, 3275, 3275,
  19851. 3275, 3275, 3275, 3275, 3275, 3275, 3275, 3275,
  19852. 3275, 3276, 3275, 3275, 3277, 3278, 3278, 3278,
  19853. 3279, 1, 3280, 3280, 3280, 3280, 3280, 3280,
  19854. 3280, 3280, 3280, 1, 3280, 3280, 3281, 3280,
  19855. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19856. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19857. 3280, 3280, 3280, 3282, 3280, 3280, 3280, 3280,
  19858. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19859. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19860. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19861. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19862. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19863. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19864. 3280, 3280, 3280, 3280, 3280, 3283, 3280, 3280,
  19865. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19866. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19867. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19868. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19869. 3280, 1, 1, 1, 1, 1, 1, 1,
  19870. 1, 1, 1, 1, 1, 1, 1, 1,
  19871. 1, 1, 1, 1, 1, 1, 1, 1,
  19872. 1, 1, 1, 1, 1, 1, 1, 1,
  19873. 1, 1, 1, 1, 1, 1, 1, 1,
  19874. 1, 1, 1, 1, 1, 1, 1, 1,
  19875. 1, 1, 1, 1, 1, 1, 1, 1,
  19876. 1, 1, 1, 1, 1, 1, 1, 1,
  19877. 1, 1, 1, 3284, 3284, 3284, 3284, 3284,
  19878. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19879. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19880. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19881. 3284, 3285, 3286, 3286, 3286, 3286, 3286, 3286,
  19882. 3286, 3286, 3286, 3286, 3286, 3286, 3287, 3286,
  19883. 3286, 3288, 3289, 3289, 3289, 3290, 1, 3291,
  19884. 1, 3280, 1, 1, 1, 1, 1, 1,
  19885. 1, 1, 1, 1, 1, 1, 1, 1,
  19886. 1, 1, 1, 1, 1, 1, 1, 1,
  19887. 3280, 1, 3280, 3280, 3280, 3280, 3280, 3280,
  19888. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19889. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19890. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19891. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19892. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19893. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19894. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19895. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19896. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19897. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19898. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19899. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19900. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19901. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19902. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19903. 3280, 3280, 1, 1, 1, 1, 1, 1,
  19904. 1, 1, 1, 1, 1, 1, 1, 1,
  19905. 1, 1, 1, 1, 1, 1, 1, 1,
  19906. 1, 1, 1, 1, 1, 1, 1, 1,
  19907. 1, 1, 1, 1, 1, 1, 1, 1,
  19908. 1, 1, 1, 1, 1, 1, 1, 1,
  19909. 1, 1, 1, 1, 1, 1, 1, 1,
  19910. 1, 1, 1, 1, 1, 1, 1, 1,
  19911. 1, 1, 1, 1, 3284, 3284, 3284, 3284,
  19912. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19913. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19914. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19915. 3284, 3284, 3285, 3286, 3286, 3286, 3286, 3286,
  19916. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3287,
  19917. 3286, 3286, 3288, 3289, 3289, 3289, 3290, 1,
  19918. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19919. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19920. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19921. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19922. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19923. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19924. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19925. 3280, 3280, 3280, 3280, 3280, 3280, 3280, 3280,
  19926. 1, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19927. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19928. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19929. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19930. 3284, 1, 3284, 3284, 3284, 3284, 3284, 3284,
  19931. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19932. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19933. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19934. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19935. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19936. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19937. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19938. 3284, 3284, 1, 3284, 3284, 3284, 3284, 3284,
  19939. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19940. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19941. 3284, 3284, 3284, 3284, 3284, 3284, 3284, 3284,
  19942. 3284, 3284, 3284, 1, 3286, 3286, 3286, 3286,
  19943. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19944. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19945. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19946. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19947. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19948. 3286, 3286, 3286, 3286, 1, 3286, 3286, 3286,
  19949. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19950. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19951. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19952. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19953. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19954. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19955. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19956. 3286, 3286, 3286, 3286, 3286, 1, 3286, 3286,
  19957. 3286, 3286, 3286, 3286, 3286, 3286, 3286, 3286,
  19958. 3286, 3286, 3286, 3286, 3286, 3286, 1, 342,
  19959. 1, 1, 1, 3292, 1, 1, 1, 1,
  19960. 1, 1, 1, 1, 1, 1, 1, 1,
  19961. 1, 1, 1, 1, 1, 1, 342, 3293,
  19962. 3294, 3293, 3293, 3293, 3293, 3293, 3295, 1,
  19963. 3293, 3293, 1, 3293, 1, 3293, 3293, 3293,
  19964. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19965. 1, 1, 1, 3293, 1, 3293, 1, 3293,
  19966. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19967. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19968. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19969. 3293, 1, 1, 1, 3293, 3293, 3293, 3293,
  19970. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19971. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19972. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  19973. 3293, 3293, 3293, 3293, 3293, 1, 1, 1,
  19974. 1, 1, 1, 1, 1, 1, 1, 1,
  19975. 1, 1, 1, 1, 1, 1, 1, 1,
  19976. 1, 1, 1, 1, 1, 1, 1, 1,
  19977. 1, 1, 1, 1, 1, 1, 1, 1,
  19978. 1, 1, 1, 1, 1, 1, 1, 1,
  19979. 1, 1, 1, 1, 1, 1, 1, 1,
  19980. 1, 1, 1, 1, 1, 1, 1, 1,
  19981. 1, 1, 1, 1, 1, 1, 1, 1,
  19982. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  19983. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  19984. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  19985. 3296, 3296, 3296, 3296, 3296, 3296, 3297, 3298,
  19986. 3298, 3298, 3298, 3298, 3298, 3298, 3298, 3298,
  19987. 3298, 3298, 3298, 3299, 3298, 3298, 3300, 3301,
  19988. 3301, 3301, 3302, 1, 3303, 3303, 3303, 3303,
  19989. 3303, 3303, 3303, 3303, 320, 1, 3303, 3303,
  19990. 3304, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19991. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19992. 3303, 3303, 3303, 320, 3303, 1, 3303, 3303,
  19993. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19994. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19995. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19996. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19997. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19998. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  19999. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3305,
  20000. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20001. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20002. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20003. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20004. 3303, 3303, 3303, 1, 1, 1, 1, 1,
  20005. 1, 1, 1, 1, 1, 1, 1, 1,
  20006. 1, 1, 1, 1, 1, 1, 1, 1,
  20007. 1, 1, 1, 1, 1, 1, 1, 1,
  20008. 1, 1, 1, 1, 1, 1, 1, 1,
  20009. 1, 1, 1, 1, 1, 1, 1, 1,
  20010. 1, 1, 1, 1, 1, 1, 1, 1,
  20011. 1, 1, 1, 1, 1, 1, 1, 1,
  20012. 1, 1, 1, 1, 1, 3306, 3306, 3306,
  20013. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20014. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20015. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20016. 3306, 3306, 3306, 3307, 3308, 3308, 3308, 3308,
  20017. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20018. 3309, 3308, 3308, 3310, 3311, 3311, 3311, 3312,
  20019. 1, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20020. 3303, 3303, 1, 3303, 3303, 3313, 3303, 3303,
  20021. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20022. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20023. 3303, 3303, 3314, 3303, 3303, 3303, 3303, 3303,
  20024. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20025. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20026. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20027. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20028. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20029. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20030. 3303, 3303, 3303, 3303, 3305, 3303, 3303, 3303,
  20031. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20032. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20033. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20034. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20035. 1, 1, 1, 1, 1, 1, 1, 1,
  20036. 1, 1, 1, 1, 1, 1, 1, 1,
  20037. 1, 1, 1, 1, 1, 1, 1, 1,
  20038. 1, 1, 1, 1, 1, 1, 1, 1,
  20039. 1, 1, 1, 1, 1, 1, 1, 1,
  20040. 1, 1, 1, 1, 1, 1, 1, 1,
  20041. 1, 1, 1, 1, 1, 1, 1, 1,
  20042. 1, 1, 1, 1, 1, 1, 1, 1,
  20043. 1, 1, 3306, 3306, 3306, 3306, 3306, 3306,
  20044. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20045. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20046. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20047. 3307, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20048. 3308, 3308, 3308, 3308, 3308, 3309, 3308, 3308,
  20049. 3310, 3311, 3311, 3311, 3312, 1, 3315, 1,
  20050. 3303, 1, 1, 1, 1, 1, 1, 1,
  20051. 1, 1, 1, 1, 1, 1, 1, 1,
  20052. 1, 1, 1, 1, 1, 1, 1, 3303,
  20053. 1, 3316, 1, 1, 1, 3317, 1, 1,
  20054. 1, 1, 1, 1, 1, 1, 1, 1,
  20055. 1, 1, 1, 1, 1, 1, 1, 1,
  20056. 3316, 3314, 320, 3314, 3314, 3314, 3314, 3314,
  20057. 3318, 1, 3314, 3314, 1, 3314, 3314, 3314,
  20058. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20059. 3314, 3314, 1, 1, 1, 3314, 323, 3314,
  20060. 324, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20061. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20062. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20063. 3314, 3314, 3314, 1, 1, 1, 3314, 3314,
  20064. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20065. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20066. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20067. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 1,
  20068. 1, 1, 1, 1, 1, 1, 1, 1,
  20069. 1, 1, 1, 1, 1, 1, 1, 1,
  20070. 1, 1, 1, 1, 1, 1, 1, 1,
  20071. 1, 1, 1, 1, 1, 1, 1, 1,
  20072. 1, 1, 1, 1, 1, 1, 1, 1,
  20073. 1, 1, 1, 1, 1, 1, 1, 1,
  20074. 1, 1, 1, 1, 1, 1, 1, 1,
  20075. 1, 1, 1, 1, 1, 1, 1, 1,
  20076. 1, 1, 3319, 3319, 3319, 3319, 3319, 3319,
  20077. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20078. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20079. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20080. 3320, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20081. 3321, 3321, 3321, 3321, 3321, 3322, 3321, 3321,
  20082. 3323, 3324, 3324, 3324, 3325, 1, 3326, 1,
  20083. 1, 1, 3327, 1, 1, 1, 1, 1,
  20084. 1, 1, 1, 1, 1, 1, 1, 1,
  20085. 1, 1, 1, 1, 1, 3326, 1, 1,
  20086. 1, 1, 1, 1, 1, 3328, 1, 1,
  20087. 1, 1, 1, 1, 1, 1, 1, 1,
  20088. 1, 1, 1, 1, 1, 1, 1, 1,
  20089. 1, 1, 1, 336, 1, 337, 1, 3329,
  20090. 1, 3326, 1, 1, 1, 1, 1, 1,
  20091. 1, 1, 1, 1, 1, 1, 1, 1,
  20092. 1, 1, 1, 1, 1, 1, 1, 1,
  20093. 3326, 1, 3330, 1, 1, 1, 3331, 1,
  20094. 1, 1, 1, 1, 1, 1, 1, 1,
  20095. 1, 1, 1, 1, 1, 1, 1, 1,
  20096. 1, 3330, 1, 1, 1, 1, 1, 1,
  20097. 1, 3332, 1, 1, 1, 1, 1, 1,
  20098. 1, 1, 1, 1, 1, 1, 1, 1,
  20099. 1, 1, 1, 1, 1, 1, 1, 343,
  20100. 1, 344, 1, 3314, 3314, 3314, 3314, 3314,
  20101. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20102. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20103. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20104. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20105. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20106. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20107. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20108. 3314, 3314, 3314, 1, 3319, 3319, 3319, 3319,
  20109. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20110. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20111. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20112. 3319, 3319, 3319, 3319, 1, 3319, 3319, 3319,
  20113. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20114. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20115. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20116. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20117. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20118. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20119. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20120. 3319, 3319, 3319, 3319, 3319, 1, 3319, 3319,
  20121. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20122. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20123. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20124. 3319, 3319, 3319, 3319, 3319, 3319, 1, 3321,
  20125. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20126. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20127. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20128. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20129. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20130. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 1,
  20131. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20132. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20133. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20134. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20135. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20136. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20137. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20138. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20139. 1, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20140. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20141. 3321, 1, 3303, 3303, 3303, 3303, 3303, 3303,
  20142. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20143. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20144. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20145. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20146. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20147. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20148. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20149. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20150. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20151. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20152. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20153. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20154. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20155. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20156. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20157. 3303, 3303, 1, 1, 1, 1, 1, 1,
  20158. 1, 1, 1, 1, 1, 1, 1, 1,
  20159. 1, 1, 1, 1, 1, 1, 1, 1,
  20160. 1, 1, 1, 1, 1, 1, 1, 1,
  20161. 1, 1, 1, 1, 1, 1, 1, 1,
  20162. 1, 1, 1, 1, 1, 1, 1, 1,
  20163. 1, 1, 1, 1, 1, 1, 1, 1,
  20164. 1, 1, 1, 1, 1, 1, 1, 1,
  20165. 1, 1, 1, 1, 3306, 3306, 3306, 3306,
  20166. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20167. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20168. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20169. 3306, 3306, 3307, 3308, 3308, 3308, 3308, 3308,
  20170. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3309,
  20171. 3308, 3308, 3310, 3311, 3311, 3311, 3312, 1,
  20172. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20173. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20174. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20175. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20176. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20177. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20178. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20179. 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
  20180. 1, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20181. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20182. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20183. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20184. 3306, 1, 3306, 3306, 3306, 3306, 3306, 3306,
  20185. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20186. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20187. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20188. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20189. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20190. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20191. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20192. 3306, 3306, 1, 3306, 3306, 3306, 3306, 3306,
  20193. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20194. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20195. 3306, 3306, 3306, 3306, 3306, 3306, 3306, 3306,
  20196. 3306, 3306, 3306, 1, 3308, 3308, 3308, 3308,
  20197. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20198. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20199. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20200. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20201. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20202. 3308, 3308, 3308, 3308, 1, 3308, 3308, 3308,
  20203. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20204. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20205. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20206. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20207. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20208. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20209. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20210. 3308, 3308, 3308, 3308, 3308, 1, 3308, 3308,
  20211. 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
  20212. 3308, 3308, 3308, 3308, 3308, 3308, 1, 3333,
  20213. 1, 320, 1, 1, 1, 1, 1, 1,
  20214. 1, 1, 1, 1, 1, 1, 1, 1,
  20215. 1, 1, 1, 1, 1, 1, 1, 1,
  20216. 320, 1, 3334, 1, 1, 1, 3335, 1,
  20217. 1, 1, 1, 1, 1, 1, 1, 1,
  20218. 1, 1, 1, 1, 1, 1, 1, 1,
  20219. 1, 3334, 319, 3336, 319, 319, 319, 319,
  20220. 319, 3337, 1, 319, 319, 1, 319, 3314,
  20221. 319, 319, 319, 319, 319, 319, 319, 319,
  20222. 319, 319, 319, 1, 1, 1, 319, 323,
  20223. 319, 324, 319, 319, 319, 319, 319, 319,
  20224. 319, 319, 319, 319, 319, 319, 319, 319,
  20225. 319, 319, 319, 319, 319, 319, 319, 319,
  20226. 319, 319, 319, 319, 1, 1, 1, 319,
  20227. 319, 319, 319, 319, 319, 319, 319, 319,
  20228. 319, 319, 319, 319, 319, 319, 319, 319,
  20229. 319, 319, 319, 319, 319, 319, 319, 319,
  20230. 319, 319, 319, 319, 319, 319, 319, 319,
  20231. 1, 1, 1, 1, 1, 1, 1, 1,
  20232. 1, 1, 1, 1, 1, 1, 1, 1,
  20233. 1, 1, 1, 1, 1, 1, 1, 1,
  20234. 1, 1, 1, 1, 1, 1, 1, 1,
  20235. 1, 1, 1, 1, 1, 1, 1, 1,
  20236. 1, 1, 1, 1, 1, 1, 1, 1,
  20237. 1, 1, 1, 1, 1, 1, 1, 1,
  20238. 1, 1, 1, 1, 1, 1, 1, 1,
  20239. 1, 1, 1, 325, 325, 325, 325, 325,
  20240. 325, 325, 325, 325, 325, 325, 325, 325,
  20241. 325, 325, 325, 325, 325, 325, 325, 325,
  20242. 325, 325, 325, 325, 325, 325, 325, 325,
  20243. 325, 326, 327, 327, 327, 327, 327, 327,
  20244. 327, 327, 327, 327, 327, 327, 328, 327,
  20245. 327, 329, 330, 330, 330, 331, 1, 3338,
  20246. 1, 1, 1, 3339, 1, 1, 1, 1,
  20247. 1, 1, 1, 1, 1, 1, 1, 1,
  20248. 1, 1, 1, 1, 1, 1, 3338, 346,
  20249. 347, 346, 346, 346, 346, 346, 3340, 1,
  20250. 346, 346, 1, 346, 1, 346, 346, 346,
  20251. 346, 346, 346, 346, 346, 346, 346, 346,
  20252. 1, 1, 1, 346, 336, 346, 337, 346,
  20253. 346, 346, 346, 346, 346, 346, 346, 346,
  20254. 346, 346, 346, 346, 346, 346, 346, 346,
  20255. 346, 346, 346, 346, 346, 346, 346, 346,
  20256. 346, 1, 1, 1, 346, 346, 346, 346,
  20257. 346, 346, 346, 346, 346, 346, 346, 346,
  20258. 346, 346, 346, 346, 346, 346, 346, 346,
  20259. 346, 346, 346, 346, 346, 346, 346, 346,
  20260. 346, 346, 346, 346, 346, 1, 1, 1,
  20261. 1, 1, 1, 1, 1, 1, 1, 1,
  20262. 1, 1, 1, 1, 1, 1, 1, 1,
  20263. 1, 1, 1, 1, 1, 1, 1, 1,
  20264. 1, 1, 1, 1, 1, 1, 1, 1,
  20265. 1, 1, 1, 1, 1, 1, 1, 1,
  20266. 1, 1, 1, 1, 1, 1, 1, 1,
  20267. 1, 1, 1, 1, 1, 1, 1, 1,
  20268. 1, 1, 1, 1, 1, 1, 1, 1,
  20269. 349, 349, 349, 349, 349, 349, 349, 349,
  20270. 349, 349, 349, 349, 349, 349, 349, 349,
  20271. 349, 349, 349, 349, 349, 349, 349, 349,
  20272. 349, 349, 349, 349, 349, 349, 350, 351,
  20273. 351, 351, 351, 351, 351, 351, 351, 351,
  20274. 351, 351, 351, 352, 351, 351, 353, 354,
  20275. 354, 354, 355, 1, 3341, 1, 3338, 1,
  20276. 1, 1, 1, 1, 1, 1, 1, 1,
  20277. 1, 1, 1, 1, 1, 1, 1, 1,
  20278. 1, 1, 1, 1, 1, 3338, 1, 3342,
  20279. 1, 1, 1, 3343, 1, 1, 1, 1,
  20280. 1, 1, 1, 1, 1, 1, 1, 1,
  20281. 1, 1, 1, 1, 1, 1, 3342, 3293,
  20282. 3294, 3293, 3293, 3293, 3293, 3293, 3344, 1,
  20283. 3293, 3293, 1, 3293, 1, 3293, 3293, 3293,
  20284. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20285. 1, 1, 1, 3293, 343, 3293, 344, 3293,
  20286. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20287. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20288. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20289. 3293, 1, 1, 1, 3293, 3293, 3293, 3293,
  20290. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20291. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20292. 3293, 3293, 3293, 3293, 3293, 3293, 3293, 3293,
  20293. 3293, 3293, 3293, 3293, 3293, 1, 1, 1,
  20294. 1, 1, 1, 1, 1, 1, 1, 1,
  20295. 1, 1, 1, 1, 1, 1, 1, 1,
  20296. 1, 1, 1, 1, 1, 1, 1, 1,
  20297. 1, 1, 1, 1, 1, 1, 1, 1,
  20298. 1, 1, 1, 1, 1, 1, 1, 1,
  20299. 1, 1, 1, 1, 1, 1, 1, 1,
  20300. 1, 1, 1, 1, 1, 1, 1, 1,
  20301. 1, 1, 1, 1, 1, 1, 1, 1,
  20302. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  20303. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  20304. 3296, 3296, 3296, 3296, 3296, 3296, 3296, 3296,
  20305. 3296, 3296, 3296, 3296, 3296, 3296, 3297, 3298,
  20306. 3298, 3298, 3298, 3298, 3298, 3298, 3298, 3298,
  20307. 3298, 3298, 3298, 3299, 3298, 3298, 3300, 3301,
  20308. 3301, 3301, 3302, 1, 3345, 3345, 3345, 3345,
  20309. 3345, 3345, 3345, 3345, 3346, 1, 3345, 3345,
  20310. 3347, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20311. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20312. 3345, 3345, 3345, 3346, 3345, 3271, 3345, 3345,
  20313. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20314. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20315. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20316. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20317. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20318. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20319. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3348,
  20320. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20321. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20322. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20323. 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
  20324. 3345, 3345, 3345, 1, 1, 1, 1, 1,
  20325. 1, 1, 1, 1, 1, 1, 1, 1,
  20326. 1, 1, 1, 1, 1, 1, 1, 1,
  20327. 1, 1, 1, 1, 1, 1, 1, 1,
  20328. 1, 1, 1, 1, 1, 1, 1, 1,
  20329. 1, 1, 1, 1, 1, 1, 1, 1,
  20330. 1, 1, 1, 1, 1, 1, 1, 1,
  20331. 1, 1, 1, 1, 1, 1, 1, 1,
  20332. 1, 1, 1, 1, 1, 3349, 3349, 3349,
  20333. 3349, 3349, 3349, 3349, 3349, 3349, 3349, 3349,
  20334. 3349, 3349, 3349, 3349, 3349, 3349, 3349, 3349,
  20335. 3349, 3349, 3349, 3349, 3349, 3349, 3349, 3349,
  20336. 3349, 3349, 3349, 3350, 3351, 3351, 3351, 3351,
  20337. 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
  20338. 3352, 3351, 3351, 3353, 3354, 3354, 3354, 3355,
  20339. 1, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20340. 3356, 3356, 1, 3356, 3356, 3357, 3356, 3356,
  20341. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20342. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20343. 3356, 3356, 3358, 3356, 3356, 3356, 3356, 3356,
  20344. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20345. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20346. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20347. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20348. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20349. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20350. 3356, 3356, 3356, 3356, 3359, 3356, 3356, 3356,
  20351. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20352. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20353. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20354. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20355. 1, 1, 1, 1, 1, 1, 1, 1,
  20356. 1, 1, 1, 1, 1, 1, 1, 1,
  20357. 1, 1, 1, 1, 1, 1, 1, 1,
  20358. 1, 1, 1, 1, 1, 1, 1, 1,
  20359. 1, 1, 1, 1, 1, 1, 1, 1,
  20360. 1, 1, 1, 1, 1, 1, 1, 1,
  20361. 1, 1, 1, 1, 1, 1, 1, 1,
  20362. 1, 1, 1, 1, 1, 1, 1, 1,
  20363. 1, 1, 3360, 3360, 3360, 3360, 3360, 3360,
  20364. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20365. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20366. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20367. 3361, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20368. 3362, 3362, 3362, 3362, 3362, 3363, 3362, 3362,
  20369. 3364, 3365, 3365, 3365, 3366, 1, 3367, 1,
  20370. 3356, 1, 1, 1, 1, 1, 1, 1,
  20371. 1, 1, 1, 1, 1, 1, 1, 1,
  20372. 1, 1, 1, 1, 1, 1, 1, 3356,
  20373. 1, 317, 1, 1, 1, 318, 1, 1,
  20374. 1, 1, 1, 1, 1, 1, 1, 1,
  20375. 1, 1, 1, 1, 1, 1, 1, 1,
  20376. 317, 3314, 320, 3314, 3314, 3314, 3314, 3314,
  20377. 321, 1, 3314, 3314, 1, 3314, 322, 3314,
  20378. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20379. 3314, 3314, 1, 1, 1, 3314, 323, 3314,
  20380. 324, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20381. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20382. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20383. 3314, 3314, 3314, 1, 1, 1, 3314, 3314,
  20384. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20385. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20386. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20387. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 1,
  20388. 1, 1, 1, 1, 1, 1, 1, 1,
  20389. 1, 1, 1, 1, 1, 1, 1, 1,
  20390. 1, 1, 1, 1, 1, 1, 1, 1,
  20391. 1, 1, 1, 1, 1, 1, 1, 1,
  20392. 1, 1, 1, 1, 1, 1, 1, 1,
  20393. 1, 1, 1, 1, 1, 1, 1, 1,
  20394. 1, 1, 1, 1, 1, 1, 1, 1,
  20395. 1, 1, 1, 1, 1, 1, 1, 1,
  20396. 1, 1, 3319, 3319, 3319, 3319, 3319, 3319,
  20397. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20398. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20399. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20400. 3320, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20401. 3321, 3321, 3321, 3321, 3321, 3322, 3321, 3321,
  20402. 3323, 3324, 3324, 3324, 3325, 1, 3356, 3356,
  20403. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20404. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20405. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20406. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20407. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20408. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20409. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20410. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20411. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20412. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20413. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20414. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20415. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20416. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20417. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20418. 3356, 3356, 3356, 3356, 3356, 3356, 1, 1,
  20419. 1, 1, 1, 1, 1, 1, 1, 1,
  20420. 1, 1, 1, 1, 1, 1, 1, 1,
  20421. 1, 1, 1, 1, 1, 1, 1, 1,
  20422. 1, 1, 1, 1, 1, 1, 1, 1,
  20423. 1, 1, 1, 1, 1, 1, 1, 1,
  20424. 1, 1, 1, 1, 1, 1, 1, 1,
  20425. 1, 1, 1, 1, 1, 1, 1, 1,
  20426. 1, 1, 1, 1, 1, 1, 1, 1,
  20427. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20428. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20429. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20430. 3360, 3360, 3360, 3360, 3360, 3360, 3361, 3362,
  20431. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20432. 3362, 3362, 3362, 3363, 3362, 3362, 3364, 3365,
  20433. 3365, 3365, 3366, 1, 3356, 3356, 3356, 3356,
  20434. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20435. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20436. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20437. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20438. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20439. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20440. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20441. 3356, 3356, 3356, 3356, 1, 3360, 3360, 3360,
  20442. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20443. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20444. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20445. 3360, 3360, 3360, 3360, 3360, 1, 3360, 3360,
  20446. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20447. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20448. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20449. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20450. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20451. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20452. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20453. 3360, 3360, 3360, 3360, 3360, 3360, 1, 3360,
  20454. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20455. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20456. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20457. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 1,
  20458. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20459. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20460. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20461. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20462. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20463. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20464. 1, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20465. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20466. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20467. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20468. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20469. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20470. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20471. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20472. 3362, 1, 3362, 3362, 3362, 3362, 3362, 3362,
  20473. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3362,
  20474. 3362, 3362, 1, 3356, 3356, 3356, 3356, 3356,
  20475. 3356, 3356, 3356, 3368, 1, 3356, 3356, 3369,
  20476. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20477. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20478. 3356, 3356, 3368, 3356, 3282, 3356, 3356, 3356,
  20479. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20480. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20481. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20482. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20483. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20484. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20485. 3356, 3356, 3356, 3356, 3356, 3356, 3359, 3356,
  20486. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20487. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20488. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20489. 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3356,
  20490. 3356, 3356, 1, 1, 1, 1, 1, 1,
  20491. 1, 1, 1, 1, 1, 1, 1, 1,
  20492. 1, 1, 1, 1, 1, 1, 1, 1,
  20493. 1, 1, 1, 1, 1, 1, 1, 1,
  20494. 1, 1, 1, 1, 1, 1, 1, 1,
  20495. 1, 1, 1, 1, 1, 1, 1, 1,
  20496. 1, 1, 1, 1, 1, 1, 1, 1,
  20497. 1, 1, 1, 1, 1, 1, 1, 1,
  20498. 1, 1, 1, 1, 3360, 3360, 3360, 3360,
  20499. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20500. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20501. 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
  20502. 3360, 3360, 3361, 3362, 3362, 3362, 3362, 3362,
  20503. 3362, 3362, 3362, 3362, 3362, 3362, 3362, 3363,
  20504. 3362, 3362, 3364, 3365, 3365, 3365, 3366, 1,
  20505. 3370, 1, 3368, 1, 1, 1, 1, 1,
  20506. 1, 1, 1, 1, 1, 1, 1, 1,
  20507. 1, 1, 1, 1, 1, 1, 1, 1,
  20508. 1, 3368, 1, 319, 319, 319, 319, 319,
  20509. 319, 319, 319, 319, 319, 319, 319, 319,
  20510. 319, 319, 319, 319, 319, 319, 319, 319,
  20511. 319, 319, 319, 319, 319, 319, 319, 319,
  20512. 319, 319, 319, 319, 319, 319, 319, 319,
  20513. 319, 319, 319, 319, 319, 319, 319, 319,
  20514. 319, 319, 319, 319, 319, 319, 319, 319,
  20515. 319, 319, 319, 319, 319, 319, 319, 319,
  20516. 319, 319, 319, 1, 325, 325, 325, 325,
  20517. 325, 325, 325, 325, 325, 325, 325, 325,
  20518. 325, 325, 325, 325, 325, 325, 325, 325,
  20519. 325, 325, 325, 325, 325, 325, 325, 325,
  20520. 325, 325, 325, 325, 1, 325, 325, 325,
  20521. 325, 325, 325, 325, 325, 325, 325, 325,
  20522. 325, 325, 325, 325, 325, 325, 325, 325,
  20523. 325, 325, 325, 325, 325, 325, 325, 325,
  20524. 325, 325, 325, 325, 325, 325, 325, 325,
  20525. 325, 325, 325, 325, 325, 325, 325, 325,
  20526. 325, 325, 325, 325, 325, 325, 325, 325,
  20527. 325, 325, 325, 325, 325, 325, 325, 325,
  20528. 325, 325, 325, 325, 325, 1, 325, 325,
  20529. 325, 325, 325, 325, 325, 325, 325, 325,
  20530. 325, 325, 325, 325, 325, 325, 325, 325,
  20531. 325, 325, 325, 325, 325, 325, 325, 325,
  20532. 325, 325, 325, 325, 325, 325, 1, 327,
  20533. 327, 327, 327, 327, 327, 327, 327, 327,
  20534. 327, 327, 327, 327, 327, 327, 327, 327,
  20535. 327, 327, 327, 327, 327, 327, 327, 327,
  20536. 327, 327, 327, 327, 327, 327, 327, 327,
  20537. 327, 327, 327, 327, 327, 327, 327, 327,
  20538. 327, 327, 327, 327, 327, 327, 327, 1,
  20539. 327, 327, 327, 327, 327, 327, 327, 327,
  20540. 327, 327, 327, 327, 327, 327, 327, 327,
  20541. 327, 327, 327, 327, 327, 327, 327, 327,
  20542. 327, 327, 327, 327, 327, 327, 327, 327,
  20543. 327, 327, 327, 327, 327, 327, 327, 327,
  20544. 327, 327, 327, 327, 327, 327, 327, 327,
  20545. 327, 327, 327, 327, 327, 327, 327, 327,
  20546. 327, 327, 327, 327, 327, 327, 327, 327,
  20547. 1, 327, 327, 327, 327, 327, 327, 327,
  20548. 327, 327, 327, 327, 327, 327, 327, 327,
  20549. 327, 1, 3371, 3371, 3371, 3371, 3371, 3371,
  20550. 3371, 3371, 3372, 1, 3371, 3371, 3373, 3371,
  20551. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20552. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20553. 3371, 3372, 3371, 3374, 3371, 3371, 3371, 3371,
  20554. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20555. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20556. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20557. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20558. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20559. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20560. 3371, 3371, 3371, 3371, 3371, 3375, 3371, 3371,
  20561. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20562. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20563. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20564. 3371, 3371, 3371, 3371, 3371, 3371, 3371, 3371,
  20565. 3371, 1, 1, 1, 1, 1, 1, 1,
  20566. 1, 1, 1, 1, 1, 1, 1, 1,
  20567. 1, 1, 1, 1, 1, 1, 1, 1,
  20568. 1, 1, 1, 1, 1, 1, 1, 1,
  20569. 1, 1, 1, 1, 1, 1, 1, 1,
  20570. 1, 1, 1, 1, 1, 1, 1, 1,
  20571. 1, 1, 1, 1, 1, 1, 1, 1,
  20572. 1, 1, 1, 1, 1, 1, 1, 1,
  20573. 1, 1, 1, 3376, 3376, 3376, 3376, 3376,
  20574. 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
  20575. 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
  20576. 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
  20577. 3376, 3377, 3378, 3378, 3378, 3378, 3378, 3378,
  20578. 3378, 3378, 3378, 3378, 3378, 3378, 3379, 3378,
  20579. 3378, 3380, 3381, 3381, 3381, 3382, 1, 3383,
  20580. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20581. 1, 3383, 3383, 3384, 3383, 3383, 3383, 3383,
  20582. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20583. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20584. 3385, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20585. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20586. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20587. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20588. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20589. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20590. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20591. 3383, 3383, 3386, 3383, 3383, 3383, 3383, 3383,
  20592. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20593. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20594. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20595. 3383, 3383, 3383, 3383, 3383, 3383, 1, 1,
  20596. 1, 1, 1, 1, 1, 1, 1, 1,
  20597. 1, 1, 1, 1, 1, 1, 1, 1,
  20598. 1, 1, 1, 1, 1, 1, 1, 1,
  20599. 1, 1, 1, 1, 1, 1, 1, 1,
  20600. 1, 1, 1, 1, 1, 1, 1, 1,
  20601. 1, 1, 1, 1, 1, 1, 1, 1,
  20602. 1, 1, 1, 1, 1, 1, 1, 1,
  20603. 1, 1, 1, 1, 1, 1, 1, 1,
  20604. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20605. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20606. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20607. 3387, 3387, 3387, 3387, 3387, 3387, 3388, 3389,
  20608. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20609. 3389, 3389, 3389, 3390, 3389, 3389, 3391, 3392,
  20610. 3392, 3392, 3393, 1, 3394, 1, 3383, 1,
  20611. 1, 1, 1, 1, 1, 1, 1, 1,
  20612. 1, 1, 1, 1, 1, 1, 1, 1,
  20613. 1, 1, 1, 1, 1, 3383, 1, 3395,
  20614. 1, 1, 1, 3396, 1, 1, 1, 1,
  20615. 1, 1, 1, 1, 1, 1, 1, 1,
  20616. 1, 1, 1, 1, 1, 1, 3395, 3314,
  20617. 320, 3314, 3314, 3314, 3314, 3314, 3397, 1,
  20618. 3314, 3314, 1, 3314, 322, 3314, 3314, 3314,
  20619. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20620. 1, 1, 1, 3314, 323, 3314, 3398, 3314,
  20621. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20622. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20623. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20624. 3314, 1, 1, 1, 3314, 3314, 3314, 3314,
  20625. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20626. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20627. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  20628. 3314, 3314, 3314, 3314, 3314, 1, 1, 1,
  20629. 1, 1, 1, 1, 1, 1, 1, 1,
  20630. 1, 1, 1, 1, 1, 1, 1, 1,
  20631. 1, 1, 1, 1, 1, 1, 1, 1,
  20632. 1, 1, 1, 1, 1, 1, 1, 1,
  20633. 1, 1, 1, 1, 1, 1, 1, 1,
  20634. 1, 1, 1, 1, 1, 1, 1, 1,
  20635. 1, 1, 1, 1, 1, 1, 1, 1,
  20636. 1, 1, 1, 1, 1, 1, 1, 1,
  20637. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20638. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20639. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  20640. 3319, 3319, 3319, 3319, 3319, 3319, 3320, 3321,
  20641. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  20642. 3321, 3321, 3321, 3322, 3321, 3321, 3323, 3324,
  20643. 3324, 3324, 3325, 1, 3399, 1, 1, 1,
  20644. 3400, 1, 1, 1, 1, 1, 1, 1,
  20645. 1, 1, 1, 1, 1, 1, 1, 1,
  20646. 1, 1, 1, 3399, 1, 1, 1, 1,
  20647. 1, 1, 1, 3401, 1, 1, 1, 1,
  20648. 1, 335, 1, 1, 1, 1, 1, 1,
  20649. 1, 1, 1, 1, 1, 1, 1, 1,
  20650. 1, 336, 1, 3402, 1, 3403, 1, 3399,
  20651. 1, 1, 1, 1, 1, 1, 1, 1,
  20652. 1, 1, 1, 1, 1, 1, 1, 1,
  20653. 1, 1, 1, 1, 1, 1, 3399, 1,
  20654. 3404, 1, 1, 1, 3405, 1, 1, 1,
  20655. 1, 1, 1, 1, 1, 1, 1, 1,
  20656. 1, 1, 1, 1, 1, 1, 1, 3404,
  20657. 1, 1, 1, 1, 1, 1, 1, 3406,
  20658. 1, 1, 1, 1, 1, 342, 1, 1,
  20659. 1, 1, 1, 1, 1, 1, 1, 1,
  20660. 1, 1, 1, 1, 1, 343, 1, 3407,
  20661. 1, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20662. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20663. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20664. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20665. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20666. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20667. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20668. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20669. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20670. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20671. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20672. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20673. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20674. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20675. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20676. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20677. 3383, 1, 1, 1, 1, 1, 1, 1,
  20678. 1, 1, 1, 1, 1, 1, 1, 1,
  20679. 1, 1, 1, 1, 1, 1, 1, 1,
  20680. 1, 1, 1, 1, 1, 1, 1, 1,
  20681. 1, 1, 1, 1, 1, 1, 1, 1,
  20682. 1, 1, 1, 1, 1, 1, 1, 1,
  20683. 1, 1, 1, 1, 1, 1, 1, 1,
  20684. 1, 1, 1, 1, 1, 1, 1, 1,
  20685. 1, 1, 1, 3387, 3387, 3387, 3387, 3387,
  20686. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20687. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20688. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20689. 3387, 3388, 3389, 3389, 3389, 3389, 3389, 3389,
  20690. 3389, 3389, 3389, 3389, 3389, 3389, 3390, 3389,
  20691. 3389, 3391, 3392, 3392, 3392, 3393, 1, 3383,
  20692. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20693. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20694. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20695. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20696. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20697. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20698. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20699. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 1,
  20700. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20701. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20702. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20703. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20704. 1, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20705. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20706. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20707. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20708. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20709. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20710. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20711. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20712. 3387, 1, 3387, 3387, 3387, 3387, 3387, 3387,
  20713. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20714. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20715. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20716. 3387, 3387, 1, 3389, 3389, 3389, 3389, 3389,
  20717. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20718. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20719. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20720. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20721. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20722. 3389, 3389, 3389, 1, 3389, 3389, 3389, 3389,
  20723. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20724. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20725. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20726. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20727. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20728. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20729. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20730. 3389, 3389, 3389, 3389, 1, 3389, 3389, 3389,
  20731. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20732. 3389, 3389, 3389, 3389, 3389, 1, 3383, 3383,
  20733. 3383, 3383, 3383, 3383, 3383, 3383, 3408, 1,
  20734. 3383, 3383, 3409, 3383, 3383, 3383, 3383, 3383,
  20735. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20736. 3383, 3383, 3383, 3383, 3383, 3408, 3383, 3410,
  20737. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20738. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20739. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20740. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20741. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20742. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20743. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20744. 3383, 3386, 3383, 3383, 3383, 3383, 3383, 3383,
  20745. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20746. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20747. 3383, 3383, 3383, 3383, 3383, 3383, 3383, 3383,
  20748. 3383, 3383, 3383, 3383, 3383, 1, 1, 1,
  20749. 1, 1, 1, 1, 1, 1, 1, 1,
  20750. 1, 1, 1, 1, 1, 1, 1, 1,
  20751. 1, 1, 1, 1, 1, 1, 1, 1,
  20752. 1, 1, 1, 1, 1, 1, 1, 1,
  20753. 1, 1, 1, 1, 1, 1, 1, 1,
  20754. 1, 1, 1, 1, 1, 1, 1, 1,
  20755. 1, 1, 1, 1, 1, 1, 1, 1,
  20756. 1, 1, 1, 1, 1, 1, 1, 3387,
  20757. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20758. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20759. 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
  20760. 3387, 3387, 3387, 3387, 3387, 3388, 3389, 3389,
  20761. 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3389,
  20762. 3389, 3389, 3390, 3389, 3389, 3391, 3392, 3392,
  20763. 3392, 3393, 1, 3411, 1, 3408, 1, 1,
  20764. 1, 1, 1, 1, 1, 1, 1, 1,
  20765. 1, 1, 1, 1, 1, 1, 1, 1,
  20766. 1, 1, 1, 1, 3408, 1, 3412, 1,
  20767. 1, 1, 3413, 1, 1, 1, 1, 1,
  20768. 1, 1, 1, 1, 1, 1, 1, 1,
  20769. 1, 1, 1, 1, 1, 3412, 1, 1,
  20770. 1, 1, 1, 1, 1, 3414, 1, 1,
  20771. 1, 1, 1, 335, 1, 1, 1, 1,
  20772. 1, 1, 1, 1, 1, 1, 1, 1,
  20773. 1, 1, 1, 336, 1, 3415, 1, 3416,
  20774. 1, 3412, 1, 1, 1, 1, 1, 1,
  20775. 1, 1, 1, 1, 1, 1, 1, 1,
  20776. 1, 1, 1, 1, 1, 1, 1, 1,
  20777. 3412, 1, 3417, 1, 1, 1, 3418, 1,
  20778. 1, 1, 1, 1, 1, 1, 1, 1,
  20779. 1, 1, 1, 1, 1, 1, 1, 1,
  20780. 1, 3417, 1, 1, 1, 1, 1, 1,
  20781. 1, 3419, 1, 1, 1, 1, 1, 342,
  20782. 1, 1, 1, 1, 1, 1, 1, 1,
  20783. 1, 1, 1, 1, 1, 1, 1, 343,
  20784. 1, 3420, 1, 3421, 1, 1, 1, 3422,
  20785. 1, 1, 1, 1, 1, 1, 1, 1,
  20786. 1, 1, 1, 1, 1, 1, 1, 1,
  20787. 1, 1, 3421, 3423, 3424, 3423, 3423, 3423,
  20788. 3423, 3423, 3425, 1, 3423, 3423, 3426, 3423,
  20789. 3427, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20790. 3423, 3423, 3423, 3423, 1, 1, 1, 3423,
  20791. 1, 3423, 3428, 3423, 3423, 3423, 3423, 3423,
  20792. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20793. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20794. 3423, 3423, 3423, 3423, 3423, 1, 1, 1,
  20795. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20796. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20797. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20798. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  20799. 3423, 1, 1, 1, 1, 1, 1, 1,
  20800. 1, 1, 1, 1, 1, 1, 1, 1,
  20801. 1, 1, 1, 1, 1, 1, 1, 1,
  20802. 1, 1, 1, 1, 1, 1, 1, 1,
  20803. 1, 1, 1, 1, 1, 1, 1, 1,
  20804. 1, 1, 1, 1, 1, 1, 1, 1,
  20805. 1, 1, 1, 1, 1, 1, 1, 1,
  20806. 1, 1, 1, 1, 1, 1, 1, 1,
  20807. 1, 1, 1, 1, 3429, 3429, 3429, 3429,
  20808. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  20809. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  20810. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  20811. 3429, 3429, 3430, 3431, 3431, 3431, 3431, 3431,
  20812. 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3432,
  20813. 3431, 3431, 3433, 3434, 3434, 3434, 3435, 1,
  20814. 314, 1, 1, 1, 3436, 1, 1, 1,
  20815. 1, 1, 1, 1, 1, 1, 1, 1,
  20816. 1, 1, 1, 1, 1, 1, 1, 314,
  20817. 1, 1, 1, 1, 1, 1, 1, 3437,
  20818. 1, 1, 1, 314, 1, 1, 1, 1,
  20819. 1, 1, 1, 1, 1, 1, 1, 1,
  20820. 1, 1, 1, 1, 1, 1, 1, 315,
  20821. 1, 3438, 1, 314, 1, 1, 1, 1,
  20822. 1, 1, 1, 1, 1, 1, 1, 1,
  20823. 1, 1, 1, 1, 1, 1, 1, 1,
  20824. 1, 1, 314, 1, 3426, 1, 1, 1,
  20825. 3439, 1, 1, 1, 1, 1, 1, 1,
  20826. 1, 1, 1, 1, 1, 1, 1, 1,
  20827. 1, 1, 1, 3426, 1, 1, 1, 1,
  20828. 1, 1, 1, 3440, 1, 1, 1, 3426,
  20829. 1, 1, 1, 1, 1, 1, 1, 1,
  20830. 1, 1, 1, 1, 1, 1, 1, 1,
  20831. 1, 1, 1, 3428, 1, 3441, 1, 1,
  20832. 1, 3442, 1, 1, 1, 1, 1, 1,
  20833. 1, 1, 1, 1, 1, 1, 1, 1,
  20834. 1, 1, 1, 1, 3441, 3443, 3444, 3443,
  20835. 3443, 3443, 3443, 3443, 3445, 1, 3443, 3443,
  20836. 1, 3443, 3446, 3443, 3443, 3443, 3443, 3443,
  20837. 3443, 3443, 3443, 3443, 3443, 3443, 1, 1,
  20838. 1, 3443, 1, 3443, 1, 3443, 3443, 3443,
  20839. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
  20840. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
  20841. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3447,
  20842. 1, 1, 3443, 3443, 3443, 3443, 3443, 3443,
  20843. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
  20844. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
  20845. 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
  20846. 3443, 3443, 3443, 1, 1, 1, 1, 1,
  20847. 1, 1, 1, 1, 1, 1, 1, 1,
  20848. 1, 1, 1, 1, 1, 1, 1, 1,
  20849. 1, 1, 1, 1, 1, 1, 1, 1,
  20850. 1, 1, 1, 1, 1, 1, 1, 1,
  20851. 1, 1, 1, 1, 1, 1, 1, 1,
  20852. 1, 1, 1, 1, 1, 1, 1, 1,
  20853. 1, 1, 1, 1, 1, 1, 1, 1,
  20854. 1, 1, 1, 1, 1, 1, 3448, 3448,
  20855. 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
  20856. 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
  20857. 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
  20858. 3448, 3448, 3448, 3448, 3449, 3450, 3450, 3450,
  20859. 3450, 3450, 3450, 3450, 3450, 3450, 3450, 3450,
  20860. 3450, 3451, 3450, 3450, 3452, 3453, 3453, 3453,
  20861. 3454, 1, 3455, 1, 1, 1, 3456, 1,
  20862. 1, 1, 1, 1, 1, 1, 1, 1,
  20863. 1, 1, 1, 1, 1, 1, 1, 1,
  20864. 1, 3455, 3457, 3458, 3457, 3457, 3457, 3457,
  20865. 3457, 3459, 1, 3457, 3457, 1, 3457, 3460,
  20866. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20867. 3457, 3457, 3457, 1, 1, 1, 3457, 1,
  20868. 3457, 1, 3457, 3457, 3457, 3457, 3457, 3457,
  20869. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20870. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20871. 3457, 3457, 3457, 3457, 3461, 1, 1, 3457,
  20872. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20873. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20874. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20875. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20876. 1, 1, 1, 1, 1, 1, 1, 1,
  20877. 1, 1, 1, 1, 1, 1, 1, 1,
  20878. 1, 1, 1, 1, 1, 1, 1, 1,
  20879. 1, 1, 1, 1, 1, 1, 1, 1,
  20880. 1, 1, 1, 1, 1, 1, 1, 1,
  20881. 1, 1, 1, 1, 1, 1, 1, 1,
  20882. 1, 1, 1, 1, 1, 1, 1, 1,
  20883. 1, 1, 1, 1, 1, 1, 1, 1,
  20884. 1, 1, 1, 3462, 3462, 3462, 3462, 3462,
  20885. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20886. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20887. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20888. 3462, 3463, 3464, 3464, 3464, 3464, 3464, 3464,
  20889. 3464, 3464, 3464, 3464, 3464, 3464, 3465, 3464,
  20890. 3464, 3466, 3467, 3467, 3467, 3468, 1, 3469,
  20891. 1, 3455, 1, 1, 1, 1, 1, 1,
  20892. 1, 1, 1, 1, 1, 1, 1, 1,
  20893. 1, 1, 1, 1, 1, 1, 1, 1,
  20894. 3455, 1, 3470, 1, 1, 1, 3471, 1,
  20895. 1, 1, 1, 1, 1, 1, 1, 1,
  20896. 1, 1, 1, 1, 1, 1, 1, 1,
  20897. 1, 3470, 3457, 3458, 3457, 3457, 3457, 3457,
  20898. 3457, 3472, 1, 3457, 3457, 3473, 3457, 3474,
  20899. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20900. 3457, 3457, 3457, 3475, 1, 1, 3457, 1,
  20901. 3457, 1, 3457, 3457, 3457, 3457, 3457, 3457,
  20902. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20903. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20904. 3457, 3457, 3457, 3457, 1, 1, 1, 3457,
  20905. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20906. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20907. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20908. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  20909. 1, 1, 1, 1, 1, 1, 1, 1,
  20910. 1, 1, 1, 1, 1, 1, 1, 1,
  20911. 1, 1, 1, 1, 1, 1, 1, 1,
  20912. 1, 1, 1, 1, 1, 1, 1, 1,
  20913. 1, 1, 1, 1, 1, 1, 1, 1,
  20914. 1, 1, 1, 1, 1, 1, 1, 1,
  20915. 1, 1, 1, 1, 1, 1, 1, 1,
  20916. 1, 1, 1, 1, 1, 1, 1, 1,
  20917. 1, 1, 1, 3462, 3462, 3462, 3462, 3462,
  20918. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20919. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20920. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  20921. 3462, 3463, 3464, 3464, 3464, 3464, 3464, 3464,
  20922. 3464, 3464, 3464, 3464, 3464, 3464, 3465, 3464,
  20923. 3464, 3466, 3467, 3467, 3467, 3468, 1, 3470,
  20924. 1, 1, 1, 3471, 1, 1, 1, 1,
  20925. 1, 1, 1, 1, 1, 1, 1, 1,
  20926. 1, 1, 1, 1, 1, 1, 3470, 1,
  20927. 1, 1, 1, 1, 1, 1, 3472, 1,
  20928. 1, 1, 3473, 1, 3476, 1, 1, 1,
  20929. 1, 1, 1, 1, 1, 1, 1, 1,
  20930. 3475, 1, 3477, 1, 3470, 1, 1, 1,
  20931. 1, 1, 1, 1, 1, 1, 1, 1,
  20932. 1, 1, 1, 1, 1, 1, 1, 1,
  20933. 1, 1, 1, 3470, 1, 3478, 1, 1,
  20934. 1, 3479, 1, 1, 1, 1, 1, 1,
  20935. 1, 1, 1, 1, 1, 1, 1, 1,
  20936. 1, 1, 1, 1, 3478, 1, 1, 1,
  20937. 1, 1, 1, 1, 3480, 1, 1, 1,
  20938. 3481, 1, 3482, 1, 1, 1, 1, 1,
  20939. 1, 1, 1, 1, 1, 1, 3483, 1,
  20940. 3484, 1, 1, 1, 3485, 1, 1, 1,
  20941. 1, 1, 1, 1, 1, 1, 1, 1,
  20942. 1, 1, 1, 1, 1, 1, 1, 3484,
  20943. 1, 1, 1, 1, 1, 1, 1, 3486,
  20944. 1, 1, 1, 3484, 1, 1, 1, 1,
  20945. 1, 1, 1, 1, 1, 1, 1, 1,
  20946. 1, 3487, 1, 1, 1, 1, 1, 315,
  20947. 1, 3488, 1, 3484, 1, 1, 1, 1,
  20948. 1, 1, 1, 1, 1, 1, 1, 1,
  20949. 1, 1, 1, 1, 1, 1, 1, 1,
  20950. 1, 1, 3484, 1, 3489, 1, 1, 1,
  20951. 3490, 1, 1, 1, 1, 1, 1, 1,
  20952. 1, 1, 1, 1, 1, 1, 1, 1,
  20953. 1, 1, 1, 3489, 1, 1, 1, 1,
  20954. 1, 1, 1, 3491, 1, 1, 1, 3489,
  20955. 1, 1, 1, 1, 1, 1, 1, 1,
  20956. 1, 1, 1, 1, 1, 3492, 1, 1,
  20957. 1, 1, 1, 3428, 1, 3493, 1, 1,
  20958. 1, 3494, 1, 1, 1, 1, 1, 1,
  20959. 1, 1, 1, 1, 1, 1, 1, 1,
  20960. 1, 1, 1, 1, 3493, 3495, 3496, 3495,
  20961. 3495, 3495, 3495, 3495, 3497, 1, 3495, 3495,
  20962. 1, 3495, 3498, 3495, 3495, 3495, 3495, 3495,
  20963. 3495, 3495, 3495, 3495, 3495, 3495, 1, 1,
  20964. 1, 3495, 1, 3495, 1, 3495, 3495, 3495,
  20965. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495,
  20966. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495,
  20967. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 1,
  20968. 1, 1, 3495, 3495, 3495, 3495, 3495, 3495,
  20969. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495,
  20970. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495,
  20971. 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495,
  20972. 3495, 3495, 3495, 1, 1, 1, 1, 1,
  20973. 1, 1, 1, 1, 1, 1, 1, 1,
  20974. 1, 1, 1, 1, 1, 1, 1, 1,
  20975. 1, 1, 1, 1, 1, 1, 1, 1,
  20976. 1, 1, 1, 1, 1, 1, 1, 1,
  20977. 1, 1, 1, 1, 1, 1, 1, 1,
  20978. 1, 1, 1, 1, 1, 1, 1, 1,
  20979. 1, 1, 1, 1, 1, 1, 1, 1,
  20980. 1, 1, 1, 1, 1, 1, 3499, 3499,
  20981. 3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499,
  20982. 3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499,
  20983. 3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499,
  20984. 3499, 3499, 3499, 3499, 3500, 3501, 3501, 3501,
  20985. 3501, 3501, 3501, 3501, 3501, 3501, 3501, 3501,
  20986. 3501, 3502, 3501, 3501, 3503, 3504, 3504, 3504,
  20987. 3505, 1, 3506, 1, 1, 1, 3507, 1,
  20988. 1, 1, 1, 1, 1, 1, 1, 1,
  20989. 1, 1, 1, 1, 1, 1, 1, 1,
  20990. 1, 3506, 298, 299, 298, 298, 298, 298,
  20991. 298, 3508, 1, 298, 298, 1, 298, 302,
  20992. 298, 298, 298, 298, 298, 298, 298, 298,
  20993. 298, 298, 298, 1, 1, 1, 298, 1,
  20994. 298, 1, 298, 298, 298, 298, 298, 298,
  20995. 298, 298, 298, 298, 298, 298, 298, 298,
  20996. 298, 298, 298, 298, 298, 298, 298, 298,
  20997. 298, 298, 298, 298, 1, 1, 1, 298,
  20998. 298, 298, 298, 298, 298, 298, 298, 298,
  20999. 298, 298, 298, 298, 298, 298, 298, 298,
  21000. 298, 298, 298, 298, 298, 298, 298, 298,
  21001. 298, 298, 298, 298, 298, 298, 298, 298,
  21002. 1, 1, 1, 1, 1, 1, 1, 1,
  21003. 1, 1, 1, 1, 1, 1, 1, 1,
  21004. 1, 1, 1, 1, 1, 1, 1, 1,
  21005. 1, 1, 1, 1, 1, 1, 1, 1,
  21006. 1, 1, 1, 1, 1, 1, 1, 1,
  21007. 1, 1, 1, 1, 1, 1, 1, 1,
  21008. 1, 1, 1, 1, 1, 1, 1, 1,
  21009. 1, 1, 1, 1, 1, 1, 1, 1,
  21010. 1, 1, 1, 304, 304, 304, 304, 304,
  21011. 304, 304, 304, 304, 304, 304, 304, 304,
  21012. 304, 304, 304, 304, 304, 304, 304, 304,
  21013. 304, 304, 304, 304, 304, 304, 304, 304,
  21014. 304, 305, 306, 306, 306, 306, 306, 306,
  21015. 306, 306, 306, 306, 306, 306, 307, 306,
  21016. 306, 308, 309, 309, 309, 310, 1, 3509,
  21017. 1, 3506, 1, 1, 1, 1, 1, 1,
  21018. 1, 1, 1, 1, 1, 1, 1, 1,
  21019. 1, 1, 1, 1, 1, 1, 1, 1,
  21020. 3506, 1, 3510, 1, 1, 1, 3511, 1,
  21021. 1, 1, 1, 1, 1, 1, 1, 1,
  21022. 1, 1, 1, 1, 1, 1, 1, 1,
  21023. 1, 3510, 3423, 3424, 3423, 3423, 3423, 3423,
  21024. 3423, 3512, 1, 3423, 3423, 1, 3423, 3427,
  21025. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21026. 3423, 3423, 3423, 1, 1, 1, 3423, 1,
  21027. 3423, 1, 3423, 3423, 3423, 3423, 3423, 3423,
  21028. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21029. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21030. 3423, 3423, 3423, 3423, 1, 1, 1, 3423,
  21031. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21032. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21033. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21034. 3423, 3423, 3423, 3423, 3423, 3423, 3423, 3423,
  21035. 1, 1, 1, 1, 1, 1, 1, 1,
  21036. 1, 1, 1, 1, 1, 1, 1, 1,
  21037. 1, 1, 1, 1, 1, 1, 1, 1,
  21038. 1, 1, 1, 1, 1, 1, 1, 1,
  21039. 1, 1, 1, 1, 1, 1, 1, 1,
  21040. 1, 1, 1, 1, 1, 1, 1, 1,
  21041. 1, 1, 1, 1, 1, 1, 1, 1,
  21042. 1, 1, 1, 1, 1, 1, 1, 1,
  21043. 1, 1, 1, 3429, 3429, 3429, 3429, 3429,
  21044. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  21045. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  21046. 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
  21047. 3429, 3430, 3431, 3431, 3431, 3431, 3431, 3431,
  21048. 3431, 3431, 3431, 3431, 3431, 3431, 3432, 3431,
  21049. 3431, 3433, 3434, 3434, 3434, 3435, 1, 3314,
  21050. 320, 3314, 3314, 3314, 3314, 3314, 1, 1,
  21051. 3314, 3314, 1, 3314, 3513, 3314, 3314, 3314,
  21052. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21053. 1, 1, 1, 3314, 1, 3314, 1, 3314,
  21054. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21055. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21056. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21057. 3314, 1, 1, 1, 3314, 3314, 3314, 3314,
  21058. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21059. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21060. 3314, 3314, 3314, 3314, 3314, 3314, 3314, 3314,
  21061. 3314, 3314, 3314, 3314, 3314, 1, 1, 1,
  21062. 1, 1, 1, 1, 1, 1, 1, 1,
  21063. 1, 1, 1, 1, 1, 1, 1, 1,
  21064. 1, 1, 1, 1, 1, 1, 1, 1,
  21065. 1, 1, 1, 1, 1, 1, 1, 1,
  21066. 1, 1, 1, 1, 1, 1, 1, 1,
  21067. 1, 1, 1, 1, 1, 1, 1, 1,
  21068. 1, 1, 1, 1, 1, 1, 1, 1,
  21069. 1, 1, 1, 1, 1, 1, 1, 1,
  21070. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  21071. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  21072. 3319, 3319, 3319, 3319, 3319, 3319, 3319, 3319,
  21073. 3319, 3319, 3319, 3319, 3319, 3319, 3320, 3321,
  21074. 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
  21075. 3321, 3321, 3321, 3322, 3321, 3321, 3323, 3324,
  21076. 3324, 3324, 3325, 1, 3476, 1, 1, 1,
  21077. 3514, 1, 1, 1, 1, 1, 1, 1,
  21078. 1, 1, 1, 1, 1, 1, 1, 1,
  21079. 1, 1, 1, 3476, 3515, 1, 3515, 3515,
  21080. 3515, 3515, 3515, 3516, 1, 3515, 3515, 1,
  21081. 3515, 1, 3515, 3515, 3515, 3515, 3515, 3515,
  21082. 3515, 3515, 3515, 3515, 3515, 1, 1, 1,
  21083. 3515, 1, 3515, 1, 3515, 3515, 3515, 3515,
  21084. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21085. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21086. 3515, 3515, 3515, 3515, 3515, 3515, 1, 1,
  21087. 1, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21088. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21089. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21090. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21091. 3515, 3515, 1, 1, 1, 1, 1, 1,
  21092. 1, 1, 1, 1, 1, 1, 1, 1,
  21093. 1, 1, 1, 1, 1, 1, 1, 1,
  21094. 1, 1, 1, 1, 1, 1, 1, 1,
  21095. 1, 1, 1, 1, 1, 1, 1, 1,
  21096. 1, 1, 1, 1, 1, 1, 1, 1,
  21097. 1, 1, 1, 1, 1, 1, 1, 1,
  21098. 1, 1, 1, 1, 1, 1, 1, 1,
  21099. 1, 1, 1, 1, 1, 3517, 3517, 3517,
  21100. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21101. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21102. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21103. 3517, 3517, 3517, 3518, 3519, 3519, 3519, 3519,
  21104. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21105. 3520, 3519, 3519, 3521, 3522, 3522, 3522, 3523,
  21106. 1, 3524, 1, 3476, 1, 1, 1, 1,
  21107. 1, 1, 1, 1, 1, 1, 1, 1,
  21108. 1, 1, 1, 1, 1, 1, 1, 1,
  21109. 1, 1, 3476, 1, 3470, 1, 1, 1,
  21110. 3471, 1, 1, 1, 1, 1, 1, 1,
  21111. 1, 1, 1, 1, 1, 1, 1, 1,
  21112. 1, 1, 1, 3470, 3515, 1, 3515, 3515,
  21113. 3515, 3515, 3515, 3472, 1, 3515, 3515, 3473,
  21114. 3515, 3476, 3515, 3515, 3515, 3515, 3515, 3515,
  21115. 3515, 3515, 3515, 3515, 3515, 3475, 1, 1,
  21116. 3515, 1, 3515, 1, 3515, 3515, 3515, 3515,
  21117. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21118. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21119. 3515, 3515, 3515, 3515, 3515, 3515, 1, 1,
  21120. 1, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21121. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21122. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21123. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21124. 3515, 3515, 1, 1, 1, 1, 1, 1,
  21125. 1, 1, 1, 1, 1, 1, 1, 1,
  21126. 1, 1, 1, 1, 1, 1, 1, 1,
  21127. 1, 1, 1, 1, 1, 1, 1, 1,
  21128. 1, 1, 1, 1, 1, 1, 1, 1,
  21129. 1, 1, 1, 1, 1, 1, 1, 1,
  21130. 1, 1, 1, 1, 1, 1, 1, 1,
  21131. 1, 1, 1, 1, 1, 1, 1, 1,
  21132. 1, 1, 1, 1, 1, 3517, 3517, 3517,
  21133. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21134. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21135. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21136. 3517, 3517, 3517, 3518, 3519, 3519, 3519, 3519,
  21137. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21138. 3520, 3519, 3519, 3521, 3522, 3522, 3522, 3523,
  21139. 1, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21140. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21141. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21142. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21143. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21144. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21145. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21146. 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
  21147. 3515, 1, 3517, 3517, 3517, 3517, 3517, 3517,
  21148. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21149. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21150. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21151. 3517, 3517, 1, 3517, 3517, 3517, 3517, 3517,
  21152. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21153. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21154. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21155. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21156. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21157. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21158. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21159. 3517, 3517, 3517, 1, 3517, 3517, 3517, 3517,
  21160. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21161. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21162. 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
  21163. 3517, 3517, 3517, 3517, 1, 3519, 3519, 3519,
  21164. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21165. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21166. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21167. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21168. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21169. 3519, 3519, 3519, 3519, 3519, 1, 3519, 3519,
  21170. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21171. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21172. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21173. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21174. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21175. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21176. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21177. 3519, 3519, 3519, 3519, 3519, 3519, 1, 3519,
  21178. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3519,
  21179. 3519, 3519, 3519, 3519, 3519, 3519, 3519, 1,
  21180. 3482, 1, 1, 1, 3525, 1, 1, 1,
  21181. 1, 1, 1, 1, 1, 1, 1, 1,
  21182. 1, 1, 1, 1, 1, 1, 1, 3482,
  21183. 3526, 1, 3526, 3526, 3526, 3526, 3526, 3527,
  21184. 1, 3526, 3526, 1, 3526, 1, 3526, 3526,
  21185. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21186. 3526, 1, 1, 1, 3526, 1, 3526, 1,
  21187. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21188. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21189. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21190. 3526, 3526, 1, 1, 1, 3526, 3526, 3526,
  21191. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21192. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21193. 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526,
  21194. 3526, 3526, 3526, 3526, 3526, 3526, 1, 1,
  21195. 1, 1, 1, 1, 1, 1, 1, 1,
  21196. 1, 1, 1, 1, 1, 1, 1, 1,
  21197. 1, 1, 1, 1, 1, 1, 1, 1,
  21198. 1, 1, 1, 1, 1, 1, 1, 1,
  21199. 1, 1, 1, 1, 1, 1, 1, 1,
  21200. 1, 1, 1, 1, 1, 1, 1, 1,
  21201. 1, 1, 1, 1, 1, 1, 1, 1,
  21202. 1, 1, 1, 1, 1, 1, 1, 1,
  21203. 1, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
  21204. 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
  21205. 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
  21206. 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3529,
  21207. 3530, 3530, 3530, 3530, 3530, 3530, 3530, 3530,
  21208. 3530, 3530, 3530, 3530, 3531, 3530, 3530, 3532,
  21209. 3533, 3533, 3533, 3534, 1, 3535, 3535, 3535,
  21210. 3535, 3535, 3535, 3535, 3535, 3458, 1, 3535,
  21211. 3535, 3536, 3535, 3535, 3535, 3535, 3535, 3535,
  21212. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21213. 3535, 3535, 3535, 3535, 3458, 3535, 1, 3535,
  21214. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21215. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21216. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21217. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21218. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21219. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21220. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21221. 3537, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21222. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21223. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21224. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21225. 3535, 3535, 3535, 3535, 1, 1, 1, 1,
  21226. 1, 1, 1, 1, 1, 1, 1, 1,
  21227. 1, 1, 1, 1, 1, 1, 1, 1,
  21228. 1, 1, 1, 1, 1, 1, 1, 1,
  21229. 1, 1, 1, 1, 1, 1, 1, 1,
  21230. 1, 1, 1, 1, 1, 1, 1, 1,
  21231. 1, 1, 1, 1, 1, 1, 1, 1,
  21232. 1, 1, 1, 1, 1, 1, 1, 1,
  21233. 1, 1, 1, 1, 1, 1, 3538, 3538,
  21234. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21235. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21236. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21237. 3538, 3538, 3538, 3538, 3539, 3540, 3540, 3540,
  21238. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21239. 3540, 3541, 3540, 3540, 3542, 3543, 3543, 3543,
  21240. 3544, 1, 3535, 3535, 3535, 3535, 3535, 3535,
  21241. 3535, 3535, 3535, 1, 3535, 3535, 3545, 3535,
  21242. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21243. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21244. 3535, 3535, 3535, 3546, 3535, 3535, 3535, 3535,
  21245. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21246. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21247. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21248. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21249. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21250. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21251. 3535, 3535, 3535, 3535, 3535, 3537, 3535, 3535,
  21252. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21253. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21254. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21255. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21256. 3535, 1, 1, 1, 1, 1, 1, 1,
  21257. 1, 1, 1, 1, 1, 1, 1, 1,
  21258. 1, 1, 1, 1, 1, 1, 1, 1,
  21259. 1, 1, 1, 1, 1, 1, 1, 1,
  21260. 1, 1, 1, 1, 1, 1, 1, 1,
  21261. 1, 1, 1, 1, 1, 1, 1, 1,
  21262. 1, 1, 1, 1, 1, 1, 1, 1,
  21263. 1, 1, 1, 1, 1, 1, 1, 1,
  21264. 1, 1, 1, 3538, 3538, 3538, 3538, 3538,
  21265. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21266. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21267. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21268. 3538, 3539, 3540, 3540, 3540, 3540, 3540, 3540,
  21269. 3540, 3540, 3540, 3540, 3540, 3540, 3541, 3540,
  21270. 3540, 3542, 3543, 3543, 3543, 3544, 1, 3547,
  21271. 1, 3535, 1, 1, 1, 1, 1, 1,
  21272. 1, 1, 1, 1, 1, 1, 1, 1,
  21273. 1, 1, 1, 1, 1, 1, 1, 1,
  21274. 3535, 1, 3548, 1, 1, 1, 3549, 1,
  21275. 1, 1, 1, 1, 1, 1, 1, 1,
  21276. 1, 1, 1, 1, 1, 1, 1, 1,
  21277. 1, 3548, 3546, 3458, 3546, 3546, 3546, 3546,
  21278. 3546, 3550, 1, 3546, 3546, 3473, 3546, 3460,
  21279. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21280. 3546, 3546, 3546, 3475, 1, 1, 3546, 1,
  21281. 3546, 1, 3546, 3546, 3546, 3546, 3546, 3546,
  21282. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21283. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21284. 3546, 3546, 3546, 3546, 1, 1, 1, 3546,
  21285. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21286. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21287. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21288. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21289. 1, 1, 1, 1, 1, 1, 1, 1,
  21290. 1, 1, 1, 1, 1, 1, 1, 1,
  21291. 1, 1, 1, 1, 1, 1, 1, 1,
  21292. 1, 1, 1, 1, 1, 1, 1, 1,
  21293. 1, 1, 1, 1, 1, 1, 1, 1,
  21294. 1, 1, 1, 1, 1, 1, 1, 1,
  21295. 1, 1, 1, 1, 1, 1, 1, 1,
  21296. 1, 1, 1, 1, 1, 1, 1, 1,
  21297. 1, 1, 1, 3551, 3551, 3551, 3551, 3551,
  21298. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21299. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21300. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21301. 3551, 3552, 3553, 3553, 3553, 3553, 3553, 3553,
  21302. 3553, 3553, 3553, 3553, 3553, 3553, 3554, 3553,
  21303. 3553, 3555, 3556, 3556, 3556, 3557, 1, 3548,
  21304. 1, 1, 1, 3549, 1, 1, 1, 1,
  21305. 1, 1, 1, 1, 1, 1, 1, 1,
  21306. 1, 1, 1, 1, 1, 1, 3548, 1,
  21307. 1, 1, 1, 1, 1, 1, 3550, 1,
  21308. 1, 1, 3473, 1, 1, 1, 1, 1,
  21309. 1, 1, 1, 1, 1, 1, 1, 1,
  21310. 3475, 1, 3558, 1, 3548, 1, 1, 1,
  21311. 1, 1, 1, 1, 1, 1, 1, 1,
  21312. 1, 1, 1, 1, 1, 1, 1, 1,
  21313. 1, 1, 1, 3548, 1, 3559, 1, 1,
  21314. 1, 3560, 1, 1, 1, 1, 1, 1,
  21315. 1, 1, 1, 1, 1, 1, 1, 1,
  21316. 1, 1, 1, 1, 3559, 1, 1, 1,
  21317. 1, 1, 1, 1, 3561, 1, 1, 1,
  21318. 3481, 1, 1, 1, 1, 1, 1, 1,
  21319. 1, 1, 1, 1, 1, 1, 3483, 1,
  21320. 3546, 3458, 3546, 3546, 3546, 3546, 3546, 1,
  21321. 1, 3546, 3546, 1, 3546, 3460, 3546, 3546,
  21322. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21323. 3546, 1, 1, 1, 3546, 1, 3546, 1,
  21324. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21325. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21326. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21327. 3546, 3546, 1, 1, 1, 3546, 3546, 3546,
  21328. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21329. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21330. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21331. 3546, 3546, 3546, 3546, 3546, 3546, 1, 1,
  21332. 1, 1, 1, 1, 1, 1, 1, 1,
  21333. 1, 1, 1, 1, 1, 1, 1, 1,
  21334. 1, 1, 1, 1, 1, 1, 1, 1,
  21335. 1, 1, 1, 1, 1, 1, 1, 1,
  21336. 1, 1, 1, 1, 1, 1, 1, 1,
  21337. 1, 1, 1, 1, 1, 1, 1, 1,
  21338. 1, 1, 1, 1, 1, 1, 1, 1,
  21339. 1, 1, 1, 1, 1, 1, 1, 1,
  21340. 1, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21341. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21342. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21343. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3552,
  21344. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21345. 3553, 3553, 3553, 3553, 3554, 3553, 3553, 3555,
  21346. 3556, 3556, 3556, 3557, 1, 3546, 3546, 3546,
  21347. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21348. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21349. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21350. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21351. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21352. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21353. 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
  21354. 3546, 3546, 3546, 3546, 3546, 1, 3551, 3551,
  21355. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21356. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21357. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21358. 3551, 3551, 3551, 3551, 3551, 3551, 1, 3551,
  21359. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21360. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21361. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21362. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21363. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21364. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21365. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21366. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 1,
  21367. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21368. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21369. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21370. 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
  21371. 1, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21372. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21373. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21374. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21375. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21376. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21377. 3553, 1, 3553, 3553, 3553, 3553, 3553, 3553,
  21378. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21379. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21380. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21381. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21382. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21383. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21384. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21385. 3553, 3553, 1, 3553, 3553, 3553, 3553, 3553,
  21386. 3553, 3553, 3553, 3553, 3553, 3553, 3553, 3553,
  21387. 3553, 3553, 3553, 1, 3535, 3535, 3535, 3535,
  21388. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21389. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21390. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21391. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21392. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21393. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21394. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21395. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21396. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21397. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21398. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21399. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21400. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21401. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21402. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21403. 3535, 3535, 3535, 3535, 1, 1, 1, 1,
  21404. 1, 1, 1, 1, 1, 1, 1, 1,
  21405. 1, 1, 1, 1, 1, 1, 1, 1,
  21406. 1, 1, 1, 1, 1, 1, 1, 1,
  21407. 1, 1, 1, 1, 1, 1, 1, 1,
  21408. 1, 1, 1, 1, 1, 1, 1, 1,
  21409. 1, 1, 1, 1, 1, 1, 1, 1,
  21410. 1, 1, 1, 1, 1, 1, 1, 1,
  21411. 1, 1, 1, 1, 1, 1, 3538, 3538,
  21412. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21413. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21414. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21415. 3538, 3538, 3538, 3538, 3539, 3540, 3540, 3540,
  21416. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21417. 3540, 3541, 3540, 3540, 3542, 3543, 3543, 3543,
  21418. 3544, 1, 3535, 3535, 3535, 3535, 3535, 3535,
  21419. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21420. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21421. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21422. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21423. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21424. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21425. 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535,
  21426. 3535, 3535, 1, 3538, 3538, 3538, 3538, 3538,
  21427. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21428. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21429. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21430. 3538, 3538, 3538, 1, 3538, 3538, 3538, 3538,
  21431. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21432. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21433. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21434. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21435. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21436. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21437. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21438. 3538, 3538, 3538, 3538, 1, 3538, 3538, 3538,
  21439. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21440. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21441. 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
  21442. 3538, 3538, 3538, 3538, 3538, 1, 3540, 3540,
  21443. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21444. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21445. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21446. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21447. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21448. 3540, 3540, 3540, 3540, 3540, 3540, 1, 3540,
  21449. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21450. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21451. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21452. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21453. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21454. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21455. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21456. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 1,
  21457. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21458. 3540, 3540, 3540, 3540, 3540, 3540, 3540, 3540,
  21459. 1, 3562, 1, 3458, 1, 1, 1, 1,
  21460. 1, 1, 1, 1, 1, 1, 1, 1,
  21461. 1, 1, 1, 1, 1, 1, 1, 1,
  21462. 1, 1, 3458, 1, 3476, 1, 1, 1,
  21463. 3514, 1, 1, 1, 1, 1, 1, 1,
  21464. 1, 1, 1, 1, 1, 1, 1, 1,
  21465. 1, 1, 1, 3476, 3457, 3458, 3457, 3457,
  21466. 3457, 3457, 3457, 3516, 1, 3457, 3457, 1,
  21467. 3457, 3460, 3457, 3457, 3457, 3457, 3457, 3457,
  21468. 3457, 3457, 3457, 3457, 3457, 1, 1, 1,
  21469. 3457, 1, 3457, 1, 3457, 3457, 3457, 3457,
  21470. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21471. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21472. 3457, 3457, 3457, 3457, 3457, 3457, 1, 1,
  21473. 1, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21474. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21475. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21476. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21477. 3457, 3457, 1, 1, 1, 1, 1, 1,
  21478. 1, 1, 1, 1, 1, 1, 1, 1,
  21479. 1, 1, 1, 1, 1, 1, 1, 1,
  21480. 1, 1, 1, 1, 1, 1, 1, 1,
  21481. 1, 1, 1, 1, 1, 1, 1, 1,
  21482. 1, 1, 1, 1, 1, 1, 1, 1,
  21483. 1, 1, 1, 1, 1, 1, 1, 1,
  21484. 1, 1, 1, 1, 1, 1, 1, 1,
  21485. 1, 1, 1, 1, 1, 3462, 3462, 3462,
  21486. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21487. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21488. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21489. 3462, 3462, 3462, 3463, 3464, 3464, 3464, 3464,
  21490. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21491. 3465, 3464, 3464, 3466, 3467, 3467, 3467, 3468,
  21492. 1, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21493. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21494. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21495. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21496. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21497. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21498. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21499. 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
  21500. 3457, 1, 3462, 3462, 3462, 3462, 3462, 3462,
  21501. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21502. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21503. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21504. 3462, 3462, 1, 3462, 3462, 3462, 3462, 3462,
  21505. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21506. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21507. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21508. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21509. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21510. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21511. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21512. 3462, 3462, 3462, 1, 3462, 3462, 3462, 3462,
  21513. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21514. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21515. 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
  21516. 3462, 3462, 3462, 3462, 1, 3464, 3464, 3464,
  21517. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21518. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21519. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21520. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21521. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21522. 3464, 3464, 3464, 3464, 3464, 1, 3464, 3464,
  21523. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21524. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21525. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21526. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21527. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21528. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21529. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21530. 3464, 3464, 3464, 3464, 3464, 3464, 1, 3464,
  21531. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
  21532. 3464, 3464, 3464, 3464, 3464, 3464, 3464, 1,
  21533. 3563, 1, 1, 1, 3564, 1, 1, 1,
  21534. 1, 1, 1, 1, 1, 1, 1, 1,
  21535. 1, 1, 1, 1, 1, 1, 1, 3563,
  21536. 3565, 3566, 3565, 3565, 3565, 3565, 3565, 3567,
  21537. 1, 3565, 3565, 1, 3565, 3568, 3565, 3565,
  21538. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21539. 3565, 1, 1, 1, 3565, 1, 3565, 1,
  21540. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21541. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21542. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21543. 3565, 3565, 3569, 1, 1, 3565, 3565, 3565,
  21544. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21545. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21546. 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
  21547. 3565, 3565, 3565, 3565, 3565, 3565, 1, 1,
  21548. 1, 1, 1, 1, 1, 1, 1, 1,
  21549. 1, 1, 1, 1, 1, 1, 1, 1,
  21550. 1, 1, 1, 1, 1, 1, 1, 1,
  21551. 1, 1, 1, 1, 1, 1, 1, 1,
  21552. 1, 1, 1, 1, 1, 1, 1, 1,
  21553. 1, 1, 1, 1, 1, 1, 1, 1,
  21554. 1, 1, 1, 1, 1, 1, 1, 1,
  21555. 1, 1, 1, 1, 1, 1, 1, 1,
  21556. 1, 3570, 3570, 3570, 3570, 3570, 3570, 3570,
  21557. 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570,
  21558. 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570,
  21559. 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3571,
  21560. 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
  21561. 3572, 3572, 3572, 3572, 3573, 3572, 3572, 3574,
  21562. 3575, 3575, 3575, 3576, 1, 3461, 3461, 3461,
  21563. 3461, 3461, 3461, 3461, 3461, 3461, 1, 3461,
  21564. 3461, 3577, 3461, 3461, 3461, 3461, 3461, 3461,
  21565. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21566. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21567. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21568. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21569. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21570. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21571. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21572. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21573. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 1,
  21574. 3578, 3548, 3461, 3461, 3461, 3461, 3461, 3461,
  21575. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21576. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21577. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21578. 3461, 3461, 3461, 3461, 1, 1, 1, 1,
  21579. 1, 1, 1, 1, 1, 1, 1, 1,
  21580. 1, 1, 1, 1, 1, 1, 1, 1,
  21581. 1, 1, 1, 1, 1, 1, 1, 1,
  21582. 1, 1, 1, 1, 1, 1, 1, 1,
  21583. 1, 1, 1, 1, 1, 1, 1, 1,
  21584. 1, 1, 1, 1, 1, 1, 1, 1,
  21585. 1, 1, 1, 1, 1, 1, 1, 1,
  21586. 1, 1, 1, 1, 1, 1, 3579, 3579,
  21587. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21588. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21589. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21590. 3579, 3579, 3579, 3579, 3580, 3581, 3581, 3581,
  21591. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21592. 3581, 3582, 3581, 3581, 3583, 3584, 3584, 3584,
  21593. 3585, 1, 3586, 1, 3461, 1, 1, 1,
  21594. 1, 1, 1, 1, 1, 1, 1, 1,
  21595. 1, 1, 1, 1, 1, 1, 1, 1,
  21596. 1, 1, 1, 3461, 1, 3461, 3461, 3461,
  21597. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21598. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21599. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21600. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21601. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21602. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21603. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21604. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21605. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21606. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21607. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21608. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21609. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21610. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21611. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21612. 3461, 3461, 3461, 3461, 3461, 1, 1, 1,
  21613. 1, 1, 1, 1, 1, 1, 1, 1,
  21614. 1, 1, 1, 1, 1, 1, 1, 1,
  21615. 1, 1, 1, 1, 1, 1, 1, 1,
  21616. 1, 1, 1, 1, 1, 1, 1, 1,
  21617. 1, 1, 1, 1, 1, 1, 1, 1,
  21618. 1, 1, 1, 1, 1, 1, 1, 1,
  21619. 1, 1, 1, 1, 1, 1, 1, 1,
  21620. 1, 1, 1, 1, 1, 1, 1, 3579,
  21621. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21622. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21623. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21624. 3579, 3579, 3579, 3579, 3579, 3580, 3581, 3581,
  21625. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21626. 3581, 3581, 3582, 3581, 3581, 3583, 3584, 3584,
  21627. 3584, 3585, 1, 3461, 3461, 3461, 3461, 3461,
  21628. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21629. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21630. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21631. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21632. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21633. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21634. 3461, 3461, 3461, 3461, 3461, 3461, 3461, 3461,
  21635. 3461, 3461, 3461, 1, 3579, 3579, 3579, 3579,
  21636. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21637. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21638. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21639. 3579, 3579, 3579, 3579, 1, 3579, 3579, 3579,
  21640. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21641. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21642. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21643. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21644. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21645. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21646. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21647. 3579, 3579, 3579, 3579, 3579, 1, 3579, 3579,
  21648. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21649. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21650. 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
  21651. 3579, 3579, 3579, 3579, 3579, 3579, 1, 3581,
  21652. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21653. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21654. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21655. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21656. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21657. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 1,
  21658. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21659. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21660. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21661. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21662. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21663. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21664. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21665. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21666. 1, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21667. 3581, 3581, 3581, 3581, 3581, 3581, 3581, 3581,
  21668. 3581, 1, 3587, 1, 1, 1, 3588, 1,
  21669. 1, 1, 1, 1, 1, 1, 1, 1,
  21670. 1, 1, 1, 1, 1, 1, 1, 1,
  21671. 1, 3587, 1970, 1971, 1970, 1970, 1970, 1970,
  21672. 1970, 3589, 1, 1970, 1970, 3590, 1970, 1974,
  21673. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21674. 1970, 1970, 1970, 1, 1975, 295, 1970, 1,
  21675. 1970, 1, 1970, 1970, 1970, 1970, 1970, 1970,
  21676. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21677. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21678. 1970, 1970, 1970, 1970, 1, 1, 1, 1970,
  21679. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21680. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21681. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21682. 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
  21683. 1, 1, 1, 1, 1, 1, 1, 1,
  21684. 1, 1, 1, 1, 1, 1, 1, 1,
  21685. 1, 1, 1, 1, 1, 1, 1, 1,
  21686. 1, 1, 1, 1, 1, 1, 1, 1,
  21687. 1, 1, 1, 1, 1, 1, 1, 1,
  21688. 1, 1, 1, 1, 1, 1, 1, 1,
  21689. 1, 1, 1, 1, 1, 1, 1, 1,
  21690. 1, 1, 1, 1, 1, 1, 1, 1,
  21691. 1, 1, 1, 1976, 1976, 1976, 1976, 1976,
  21692. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  21693. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  21694. 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
  21695. 1976, 1977, 1978, 1978, 1978, 1978, 1978, 1978,
  21696. 1978, 1978, 1978, 1978, 1978, 1978, 1979, 1978,
  21697. 1978, 1980, 1981, 1981, 1981, 1982, 1, 3591,
  21698. 1, 1, 1, 3592, 1, 1, 1, 1,
  21699. 1, 1, 1, 1, 1, 1, 1, 1,
  21700. 1, 1, 1, 1, 1, 1, 3591, 1985,
  21701. 1986, 1985, 1985, 1985, 1985, 1985, 3593, 1,
  21702. 1985, 1985, 181, 1985, 1988, 1985, 1985, 1985,
  21703. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21704. 1, 183, 1989, 1985, 1, 1985, 1990, 1985,
  21705. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21706. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21707. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21708. 1985, 1, 1, 1, 1985, 1985, 1985, 1985,
  21709. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21710. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21711. 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
  21712. 1985, 1985, 1985, 1985, 1985, 1, 1, 1,
  21713. 1, 1, 1, 1, 1, 1, 1, 1,
  21714. 1, 1, 1, 1, 1, 1, 1, 1,
  21715. 1, 1, 1, 1, 1, 1, 1, 1,
  21716. 1, 1, 1, 1, 1, 1, 1, 1,
  21717. 1, 1, 1, 1, 1, 1, 1, 1,
  21718. 1, 1, 1, 1, 1, 1, 1, 1,
  21719. 1, 1, 1, 1, 1, 1, 1, 1,
  21720. 1, 1, 1, 1, 1, 1, 1, 1,
  21721. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  21722. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  21723. 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
  21724. 1991, 1991, 1991, 1991, 1991, 1991, 1992, 1993,
  21725. 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
  21726. 1993, 1993, 1993, 1994, 1993, 1993, 1995, 1996,
  21727. 1996, 1996, 1997, 1, 3594, 1, 1, 1,
  21728. 3595, 1, 1, 1, 1, 1, 1, 1,
  21729. 1, 1, 1, 1, 1, 1, 1, 1,
  21730. 1, 1, 1, 3594, 2000, 2001, 2000, 2000,
  21731. 2000, 2000, 2000, 3596, 1, 2000, 2000, 181,
  21732. 2000, 2003, 2000, 2000, 2000, 2000, 2000, 2000,
  21733. 2000, 2000, 2000, 2000, 2000, 1, 183, 2004,
  21734. 2000, 1, 2000, 1, 2000, 2000, 2000, 2000,
  21735. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21736. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21737. 2000, 2000, 2000, 2000, 2000, 2000, 1, 1,
  21738. 1, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21739. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21740. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21741. 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
  21742. 2000, 2000, 1, 1, 1, 1, 1, 1,
  21743. 1, 1, 1, 1, 1, 1, 1, 1,
  21744. 1, 1, 1, 1, 1, 1, 1, 1,
  21745. 1, 1, 1, 1, 1, 1, 1, 1,
  21746. 1, 1, 1, 1, 1, 1, 1, 1,
  21747. 1, 1, 1, 1, 1, 1, 1, 1,
  21748. 1, 1, 1, 1, 1, 1, 1, 1,
  21749. 1, 1, 1, 1, 1, 1, 1, 1,
  21750. 1, 1, 1, 1, 1, 2005, 2005, 2005,
  21751. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  21752. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  21753. 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
  21754. 2005, 2005, 2005, 2006, 2007, 2007, 2007, 2007,
  21755. 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
  21756. 2008, 2007, 2007, 2009, 2010, 2010, 2010, 2011,
  21757. 1, 3597, 1, 3594, 1, 1, 1, 1,
  21758. 1, 1, 1, 1, 1, 1, 1, 1,
  21759. 1, 1, 1, 1, 1, 1, 1, 1,
  21760. 1, 1, 3594, 1, 3598, 1, 1, 1,
  21761. 3599, 1, 1, 1, 1, 1, 1, 1,
  21762. 1, 1, 1, 1, 1, 1, 1, 1,
  21763. 1, 1, 1, 3598, 3074, 3075, 3074, 3074,
  21764. 3074, 3074, 3074, 3600, 1, 3074, 3074, 3590,
  21765. 3074, 3077, 3074, 3074, 3074, 3074, 3074, 3074,
  21766. 3074, 3074, 3074, 3074, 3074, 1, 1975, 2100,
  21767. 3074, 1, 3074, 1, 3074, 3074, 3074, 3074,
  21768. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21769. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21770. 3074, 3074, 3074, 3074, 3074, 3074, 1, 1,
  21771. 1, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21772. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21773. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21774. 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
  21775. 3074, 3074, 1, 1, 1, 1, 1, 1,
  21776. 1, 1, 1, 1, 1, 1, 1, 1,
  21777. 1, 1, 1, 1, 1, 1, 1, 1,
  21778. 1, 1, 1, 1, 1, 1, 1, 1,
  21779. 1, 1, 1, 1, 1, 1, 1, 1,
  21780. 1, 1, 1, 1, 1, 1, 1, 1,
  21781. 1, 1, 1, 1, 1, 1, 1, 1,
  21782. 1, 1, 1, 1, 1, 1, 1, 1,
  21783. 1, 1, 1, 1, 1, 3078, 3078, 3078,
  21784. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  21785. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  21786. 3078, 3078, 3078, 3078, 3078, 3078, 3078, 3078,
  21787. 3078, 3078, 3078, 3079, 3080, 3080, 3080, 3080,
  21788. 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
  21789. 3081, 3080, 3080, 3082, 3083, 3083, 3083, 3084,
  21790. 1, 3601, 1, 1, 1, 3602, 1, 1,
  21791. 1, 1, 1, 1, 1, 1, 1, 1,
  21792. 1, 1, 1, 1, 1, 1, 1, 1,
  21793. 3601, 3603, 3604, 3603, 3603, 3603, 3603, 3603,
  21794. 3605, 1, 3603, 3603, 1, 3603, 3606, 3603,
  21795. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21796. 3603, 3603, 25, 1, 26, 3603, 1, 3603,
  21797. 24, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21798. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21799. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21800. 3603, 3603, 3603, 3607, 1, 1, 3603, 3603,
  21801. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21802. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21803. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  21804. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 1,
  21805. 1, 1, 1, 1, 1, 1, 1, 1,
  21806. 1, 1, 1, 1, 1, 1, 1, 1,
  21807. 1, 1, 1, 1, 1, 1, 1, 1,
  21808. 1, 1, 1, 1, 1, 1, 1, 1,
  21809. 1, 1, 1, 1, 1, 1, 1, 1,
  21810. 1, 1, 1, 1, 1, 1, 1, 1,
  21811. 1, 1, 1, 1, 1, 1, 1, 1,
  21812. 1, 1, 1, 1, 1, 1, 1, 1,
  21813. 1, 1, 3608, 3608, 3608, 3608, 3608, 3608,
  21814. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  21815. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  21816. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  21817. 3609, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
  21818. 3610, 3610, 3610, 3610, 3610, 3611, 3610, 3610,
  21819. 3612, 3613, 3613, 3613, 3614, 1, 3615, 1,
  21820. 1, 1, 3616, 1, 1, 1, 1, 1,
  21821. 1, 1, 1, 1, 1, 1, 1, 1,
  21822. 1, 1, 1, 1, 1, 3615, 3617, 3618,
  21823. 3617, 3617, 3617, 3617, 3617, 3619, 1, 3617,
  21824. 3617, 1, 3617, 3620, 3617, 3617, 3617, 3617,
  21825. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 1,
  21826. 1, 8, 3617, 1, 3617, 1, 3617, 3617,
  21827. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21828. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21829. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21830. 3621, 1, 1, 3617, 3617, 3617, 3617, 3617,
  21831. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21832. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21833. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  21834. 3617, 3617, 3617, 3617, 1, 1, 1, 1,
  21835. 1, 1, 1, 1, 1, 1, 1, 1,
  21836. 1, 1, 1, 1, 1, 1, 1, 1,
  21837. 1, 1, 1, 1, 1, 1, 1, 1,
  21838. 1, 1, 1, 1, 1, 1, 1, 1,
  21839. 1, 1, 1, 1, 1, 1, 1, 1,
  21840. 1, 1, 1, 1, 1, 1, 1, 1,
  21841. 1, 1, 1, 1, 1, 1, 1, 1,
  21842. 1, 1, 1, 1, 1, 1, 1, 3622,
  21843. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  21844. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  21845. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  21846. 3622, 3622, 3622, 3622, 3622, 3623, 3624, 3624,
  21847. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  21848. 3624, 3624, 3625, 3624, 3624, 3626, 3627, 3627,
  21849. 3627, 3628, 1, 3629, 1, 3615, 1, 1,
  21850. 1, 1, 1, 1, 1, 1, 1, 1,
  21851. 1, 1, 1, 1, 1, 1, 1, 1,
  21852. 1, 1, 1, 1, 3615, 1, 3630, 1,
  21853. 3631, 1, 1, 1, 1, 1, 1, 1,
  21854. 1, 1, 1, 1, 1, 1, 1, 1,
  21855. 1, 1, 1, 1, 1, 1, 1, 3631,
  21856. 1, 3632, 1, 1, 1, 3633, 1, 1,
  21857. 1, 1, 1, 1, 1, 1, 1, 1,
  21858. 1, 1, 1, 1, 1, 1, 1, 1,
  21859. 3632, 3634, 22, 3634, 3634, 3634, 3634, 3634,
  21860. 3635, 1, 3634, 3634, 1, 3634, 24, 3634,
  21861. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21862. 3634, 3634, 25, 1, 26, 3634, 1, 3634,
  21863. 24, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21864. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21865. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21866. 3634, 3634, 3634, 1, 1, 1, 3634, 3634,
  21867. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21868. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21869. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21870. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 1,
  21871. 1, 1, 1, 1, 1, 1, 1, 1,
  21872. 1, 1, 1, 1, 1, 1, 1, 1,
  21873. 1, 1, 1, 1, 1, 1, 1, 1,
  21874. 1, 1, 1, 1, 1, 1, 1, 1,
  21875. 1, 1, 1, 1, 1, 1, 1, 1,
  21876. 1, 1, 1, 1, 1, 1, 1, 1,
  21877. 1, 1, 1, 1, 1, 1, 1, 1,
  21878. 1, 1, 1, 1, 1, 1, 1, 1,
  21879. 1, 1, 3636, 3636, 3636, 3636, 3636, 3636,
  21880. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21881. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21882. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21883. 3637, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21884. 3638, 3638, 3638, 3638, 3638, 3639, 3638, 3638,
  21885. 3640, 3641, 3641, 3641, 3642, 1, 3643, 1,
  21886. 1, 1, 3644, 1, 1, 1, 1, 1,
  21887. 1, 1, 1, 1, 1, 1, 1, 1,
  21888. 1, 1, 1, 1, 1, 3643, 3634, 22,
  21889. 3634, 3634, 3634, 3634, 3634, 3645, 1, 3634,
  21890. 3634, 1, 3634, 1, 3634, 3634, 3634, 3634,
  21891. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 1,
  21892. 1, 8, 3634, 1, 3634, 1, 3634, 3634,
  21893. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21894. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21895. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21896. 1, 1, 1, 3634, 3634, 3634, 3634, 3634,
  21897. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21898. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21899. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21900. 3634, 3634, 3634, 3634, 1, 1, 1, 1,
  21901. 1, 1, 1, 1, 1, 1, 1, 1,
  21902. 1, 1, 1, 1, 1, 1, 1, 1,
  21903. 1, 1, 1, 1, 1, 1, 1, 1,
  21904. 1, 1, 1, 1, 1, 1, 1, 1,
  21905. 1, 1, 1, 1, 1, 1, 1, 1,
  21906. 1, 1, 1, 1, 1, 1, 1, 1,
  21907. 1, 1, 1, 1, 1, 1, 1, 1,
  21908. 1, 1, 1, 1, 1, 1, 1, 3636,
  21909. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21910. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21911. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21912. 3636, 3636, 3636, 3636, 3636, 3637, 3638, 3638,
  21913. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21914. 3638, 3638, 3639, 3638, 3638, 3640, 3641, 3641,
  21915. 3641, 3642, 1, 3646, 1, 3643, 1, 1,
  21916. 1, 1, 1, 1, 1, 1, 1, 1,
  21917. 1, 1, 1, 1, 1, 1, 1, 1,
  21918. 1, 1, 1, 1, 3643, 1, 3634, 3634,
  21919. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21920. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21921. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21922. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21923. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21924. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21925. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  21926. 3634, 3634, 3634, 3634, 3634, 3634, 1, 3636,
  21927. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21928. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21929. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21930. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 1,
  21931. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21932. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21933. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21934. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21935. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21936. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21937. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21938. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21939. 1, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21940. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21941. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21942. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  21943. 3636, 1, 3638, 3638, 3638, 3638, 3638, 3638,
  21944. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21945. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21946. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21947. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21948. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21949. 3638, 3638, 1, 3638, 3638, 3638, 3638, 3638,
  21950. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21951. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21952. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21953. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21954. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21955. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21956. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21957. 3638, 3638, 3638, 1, 3638, 3638, 3638, 3638,
  21958. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  21959. 3638, 3638, 3638, 3638, 1, 3647, 1, 1,
  21960. 1, 3648, 1, 1, 1, 1, 1, 1,
  21961. 1, 1, 1, 1, 1, 1, 1, 1,
  21962. 1, 1, 1, 1, 3647, 3649, 61, 3649,
  21963. 3649, 3649, 3649, 3649, 3650, 1, 3649, 3649,
  21964. 1, 3649, 1, 3649, 3649, 3649, 3649, 3649,
  21965. 3649, 3649, 3649, 3649, 3649, 3649, 1, 1,
  21966. 83, 3649, 1, 3649, 1, 3649, 3649, 3649,
  21967. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
  21968. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
  21969. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 1,
  21970. 1, 1, 3649, 3649, 3649, 3649, 3649, 3649,
  21971. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
  21972. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
  21973. 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
  21974. 3649, 3649, 3649, 1, 1, 1, 1, 1,
  21975. 1, 1, 1, 1, 1, 1, 1, 1,
  21976. 1, 1, 1, 1, 1, 1, 1, 1,
  21977. 1, 1, 1, 1, 1, 1, 1, 1,
  21978. 1, 1, 1, 1, 1, 1, 1, 1,
  21979. 1, 1, 1, 1, 1, 1, 1, 1,
  21980. 1, 1, 1, 1, 1, 1, 1, 1,
  21981. 1, 1, 1, 1, 1, 1, 1, 1,
  21982. 1, 1, 1, 1, 1, 1, 3651, 3651,
  21983. 3651, 3651, 3651, 3651, 3651, 3651, 3651, 3651,
  21984. 3651, 3651, 3651, 3651, 3651, 3651, 3651, 3651,
  21985. 3651, 3651, 3651, 3651, 3651, 3651, 3651, 3651,
  21986. 3651, 3651, 3651, 3651, 3652, 3653, 3653, 3653,
  21987. 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653,
  21988. 3653, 3654, 3653, 3653, 3655, 3656, 3656, 3656,
  21989. 3657, 1, 21, 21, 21, 21, 21, 21,
  21990. 21, 21, 21, 21, 21, 21, 21, 21,
  21991. 21, 21, 21, 21, 21, 21, 21, 21,
  21992. 21, 21, 21, 21, 21, 21, 21, 21,
  21993. 21, 21, 21, 21, 21, 21, 21, 21,
  21994. 21, 21, 21, 21, 21, 21, 21, 21,
  21995. 21, 21, 21, 21, 21, 21, 21, 21,
  21996. 21, 21, 21, 21, 21, 21, 21, 21,
  21997. 21, 21, 1, 27, 27, 27, 27, 27,
  21998. 27, 27, 27, 27, 27, 27, 27, 27,
  21999. 27, 27, 27, 27, 27, 27, 27, 27,
  22000. 27, 27, 27, 27, 27, 27, 27, 27,
  22001. 27, 27, 27, 1, 27, 27, 27, 27,
  22002. 27, 27, 27, 27, 27, 27, 27, 27,
  22003. 27, 27, 27, 27, 27, 27, 27, 27,
  22004. 27, 27, 27, 27, 27, 27, 27, 27,
  22005. 27, 27, 27, 27, 27, 27, 27, 27,
  22006. 27, 27, 27, 27, 27, 27, 27, 27,
  22007. 27, 27, 27, 27, 27, 27, 27, 27,
  22008. 27, 27, 27, 27, 27, 27, 27, 27,
  22009. 27, 27, 27, 27, 1, 27, 27, 27,
  22010. 27, 27, 27, 27, 27, 27, 27, 27,
  22011. 27, 27, 27, 27, 27, 27, 27, 27,
  22012. 27, 27, 27, 27, 27, 27, 27, 27,
  22013. 27, 27, 27, 27, 27, 1, 29, 29,
  22014. 29, 29, 29, 29, 29, 29, 29, 29,
  22015. 29, 29, 29, 29, 29, 29, 29, 29,
  22016. 29, 29, 29, 29, 29, 29, 29, 29,
  22017. 29, 29, 29, 29, 29, 29, 29, 29,
  22018. 29, 29, 29, 29, 29, 29, 29, 29,
  22019. 29, 29, 29, 29, 29, 29, 1, 29,
  22020. 29, 29, 29, 29, 29, 29, 29, 29,
  22021. 29, 29, 29, 29, 29, 29, 29, 29,
  22022. 29, 29, 29, 29, 29, 29, 29, 29,
  22023. 29, 29, 29, 29, 29, 29, 29, 29,
  22024. 29, 29, 29, 29, 29, 29, 29, 29,
  22025. 29, 29, 29, 29, 29, 29, 29, 29,
  22026. 29, 29, 29, 29, 29, 29, 29, 29,
  22027. 29, 29, 29, 29, 29, 29, 29, 1,
  22028. 29, 29, 29, 29, 29, 29, 29, 29,
  22029. 29, 29, 29, 29, 29, 29, 29, 29,
  22030. 1, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22031. 3658, 3659, 1, 3658, 3658, 3660, 3658, 3658,
  22032. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22033. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22034. 3659, 3658, 37, 3658, 3658, 3658, 3658, 3658,
  22035. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22036. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22037. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22038. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22039. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22040. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22041. 3658, 3658, 3658, 3658, 3661, 3658, 3658, 3658,
  22042. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22043. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22044. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22045. 3658, 3658, 3658, 3658, 3658, 3658, 3658, 3658,
  22046. 1, 1, 1, 1, 1, 1, 1, 1,
  22047. 1, 1, 1, 1, 1, 1, 1, 1,
  22048. 1, 1, 1, 1, 1, 1, 1, 1,
  22049. 1, 1, 1, 1, 1, 1, 1, 1,
  22050. 1, 1, 1, 1, 1, 1, 1, 1,
  22051. 1, 1, 1, 1, 1, 1, 1, 1,
  22052. 1, 1, 1, 1, 1, 1, 1, 1,
  22053. 1, 1, 1, 1, 1, 1, 1, 1,
  22054. 1, 1, 3662, 3662, 3662, 3662, 3662, 3662,
  22055. 3662, 3662, 3662, 3662, 3662, 3662, 3662, 3662,
  22056. 3662, 3662, 3662, 3662, 3662, 3662, 3662, 3662,
  22057. 3662, 3662, 3662, 3662, 3662, 3662, 3662, 3662,
  22058. 3663, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
  22059. 3664, 3664, 3664, 3664, 3664, 3665, 3664, 3664,
  22060. 3666, 3667, 3667, 3667, 3668, 1, 3669, 3669,
  22061. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 1,
  22062. 3669, 3669, 3670, 3669, 3669, 3669, 3669, 3669,
  22063. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22064. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3671,
  22065. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22066. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22067. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22068. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22069. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22070. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22071. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22072. 3669, 3672, 3669, 3669, 3669, 3669, 3669, 3669,
  22073. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22074. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22075. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22076. 3669, 3669, 3669, 3669, 3669, 1, 1, 1,
  22077. 1, 1, 1, 1, 1, 1, 1, 1,
  22078. 1, 1, 1, 1, 1, 1, 1, 1,
  22079. 1, 1, 1, 1, 1, 1, 1, 1,
  22080. 1, 1, 1, 1, 1, 1, 1, 1,
  22081. 1, 1, 1, 1, 1, 1, 1, 1,
  22082. 1, 1, 1, 1, 1, 1, 1, 1,
  22083. 1, 1, 1, 1, 1, 1, 1, 1,
  22084. 1, 1, 1, 1, 1, 1, 1, 3673,
  22085. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22086. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22087. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22088. 3673, 3673, 3673, 3673, 3673, 3674, 3675, 3675,
  22089. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22090. 3675, 3675, 3676, 3675, 3675, 3677, 3678, 3678,
  22091. 3678, 3679, 1, 3680, 1, 3669, 1, 1,
  22092. 1, 1, 1, 1, 1, 1, 1, 1,
  22093. 1, 1, 1, 1, 1, 1, 1, 1,
  22094. 1, 1, 1, 1, 3669, 1, 3681, 1,
  22095. 3682, 1, 1, 1, 1, 1, 1, 1,
  22096. 1, 1, 1, 1, 1, 1, 1, 1,
  22097. 1, 1, 1, 1, 1, 1, 1, 3682,
  22098. 1, 73, 1, 1, 1, 74, 1, 1,
  22099. 1, 1, 1, 1, 1, 1, 1, 1,
  22100. 1, 1, 1, 1, 1, 1, 1, 1,
  22101. 73, 3683, 3618, 3683, 3683, 3683, 3683, 3683,
  22102. 75, 1, 3683, 3683, 1, 3683, 3684, 3683,
  22103. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22104. 3683, 3683, 25, 1, 26, 3683, 1, 3683,
  22105. 24, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22106. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22107. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22108. 3683, 3683, 3683, 1, 1, 1, 3683, 3683,
  22109. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22110. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22111. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22112. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 1,
  22113. 1, 1, 1, 1, 1, 1, 1, 1,
  22114. 1, 1, 1, 1, 1, 1, 1, 1,
  22115. 1, 1, 1, 1, 1, 1, 1, 1,
  22116. 1, 1, 1, 1, 1, 1, 1, 1,
  22117. 1, 1, 1, 1, 1, 1, 1, 1,
  22118. 1, 1, 1, 1, 1, 1, 1, 1,
  22119. 1, 1, 1, 1, 1, 1, 1, 1,
  22120. 1, 1, 1, 1, 1, 1, 1, 1,
  22121. 1, 1, 3685, 3685, 3685, 3685, 3685, 3685,
  22122. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22123. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22124. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22125. 3686, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22126. 3687, 3687, 3687, 3687, 3687, 3688, 3687, 3687,
  22127. 3689, 3690, 3690, 3690, 3691, 1, 3683, 3683,
  22128. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22129. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22130. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22131. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22132. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22133. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22134. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  22135. 3683, 3683, 3683, 3683, 3683, 3683, 1, 3685,
  22136. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22137. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22138. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22139. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 1,
  22140. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22141. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22142. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22143. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22144. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22145. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22146. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22147. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22148. 1, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22149. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22150. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22151. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  22152. 3685, 1, 3687, 3687, 3687, 3687, 3687, 3687,
  22153. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22154. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22155. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22156. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22157. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22158. 3687, 3687, 1, 3687, 3687, 3687, 3687, 3687,
  22159. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22160. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22161. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22162. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22163. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22164. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22165. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22166. 3687, 3687, 3687, 1, 3687, 3687, 3687, 3687,
  22167. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  22168. 3687, 3687, 3687, 3687, 1, 3669, 3669, 3669,
  22169. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22170. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22171. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22172. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22173. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22174. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22175. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22176. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22177. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22178. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22179. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22180. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22181. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22182. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22183. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22184. 3669, 3669, 3669, 3669, 3669, 1, 1, 1,
  22185. 1, 1, 1, 1, 1, 1, 1, 1,
  22186. 1, 1, 1, 1, 1, 1, 1, 1,
  22187. 1, 1, 1, 1, 1, 1, 1, 1,
  22188. 1, 1, 1, 1, 1, 1, 1, 1,
  22189. 1, 1, 1, 1, 1, 1, 1, 1,
  22190. 1, 1, 1, 1, 1, 1, 1, 1,
  22191. 1, 1, 1, 1, 1, 1, 1, 1,
  22192. 1, 1, 1, 1, 1, 1, 1, 3673,
  22193. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22194. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22195. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22196. 3673, 3673, 3673, 3673, 3673, 3674, 3675, 3675,
  22197. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22198. 3675, 3675, 3676, 3675, 3675, 3677, 3678, 3678,
  22199. 3678, 3679, 1, 3669, 3669, 3669, 3669, 3669,
  22200. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22201. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22202. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22203. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22204. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22205. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22206. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22207. 3669, 3669, 3669, 1, 3673, 3673, 3673, 3673,
  22208. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22209. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22210. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22211. 3673, 3673, 3673, 3673, 1, 3673, 3673, 3673,
  22212. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22213. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22214. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22215. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22216. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22217. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22218. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22219. 3673, 3673, 3673, 3673, 3673, 1, 3673, 3673,
  22220. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22221. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22222. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22223. 3673, 3673, 3673, 3673, 3673, 3673, 1, 3675,
  22224. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22225. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22226. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22227. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22228. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22229. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 1,
  22230. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22231. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22232. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22233. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22234. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22235. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22236. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22237. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22238. 1, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22239. 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
  22240. 3675, 1, 3669, 3669, 3669, 3669, 3669, 3669,
  22241. 3669, 3669, 3692, 1, 3669, 3669, 3693, 3669,
  22242. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22243. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22244. 3669, 3692, 3669, 48, 3669, 3669, 3669, 3669,
  22245. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22246. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22247. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22248. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22249. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22250. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22251. 3669, 3669, 3669, 3669, 3669, 3672, 3669, 3669,
  22252. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22253. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22254. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22255. 3669, 3669, 3669, 3669, 3669, 3669, 3669, 3669,
  22256. 3669, 1, 1, 1, 1, 1, 1, 1,
  22257. 1, 1, 1, 1, 1, 1, 1, 1,
  22258. 1, 1, 1, 1, 1, 1, 1, 1,
  22259. 1, 1, 1, 1, 1, 1, 1, 1,
  22260. 1, 1, 1, 1, 1, 1, 1, 1,
  22261. 1, 1, 1, 1, 1, 1, 1, 1,
  22262. 1, 1, 1, 1, 1, 1, 1, 1,
  22263. 1, 1, 1, 1, 1, 1, 1, 1,
  22264. 1, 1, 1, 3673, 3673, 3673, 3673, 3673,
  22265. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22266. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22267. 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
  22268. 3673, 3674, 3675, 3675, 3675, 3675, 3675, 3675,
  22269. 3675, 3675, 3675, 3675, 3675, 3675, 3676, 3675,
  22270. 3675, 3677, 3678, 3678, 3678, 3679, 1, 3694,
  22271. 1, 3692, 1, 1, 1, 1, 1, 1,
  22272. 1, 1, 1, 1, 1, 1, 1, 1,
  22273. 1, 1, 1, 1, 1, 1, 1, 1,
  22274. 3692, 1, 3632, 1, 1, 1, 3633, 1,
  22275. 1, 1, 1, 1, 1, 1, 1, 1,
  22276. 1, 1, 1, 1, 1, 1, 1, 1,
  22277. 1, 3632, 3617, 3618, 3617, 3617, 3617, 3617,
  22278. 3617, 3635, 1, 3617, 3617, 1, 3617, 3684,
  22279. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22280. 3617, 3617, 3617, 25, 1, 26, 3617, 1,
  22281. 3617, 24, 3617, 3617, 3617, 3617, 3617, 3617,
  22282. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22283. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22284. 3617, 3617, 3617, 3617, 1, 1, 1, 3617,
  22285. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22286. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22287. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22288. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22289. 1, 1, 1, 1, 1, 1, 1, 1,
  22290. 1, 1, 1, 1, 1, 1, 1, 1,
  22291. 1, 1, 1, 1, 1, 1, 1, 1,
  22292. 1, 1, 1, 1, 1, 1, 1, 1,
  22293. 1, 1, 1, 1, 1, 1, 1, 1,
  22294. 1, 1, 1, 1, 1, 1, 1, 1,
  22295. 1, 1, 1, 1, 1, 1, 1, 1,
  22296. 1, 1, 1, 1, 1, 1, 1, 1,
  22297. 1, 1, 1, 3622, 3622, 3622, 3622, 3622,
  22298. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22299. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22300. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22301. 3622, 3623, 3624, 3624, 3624, 3624, 3624, 3624,
  22302. 3624, 3624, 3624, 3624, 3624, 3624, 3625, 3624,
  22303. 3624, 3626, 3627, 3627, 3627, 3628, 1, 3617,
  22304. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22305. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22306. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22307. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22308. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22309. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22310. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  22311. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 1,
  22312. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22313. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22314. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22315. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22316. 1, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22317. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22318. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22319. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22320. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22321. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22322. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22323. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22324. 3622, 1, 3622, 3622, 3622, 3622, 3622, 3622,
  22325. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22326. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22327. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  22328. 3622, 3622, 1, 3624, 3624, 3624, 3624, 3624,
  22329. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22330. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22331. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22332. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22333. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22334. 3624, 3624, 3624, 1, 3624, 3624, 3624, 3624,
  22335. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22336. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22337. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22338. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22339. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22340. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22341. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22342. 3624, 3624, 3624, 3624, 1, 3624, 3624, 3624,
  22343. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  22344. 3624, 3624, 3624, 3624, 3624, 1, 3695, 1,
  22345. 1, 1, 3696, 1, 1, 1, 1, 1,
  22346. 1, 1, 1, 1, 1, 1, 1, 1,
  22347. 1, 1, 1, 1, 1, 3695, 3697, 3698,
  22348. 3697, 3697, 3697, 3697, 3697, 3699, 1, 3697,
  22349. 3697, 1, 3697, 3700, 3697, 3697, 3697, 3697,
  22350. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 1,
  22351. 1, 83, 3697, 1, 3697, 1, 3697, 3697,
  22352. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22353. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22354. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22355. 3701, 1, 1, 3697, 3697, 3697, 3697, 3697,
  22356. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22357. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22358. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  22359. 3697, 3697, 3697, 3697, 1, 1, 1, 1,
  22360. 1, 1, 1, 1, 1, 1, 1, 1,
  22361. 1, 1, 1, 1, 1, 1, 1, 1,
  22362. 1, 1, 1, 1, 1, 1, 1, 1,
  22363. 1, 1, 1, 1, 1, 1, 1, 1,
  22364. 1, 1, 1, 1, 1, 1, 1, 1,
  22365. 1, 1, 1, 1, 1, 1, 1, 1,
  22366. 1, 1, 1, 1, 1, 1, 1, 1,
  22367. 1, 1, 1, 1, 1, 1, 1, 3702,
  22368. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  22369. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  22370. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  22371. 3702, 3702, 3702, 3702, 3702, 3703, 3704, 3704,
  22372. 3704, 3704, 3704, 3704, 3704, 3704, 3704, 3704,
  22373. 3704, 3704, 3705, 3704, 3704, 3706, 3707, 3707,
  22374. 3707, 3708, 1, 3709, 3710, 3709, 3709, 3709,
  22375. 3709, 3709, 1, 1, 3709, 3709, 1, 3709,
  22376. 3620, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22377. 3709, 3709, 3709, 3709, 1, 1, 1, 3709,
  22378. 1, 3709, 1, 3709, 3709, 3709, 3709, 3709,
  22379. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22380. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22381. 3709, 3709, 3709, 3709, 3709, 1, 1, 1,
  22382. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22383. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22384. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22385. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22386. 3709, 1, 1, 1, 1, 1, 1, 1,
  22387. 1, 1, 1, 1, 1, 1, 1, 1,
  22388. 1, 1, 1, 1, 1, 1, 1, 1,
  22389. 1, 1, 1, 1, 1, 1, 1, 1,
  22390. 1, 1, 1, 1, 1, 1, 1, 1,
  22391. 1, 1, 1, 1, 1, 1, 1, 1,
  22392. 1, 1, 1, 1, 1, 1, 1, 1,
  22393. 1, 1, 1, 1, 1, 1, 1, 1,
  22394. 1, 1, 1, 1, 3711, 3711, 3711, 3711,
  22395. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22396. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22397. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22398. 3711, 3711, 3712, 3713, 3713, 3713, 3713, 3713,
  22399. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3714,
  22400. 3713, 3713, 3715, 3716, 3716, 3716, 3717, 1,
  22401. 3718, 1, 3719, 1, 1, 1, 1, 1,
  22402. 1, 1, 1, 1, 1, 1, 1, 1,
  22403. 1, 1, 1, 1, 1, 1, 1, 1,
  22404. 1, 3719, 1, 3720, 3720, 3720, 3720, 3720,
  22405. 3720, 3720, 3720, 3710, 1, 3720, 3720, 3721,
  22406. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22407. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22408. 3720, 3720, 3710, 3720, 1, 3720, 3720, 3720,
  22409. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22410. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22411. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22412. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22413. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22414. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22415. 3720, 3720, 3720, 3720, 3720, 3720, 3722, 3720,
  22416. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22417. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22418. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22419. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22420. 3720, 3720, 1, 1, 1, 1, 1, 1,
  22421. 1, 1, 1, 1, 1, 1, 1, 1,
  22422. 1, 1, 1, 1, 1, 1, 1, 1,
  22423. 1, 1, 1, 1, 1, 1, 1, 1,
  22424. 1, 1, 1, 1, 1, 1, 1, 1,
  22425. 1, 1, 1, 1, 1, 1, 1, 1,
  22426. 1, 1, 1, 1, 1, 1, 1, 1,
  22427. 1, 1, 1, 1, 1, 1, 1, 1,
  22428. 1, 1, 1, 1, 3723, 3723, 3723, 3723,
  22429. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22430. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22431. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22432. 3723, 3723, 3724, 3725, 3725, 3725, 3725, 3725,
  22433. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3726,
  22434. 3725, 3725, 3727, 3728, 3728, 3728, 3729, 1,
  22435. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22436. 3720, 1, 3720, 3720, 3730, 3720, 3720, 3720,
  22437. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22438. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22439. 3720, 3709, 3720, 3720, 3720, 3720, 3720, 3720,
  22440. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22441. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22442. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22443. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22444. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22445. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22446. 3720, 3720, 3720, 3722, 3720, 3720, 3720, 3720,
  22447. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22448. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22449. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22450. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 1,
  22451. 1, 1, 1, 1, 1, 1, 1, 1,
  22452. 1, 1, 1, 1, 1, 1, 1, 1,
  22453. 1, 1, 1, 1, 1, 1, 1, 1,
  22454. 1, 1, 1, 1, 1, 1, 1, 1,
  22455. 1, 1, 1, 1, 1, 1, 1, 1,
  22456. 1, 1, 1, 1, 1, 1, 1, 1,
  22457. 1, 1, 1, 1, 1, 1, 1, 1,
  22458. 1, 1, 1, 1, 1, 1, 1, 1,
  22459. 1, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22460. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22461. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22462. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3724,
  22463. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22464. 3725, 3725, 3725, 3725, 3726, 3725, 3725, 3727,
  22465. 3728, 3728, 3728, 3729, 1, 3731, 1, 3720,
  22466. 1, 1, 1, 1, 1, 1, 1, 1,
  22467. 1, 1, 1, 1, 1, 1, 1, 1,
  22468. 1, 1, 1, 1, 1, 1, 3720, 1,
  22469. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22470. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22471. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22472. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22473. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22474. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22475. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22476. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22477. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22478. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22479. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22480. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22481. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22482. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22483. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22484. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22485. 1, 1, 1, 1, 1, 1, 1, 1,
  22486. 1, 1, 1, 1, 1, 1, 1, 1,
  22487. 1, 1, 1, 1, 1, 1, 1, 1,
  22488. 1, 1, 1, 1, 1, 1, 1, 1,
  22489. 1, 1, 1, 1, 1, 1, 1, 1,
  22490. 1, 1, 1, 1, 1, 1, 1, 1,
  22491. 1, 1, 1, 1, 1, 1, 1, 1,
  22492. 1, 1, 1, 1, 1, 1, 1, 1,
  22493. 1, 1, 3723, 3723, 3723, 3723, 3723, 3723,
  22494. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22495. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22496. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22497. 3724, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22498. 3725, 3725, 3725, 3725, 3725, 3726, 3725, 3725,
  22499. 3727, 3728, 3728, 3728, 3729, 1, 3720, 3720,
  22500. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22501. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22502. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22503. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22504. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22505. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22506. 3720, 3720, 3720, 3720, 3720, 3720, 3720, 3720,
  22507. 3720, 3720, 3720, 3720, 3720, 3720, 1, 3723,
  22508. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22509. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22510. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22511. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 1,
  22512. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22513. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22514. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22515. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22516. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22517. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22518. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22519. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22520. 1, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22521. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22522. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22523. 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
  22524. 3723, 1, 3725, 3725, 3725, 3725, 3725, 3725,
  22525. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22526. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22527. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22528. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22529. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22530. 3725, 3725, 1, 3725, 3725, 3725, 3725, 3725,
  22531. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22532. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22533. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22534. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22535. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22536. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22537. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22538. 3725, 3725, 3725, 1, 3725, 3725, 3725, 3725,
  22539. 3725, 3725, 3725, 3725, 3725, 3725, 3725, 3725,
  22540. 3725, 3725, 3725, 3725, 1, 3732, 1, 3710,
  22541. 1, 1, 1, 1, 1, 1, 1, 1,
  22542. 1, 1, 1, 1, 1, 1, 1, 1,
  22543. 1, 1, 1, 1, 1, 1, 3710, 1,
  22544. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22545. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22546. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22547. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22548. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22549. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22550. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22551. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  22552. 1, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22553. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22554. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22555. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22556. 3711, 1, 3711, 3711, 3711, 3711, 3711, 3711,
  22557. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22558. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22559. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22560. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22561. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22562. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22563. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22564. 3711, 3711, 1, 3711, 3711, 3711, 3711, 3711,
  22565. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22566. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22567. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  22568. 3711, 3711, 3711, 1, 3713, 3713, 3713, 3713,
  22569. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22570. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22571. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22572. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22573. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22574. 3713, 3713, 3713, 3713, 1, 3713, 3713, 3713,
  22575. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22576. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22577. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22578. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22579. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22580. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22581. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22582. 3713, 3713, 3713, 3713, 3713, 1, 3713, 3713,
  22583. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
  22584. 3713, 3713, 3713, 3713, 3713, 3713, 1, 3621,
  22585. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22586. 1, 3621, 3621, 3733, 3621, 3621, 3621, 3621,
  22587. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22588. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22589. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22590. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22591. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22592. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22593. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22594. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22595. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22596. 3621, 1, 3734, 3719, 3621, 3621, 3621, 3621,
  22597. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22598. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22599. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22600. 3621, 3621, 3621, 3621, 3621, 3621, 1, 1,
  22601. 1, 1, 1, 1, 1, 1, 1, 1,
  22602. 1, 1, 1, 1, 1, 1, 1, 1,
  22603. 1, 1, 1, 1, 1, 1, 1, 1,
  22604. 1, 1, 1, 1, 1, 1, 1, 1,
  22605. 1, 1, 1, 1, 1, 1, 1, 1,
  22606. 1, 1, 1, 1, 1, 1, 1, 1,
  22607. 1, 1, 1, 1, 1, 1, 1, 1,
  22608. 1, 1, 1, 1, 1, 1, 1, 1,
  22609. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22610. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22611. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22612. 3735, 3735, 3735, 3735, 3735, 3735, 3736, 3737,
  22613. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22614. 3737, 3737, 3737, 3738, 3737, 3737, 3739, 3740,
  22615. 3740, 3740, 3741, 1, 3742, 1, 3621, 1,
  22616. 1, 1, 1, 1, 1, 1, 1, 1,
  22617. 1, 1, 1, 1, 1, 1, 1, 1,
  22618. 1, 1, 1, 1, 1, 3621, 1, 3621,
  22619. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22620. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22621. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22622. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22623. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22624. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22625. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22626. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22627. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22628. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22629. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22630. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22631. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22632. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22633. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22634. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 1,
  22635. 1, 1, 1, 1, 1, 1, 1, 1,
  22636. 1, 1, 1, 1, 1, 1, 1, 1,
  22637. 1, 1, 1, 1, 1, 1, 1, 1,
  22638. 1, 1, 1, 1, 1, 1, 1, 1,
  22639. 1, 1, 1, 1, 1, 1, 1, 1,
  22640. 1, 1, 1, 1, 1, 1, 1, 1,
  22641. 1, 1, 1, 1, 1, 1, 1, 1,
  22642. 1, 1, 1, 1, 1, 1, 1, 1,
  22643. 1, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22644. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22645. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22646. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3736,
  22647. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22648. 3737, 3737, 3737, 3737, 3738, 3737, 3737, 3739,
  22649. 3740, 3740, 3740, 3741, 1, 3621, 3621, 3621,
  22650. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22651. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22652. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22653. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22654. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22655. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22656. 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
  22657. 3621, 3621, 3621, 3621, 3621, 1, 3735, 3735,
  22658. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22659. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22660. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22661. 3735, 3735, 3735, 3735, 3735, 3735, 1, 3735,
  22662. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22663. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22664. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22665. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22666. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22667. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22668. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22669. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 1,
  22670. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22671. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22672. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22673. 3735, 3735, 3735, 3735, 3735, 3735, 3735, 3735,
  22674. 1, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22675. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22676. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22677. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22678. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22679. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22680. 3737, 1, 3737, 3737, 3737, 3737, 3737, 3737,
  22681. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22682. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22683. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22684. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22685. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22686. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22687. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22688. 3737, 3737, 1, 3737, 3737, 3737, 3737, 3737,
  22689. 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737,
  22690. 3737, 3737, 3737, 1, 160, 160, 160, 160,
  22691. 160, 160, 160, 160, 160, 160, 160, 160,
  22692. 160, 160, 160, 160, 160, 160, 160, 160,
  22693. 160, 160, 160, 160, 160, 160, 160, 160,
  22694. 160, 160, 160, 160, 160, 160, 160, 160,
  22695. 160, 160, 160, 160, 160, 160, 160, 160,
  22696. 160, 160, 160, 160, 160, 160, 160, 160,
  22697. 160, 160, 160, 160, 160, 160, 160, 160,
  22698. 160, 160, 160, 160, 1, 163, 163, 163,
  22699. 163, 163, 163, 163, 163, 163, 163, 163,
  22700. 163, 163, 163, 163, 163, 163, 163, 163,
  22701. 163, 163, 163, 163, 163, 163, 163, 163,
  22702. 163, 163, 163, 163, 163, 1, 163, 163,
  22703. 163, 163, 163, 163, 163, 163, 163, 163,
  22704. 163, 163, 163, 163, 163, 163, 163, 163,
  22705. 163, 163, 163, 163, 163, 163, 163, 163,
  22706. 163, 163, 163, 163, 163, 163, 163, 163,
  22707. 163, 163, 163, 163, 163, 163, 163, 163,
  22708. 163, 163, 163, 163, 163, 163, 163, 163,
  22709. 163, 163, 163, 163, 163, 163, 163, 163,
  22710. 163, 163, 163, 163, 163, 163, 1, 163,
  22711. 163, 163, 163, 163, 163, 163, 163, 163,
  22712. 163, 163, 163, 163, 163, 163, 163, 163,
  22713. 163, 163, 163, 163, 163, 163, 163, 163,
  22714. 163, 163, 163, 163, 163, 163, 163, 1,
  22715. 165, 165, 165, 165, 165, 165, 165, 165,
  22716. 165, 165, 165, 165, 165, 165, 165, 165,
  22717. 165, 165, 165, 165, 165, 165, 165, 165,
  22718. 165, 165, 165, 165, 165, 165, 165, 165,
  22719. 165, 165, 165, 165, 165, 165, 165, 165,
  22720. 165, 165, 165, 165, 165, 165, 165, 165,
  22721. 1, 165, 165, 165, 165, 165, 165, 165,
  22722. 165, 165, 165, 165, 165, 165, 165, 165,
  22723. 165, 165, 165, 165, 165, 165, 165, 165,
  22724. 165, 165, 165, 165, 165, 165, 165, 165,
  22725. 165, 165, 165, 165, 165, 165, 165, 165,
  22726. 165, 165, 165, 165, 165, 165, 165, 165,
  22727. 165, 165, 165, 165, 165, 165, 165, 165,
  22728. 165, 165, 165, 165, 165, 165, 165, 165,
  22729. 165, 1, 165, 165, 165, 165, 165, 165,
  22730. 165, 165, 165, 165, 165, 165, 165, 165,
  22731. 165, 165, 1, 3743, 3743, 3743, 3743, 3743,
  22732. 3743, 3743, 3743, 3743, 1, 3743, 3743, 3744,
  22733. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22734. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22735. 3743, 3743, 3743, 3743, 3745, 3743, 3743, 3743,
  22736. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22737. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22738. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22739. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22740. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22741. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22742. 3743, 3743, 3743, 3743, 3743, 3743, 3746, 3743,
  22743. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22744. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22745. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22746. 3743, 3743, 3743, 3743, 3743, 3743, 3743, 3743,
  22747. 3743, 3743, 1, 1, 1, 1, 1, 1,
  22748. 1, 1, 1, 1, 1, 1, 1, 1,
  22749. 1, 1, 1, 1, 1, 1, 1, 1,
  22750. 1, 1, 1, 1, 1, 1, 1, 1,
  22751. 1, 1, 1, 1, 1, 1, 1, 1,
  22752. 1, 1, 1, 1, 1, 1, 1, 1,
  22753. 1, 1, 1, 1, 1, 1, 1, 1,
  22754. 1, 1, 1, 1, 1, 1, 1, 1,
  22755. 1, 1, 1, 1, 3747, 3747, 3747, 3747,
  22756. 3747, 3747, 3747, 3747, 3747, 3747, 3747, 3747,
  22757. 3747, 3747, 3747, 3747, 3747, 3747, 3747, 3747,
  22758. 3747, 3747, 3747, 3747, 3747, 3747, 3747, 3747,
  22759. 3747, 3747, 3748, 3749, 3749, 3749, 3749, 3749,
  22760. 3749, 3749, 3749, 3749, 3749, 3749, 3749, 3750,
  22761. 3749, 3749, 3751, 3752, 3752, 3752, 3753, 1,
  22762. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22763. 3754, 1, 3754, 3754, 3755, 3754, 3754, 3754,
  22764. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22765. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22766. 3754, 3756, 3754, 3754, 3754, 3754, 3754, 3754,
  22767. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22768. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22769. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22770. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22771. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22772. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22773. 3754, 3754, 3754, 3757, 3754, 3754, 3754, 3754,
  22774. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22775. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22776. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22777. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 1,
  22778. 1, 1, 1, 1, 1, 1, 1, 1,
  22779. 1, 1, 1, 1, 1, 1, 1, 1,
  22780. 1, 1, 1, 1, 1, 1, 1, 1,
  22781. 1, 1, 1, 1, 1, 1, 1, 1,
  22782. 1, 1, 1, 1, 1, 1, 1, 1,
  22783. 1, 1, 1, 1, 1, 1, 1, 1,
  22784. 1, 1, 1, 1, 1, 1, 1, 1,
  22785. 1, 1, 1, 1, 1, 1, 1, 1,
  22786. 1, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22787. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22788. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22789. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3759,
  22790. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22791. 3760, 3760, 3760, 3760, 3761, 3760, 3760, 3762,
  22792. 3763, 3763, 3763, 3764, 1, 3765, 1, 3754,
  22793. 1, 1, 1, 1, 1, 1, 1, 1,
  22794. 1, 1, 1, 1, 1, 1, 1, 1,
  22795. 1, 1, 1, 1, 1, 1, 3754, 1,
  22796. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22797. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22798. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22799. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22800. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22801. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22802. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22803. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22804. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22805. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22806. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22807. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22808. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22809. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22810. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22811. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22812. 1, 1, 1, 1, 1, 1, 1, 1,
  22813. 1, 1, 1, 1, 1, 1, 1, 1,
  22814. 1, 1, 1, 1, 1, 1, 1, 1,
  22815. 1, 1, 1, 1, 1, 1, 1, 1,
  22816. 1, 1, 1, 1, 1, 1, 1, 1,
  22817. 1, 1, 1, 1, 1, 1, 1, 1,
  22818. 1, 1, 1, 1, 1, 1, 1, 1,
  22819. 1, 1, 1, 1, 1, 1, 1, 1,
  22820. 1, 1, 3758, 3758, 3758, 3758, 3758, 3758,
  22821. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22822. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22823. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22824. 3759, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22825. 3760, 3760, 3760, 3760, 3760, 3761, 3760, 3760,
  22826. 3762, 3763, 3763, 3763, 3764, 1, 3754, 3754,
  22827. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22828. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22829. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22830. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22831. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22832. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22833. 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
  22834. 3754, 3754, 3754, 3754, 3754, 3754, 1, 3758,
  22835. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22836. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22837. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22838. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 1,
  22839. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22840. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22841. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22842. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22843. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22844. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22845. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22846. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22847. 1, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22848. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22849. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22850. 3758, 3758, 3758, 3758, 3758, 3758, 3758, 3758,
  22851. 3758, 1, 3760, 3760, 3760, 3760, 3760, 3760,
  22852. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22853. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22854. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22855. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22856. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22857. 3760, 3760, 1, 3760, 3760, 3760, 3760, 3760,
  22858. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22859. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22860. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22861. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22862. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22863. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22864. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22865. 3760, 3760, 3760, 1, 3760, 3760, 3760, 3760,
  22866. 3760, 3760, 3760, 3760, 3760, 3760, 3760, 3760,
  22867. 3760, 3760, 3760, 3760, 1, 3766, 1, 1,
  22868. 1, 3767, 1, 1, 1, 1, 1, 1,
  22869. 1, 1, 1, 1, 1, 1, 1, 1,
  22870. 1, 1, 1, 1, 3766, 3768, 3769, 3768,
  22871. 3768, 3768, 3768, 3768, 3770, 1, 3768, 3768,
  22872. 1, 3768, 1, 3768, 3768, 3768, 3768, 3768,
  22873. 3768, 3768, 3768, 3768, 3768, 3768, 1, 1,
  22874. 83, 3768, 1, 3768, 1, 3768, 3768, 3768,
  22875. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  22876. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  22877. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 1,
  22878. 1, 1, 3768, 3768, 3768, 3768, 3768, 3768,
  22879. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  22880. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  22881. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  22882. 3768, 3768, 3768, 1, 1, 1, 1, 1,
  22883. 1, 1, 1, 1, 1, 1, 1, 1,
  22884. 1, 1, 1, 1, 1, 1, 1, 1,
  22885. 1, 1, 1, 1, 1, 1, 1, 1,
  22886. 1, 1, 1, 1, 1, 1, 1, 1,
  22887. 1, 1, 1, 1, 1, 1, 1, 1,
  22888. 1, 1, 1, 1, 1, 1, 1, 1,
  22889. 1, 1, 1, 1, 1, 1, 1, 1,
  22890. 1, 1, 1, 1, 1, 1, 3771, 3771,
  22891. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  22892. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  22893. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  22894. 3771, 3771, 3771, 3771, 3772, 3773, 3773, 3773,
  22895. 3773, 3773, 3773, 3773, 3773, 3773, 3773, 3773,
  22896. 3773, 3774, 3773, 3773, 3775, 3776, 3776, 3776,
  22897. 3777, 1, 3778, 3778, 3778, 3778, 3778, 3778,
  22898. 3778, 3778, 3779, 1, 3778, 3778, 3780, 3778,
  22899. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22900. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22901. 3778, 3779, 3778, 37, 3778, 3778, 3778, 3778,
  22902. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22903. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22904. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22905. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22906. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22907. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22908. 3778, 3778, 3778, 3778, 3778, 3781, 3778, 3778,
  22909. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22910. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22911. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22912. 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778,
  22913. 3778, 1, 1, 1, 1, 1, 1, 1,
  22914. 1, 1, 1, 1, 1, 1, 1, 1,
  22915. 1, 1, 1, 1, 1, 1, 1, 1,
  22916. 1, 1, 1, 1, 1, 1, 1, 1,
  22917. 1, 1, 1, 1, 1, 1, 1, 1,
  22918. 1, 1, 1, 1, 1, 1, 1, 1,
  22919. 1, 1, 1, 1, 1, 1, 1, 1,
  22920. 1, 1, 1, 1, 1, 1, 1, 1,
  22921. 1, 1, 1, 3782, 3782, 3782, 3782, 3782,
  22922. 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
  22923. 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
  22924. 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
  22925. 3782, 3783, 3784, 3784, 3784, 3784, 3784, 3784,
  22926. 3784, 3784, 3784, 3784, 3784, 3784, 3785, 3784,
  22927. 3784, 3786, 3787, 3787, 3787, 3788, 1, 3789,
  22928. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22929. 1, 3789, 3789, 3790, 3789, 3789, 3789, 3789,
  22930. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22931. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22932. 3791, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22933. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22934. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22935. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22936. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22937. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22938. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22939. 3789, 3789, 3792, 3789, 3789, 3789, 3789, 3789,
  22940. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22941. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22942. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  22943. 3789, 3789, 3789, 3789, 3789, 3789, 1, 1,
  22944. 1, 1, 1, 1, 1, 1, 1, 1,
  22945. 1, 1, 1, 1, 1, 1, 1, 1,
  22946. 1, 1, 1, 1, 1, 1, 1, 1,
  22947. 1, 1, 1, 1, 1, 1, 1, 1,
  22948. 1, 1, 1, 1, 1, 1, 1, 1,
  22949. 1, 1, 1, 1, 1, 1, 1, 1,
  22950. 1, 1, 1, 1, 1, 1, 1, 1,
  22951. 1, 1, 1, 1, 1, 1, 1, 1,
  22952. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  22953. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  22954. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  22955. 3793, 3793, 3793, 3793, 3793, 3793, 3794, 3795,
  22956. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  22957. 3795, 3795, 3795, 3796, 3795, 3795, 3797, 3798,
  22958. 3798, 3798, 3799, 1, 3800, 1, 3789, 1,
  22959. 1, 1, 1, 1, 1, 1, 1, 1,
  22960. 1, 1, 1, 1, 1, 1, 1, 1,
  22961. 1, 1, 1, 1, 1, 3789, 1, 3801,
  22962. 1, 3802, 1, 1, 1, 1, 1, 1,
  22963. 1, 1, 1, 1, 1, 1, 1, 1,
  22964. 1, 1, 1, 1, 1, 1, 1, 1,
  22965. 3802, 1, 3803, 1, 3804, 1, 1, 1,
  22966. 1, 1, 1, 1, 1, 1, 1, 1,
  22967. 1, 1, 1, 1, 1, 1, 1, 1,
  22968. 1, 1, 1, 3804, 1, 3805, 1, 1,
  22969. 1, 3806, 1, 1, 1, 1, 1, 1,
  22970. 1, 1, 1, 1, 1, 1, 1, 1,
  22971. 1, 1, 1, 1, 3805, 3807, 3808, 3807,
  22972. 3807, 3807, 3807, 3807, 3809, 1, 3807, 3807,
  22973. 1, 3807, 3810, 3807, 3807, 3807, 3807, 3807,
  22974. 3807, 3807, 3807, 3807, 3807, 3807, 1, 1,
  22975. 1, 3807, 1, 3807, 1, 3807, 3807, 3807,
  22976. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
  22977. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
  22978. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3607,
  22979. 1, 1, 3807, 3807, 3807, 3807, 3807, 3807,
  22980. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
  22981. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
  22982. 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
  22983. 3807, 3807, 3807, 1, 1, 1, 1, 1,
  22984. 1, 1, 1, 1, 1, 1, 1, 1,
  22985. 1, 1, 1, 1, 1, 1, 1, 1,
  22986. 1, 1, 1, 1, 1, 1, 1, 1,
  22987. 1, 1, 1, 1, 1, 1, 1, 1,
  22988. 1, 1, 1, 1, 1, 1, 1, 1,
  22989. 1, 1, 1, 1, 1, 1, 1, 1,
  22990. 1, 1, 1, 1, 1, 1, 1, 1,
  22991. 1, 1, 1, 1, 1, 1, 3811, 3811,
  22992. 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811,
  22993. 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811,
  22994. 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811,
  22995. 3811, 3811, 3811, 3811, 3812, 3813, 3813, 3813,
  22996. 3813, 3813, 3813, 3813, 3813, 3813, 3813, 3813,
  22997. 3813, 3814, 3813, 3813, 3815, 3816, 3816, 3816,
  22998. 3817, 1, 3818, 1, 1, 1, 3819, 1,
  22999. 1, 1, 1, 1, 1, 1, 1, 1,
  23000. 1, 1, 1, 1, 1, 1, 1, 1,
  23001. 1, 3818, 3820, 3710, 3820, 3820, 3820, 3820,
  23002. 3820, 3821, 1, 3820, 3820, 1, 3820, 3620,
  23003. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23004. 3820, 3820, 3820, 1, 1, 1, 3820, 1,
  23005. 3820, 1, 3820, 3820, 3820, 3820, 3820, 3820,
  23006. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23007. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23008. 3820, 3820, 3820, 3820, 3621, 1, 1, 3820,
  23009. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23010. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23011. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23012. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23013. 1, 1, 1, 1, 1, 1, 1, 1,
  23014. 1, 1, 1, 1, 1, 1, 1, 1,
  23015. 1, 1, 1, 1, 1, 1, 1, 1,
  23016. 1, 1, 1, 1, 1, 1, 1, 1,
  23017. 1, 1, 1, 1, 1, 1, 1, 1,
  23018. 1, 1, 1, 1, 1, 1, 1, 1,
  23019. 1, 1, 1, 1, 1, 1, 1, 1,
  23020. 1, 1, 1, 1, 1, 1, 1, 1,
  23021. 1, 1, 1, 3822, 3822, 3822, 3822, 3822,
  23022. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23023. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23024. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23025. 3822, 3823, 3824, 3824, 3824, 3824, 3824, 3824,
  23026. 3824, 3824, 3824, 3824, 3824, 3824, 3825, 3824,
  23027. 3824, 3826, 3827, 3827, 3827, 3828, 1, 3829,
  23028. 1, 3818, 1, 1, 1, 1, 1, 1,
  23029. 1, 1, 1, 1, 1, 1, 1, 1,
  23030. 1, 1, 1, 1, 1, 1, 1, 1,
  23031. 3818, 1, 3830, 1, 3831, 1, 1, 1,
  23032. 1, 1, 1, 1, 1, 1, 1, 1,
  23033. 1, 1, 1, 1, 1, 1, 1, 1,
  23034. 1, 1, 1, 3831, 1, 3832, 1, 1,
  23035. 1, 3833, 1, 1, 1, 1, 1, 1,
  23036. 1, 1, 1, 1, 1, 1, 1, 1,
  23037. 1, 1, 1, 1, 3832, 3834, 1, 3834,
  23038. 3834, 3834, 3834, 3834, 3835, 1, 3834, 3834,
  23039. 1, 3834, 1, 3834, 3834, 3834, 3834, 3834,
  23040. 3834, 3834, 3834, 3834, 3834, 3834, 1, 1,
  23041. 1, 3834, 1, 3834, 1, 3834, 3834, 3834,
  23042. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23043. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23044. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 1,
  23045. 1, 1, 3834, 3834, 3834, 3834, 3834, 3834,
  23046. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23047. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23048. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23049. 3834, 3834, 3834, 1, 1, 1, 1, 1,
  23050. 1, 1, 1, 1, 1, 1, 1, 1,
  23051. 1, 1, 1, 1, 1, 1, 1, 1,
  23052. 1, 1, 1, 1, 1, 1, 1, 1,
  23053. 1, 1, 1, 1, 1, 1, 1, 1,
  23054. 1, 1, 1, 1, 1, 1, 1, 1,
  23055. 1, 1, 1, 1, 1, 1, 1, 1,
  23056. 1, 1, 1, 1, 1, 1, 1, 1,
  23057. 1, 1, 1, 1, 1, 1, 3836, 3836,
  23058. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23059. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23060. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23061. 3836, 3836, 3836, 3836, 3837, 3838, 3838, 3838,
  23062. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23063. 3838, 3839, 3838, 3838, 3840, 3841, 3841, 3841,
  23064. 3842, 1, 3843, 1, 3832, 1, 1, 1,
  23065. 1, 1, 1, 1, 1, 1, 1, 1,
  23066. 1, 1, 1, 1, 1, 1, 1, 1,
  23067. 1, 1, 1, 3832, 1, 3834, 3834, 3834,
  23068. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23069. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23070. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23071. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23072. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23073. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23074. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  23075. 3834, 3834, 3834, 3834, 3834, 1, 3836, 3836,
  23076. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23077. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23078. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23079. 3836, 3836, 3836, 3836, 3836, 3836, 1, 3836,
  23080. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23081. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23082. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23083. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23084. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23085. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23086. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23087. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 1,
  23088. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23089. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23090. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23091. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  23092. 1, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23093. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23094. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23095. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23096. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23097. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23098. 3838, 1, 3838, 3838, 3838, 3838, 3838, 3838,
  23099. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23100. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23101. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23102. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23103. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23104. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23105. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23106. 3838, 3838, 1, 3838, 3838, 3838, 3838, 3838,
  23107. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3838,
  23108. 3838, 3838, 3838, 1, 3844, 1, 1, 1,
  23109. 3845, 1, 1, 1, 1, 1, 1, 1,
  23110. 1, 1, 1, 1, 1, 1, 1, 1,
  23111. 1, 1, 1, 3844, 3846, 1, 3846, 3846,
  23112. 3846, 3846, 3846, 3847, 1, 3846, 3846, 1,
  23113. 3846, 1, 3846, 3846, 3846, 3846, 3846, 3846,
  23114. 3846, 3846, 3846, 3846, 3846, 1, 1, 1,
  23115. 3846, 1, 3846, 1, 3846, 3846, 3846, 3846,
  23116. 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23117. 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23118. 3846, 3846, 3846, 3846, 3846, 3846, 1, 1,
  23119. 1, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23120. 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23121. 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23122. 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
  23123. 3846, 3846, 1, 1, 1, 1, 1, 1,
  23124. 1, 1, 1, 1, 1, 1, 1, 1,
  23125. 1, 1, 1, 1, 1, 1, 1, 1,
  23126. 1, 1, 1, 1, 1, 1, 1, 1,
  23127. 1, 1, 1, 1, 1, 1, 1, 1,
  23128. 1, 1, 1, 1, 1, 1, 1, 1,
  23129. 1, 1, 1, 1, 1, 1, 1, 1,
  23130. 1, 1, 1, 1, 1, 1, 1, 1,
  23131. 1, 1, 1, 1, 1, 3848, 3848, 3848,
  23132. 3848, 3848, 3848, 3848, 3848, 3848, 3848, 3848,
  23133. 3848, 3848, 3848, 3848, 3848, 3848, 3848, 3848,
  23134. 3848, 3848, 3848, 3848, 3848, 3848, 3848, 3848,
  23135. 3848, 3848, 3848, 3849, 3850, 3850, 3850, 3850,
  23136. 3850, 3850, 3850, 3850, 3850, 3850, 3850, 3850,
  23137. 3851, 3850, 3850, 3852, 3853, 3853, 3853, 3854,
  23138. 1, 3832, 1, 1, 1, 3833, 1, 1,
  23139. 1, 1, 1, 1, 1, 1, 1, 1,
  23140. 1, 1, 1, 1, 1, 1, 1, 1,
  23141. 3832, 3820, 3710, 3820, 3820, 3820, 3820, 3820,
  23142. 3835, 1, 3820, 3820, 1, 3820, 3620, 3820,
  23143. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23144. 3820, 3820, 1, 1, 1, 3820, 1, 3820,
  23145. 1, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23146. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23147. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23148. 3820, 3820, 3820, 1, 1, 1, 3820, 3820,
  23149. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23150. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23151. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23152. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 1,
  23153. 1, 1, 1, 1, 1, 1, 1, 1,
  23154. 1, 1, 1, 1, 1, 1, 1, 1,
  23155. 1, 1, 1, 1, 1, 1, 1, 1,
  23156. 1, 1, 1, 1, 1, 1, 1, 1,
  23157. 1, 1, 1, 1, 1, 1, 1, 1,
  23158. 1, 1, 1, 1, 1, 1, 1, 1,
  23159. 1, 1, 1, 1, 1, 1, 1, 1,
  23160. 1, 1, 1, 1, 1, 1, 1, 1,
  23161. 1, 1, 3822, 3822, 3822, 3822, 3822, 3822,
  23162. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23163. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23164. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23165. 3823, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23166. 3824, 3824, 3824, 3824, 3824, 3825, 3824, 3824,
  23167. 3826, 3827, 3827, 3827, 3828, 1, 3820, 3820,
  23168. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23169. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23170. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23171. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23172. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23173. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23174. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  23175. 3820, 3820, 3820, 3820, 3820, 3820, 1, 3822,
  23176. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23177. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23178. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23179. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 1,
  23180. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23181. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23182. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23183. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23184. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23185. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23186. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23187. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23188. 1, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23189. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23190. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23191. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  23192. 3822, 1, 3824, 3824, 3824, 3824, 3824, 3824,
  23193. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23194. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23195. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23196. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23197. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23198. 3824, 3824, 1, 3824, 3824, 3824, 3824, 3824,
  23199. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23200. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23201. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23202. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23203. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23204. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23205. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23206. 3824, 3824, 3824, 1, 3824, 3824, 3824, 3824,
  23207. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  23208. 3824, 3824, 3824, 3824, 1, 3855, 1, 1,
  23209. 1, 3856, 1, 1, 1, 1, 1, 1,
  23210. 1, 1, 1, 1, 1, 1, 1, 1,
  23211. 1, 1, 1, 1, 3855, 3857, 3858, 3857,
  23212. 3857, 3857, 3857, 3857, 3859, 1, 3857, 3857,
  23213. 1, 3857, 3700, 3857, 3857, 3857, 3857, 3857,
  23214. 3857, 3857, 3857, 3857, 3857, 3857, 1, 1,
  23215. 1, 3857, 1, 3857, 1, 3857, 3857, 3857,
  23216. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
  23217. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
  23218. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3701,
  23219. 1, 1, 3857, 3857, 3857, 3857, 3857, 3857,
  23220. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
  23221. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
  23222. 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
  23223. 3857, 3857, 3857, 1, 1, 1, 1, 1,
  23224. 1, 1, 1, 1, 1, 1, 1, 1,
  23225. 1, 1, 1, 1, 1, 1, 1, 1,
  23226. 1, 1, 1, 1, 1, 1, 1, 1,
  23227. 1, 1, 1, 1, 1, 1, 1, 1,
  23228. 1, 1, 1, 1, 1, 1, 1, 1,
  23229. 1, 1, 1, 1, 1, 1, 1, 1,
  23230. 1, 1, 1, 1, 1, 1, 1, 1,
  23231. 1, 1, 1, 1, 1, 1, 3860, 3860,
  23232. 3860, 3860, 3860, 3860, 3860, 3860, 3860, 3860,
  23233. 3860, 3860, 3860, 3860, 3860, 3860, 3860, 3860,
  23234. 3860, 3860, 3860, 3860, 3860, 3860, 3860, 3860,
  23235. 3860, 3860, 3860, 3860, 3861, 3862, 3862, 3862,
  23236. 3862, 3862, 3862, 3862, 3862, 3862, 3862, 3862,
  23237. 3862, 3863, 3862, 3862, 3864, 3865, 3865, 3865,
  23238. 3866, 1, 3867, 3867, 3867, 3867, 3867, 3867,
  23239. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23240. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23241. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23242. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23243. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23244. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23245. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  23246. 3867, 3867, 1, 3868, 3868, 3868, 3868, 3868,
  23247. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23248. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23249. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23250. 3868, 3868, 3868, 1, 3868, 3868, 3868, 3868,
  23251. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23252. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23253. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23254. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23255. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23256. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23257. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23258. 3868, 3868, 3868, 3868, 1, 3868, 3868, 3868,
  23259. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23260. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23261. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  23262. 3868, 3868, 3868, 3868, 3868, 1, 3869, 3869,
  23263. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23264. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23265. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23266. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23267. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23268. 3869, 3869, 3869, 3869, 3869, 3869, 1, 3869,
  23269. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23270. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23271. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23272. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23273. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23274. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23275. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23276. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 1,
  23277. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23278. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  23279. 1, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23280. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23281. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23282. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23283. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23284. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23285. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23286. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23287. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23288. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23289. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23290. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23291. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23292. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23293. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23294. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23295. 3789, 1, 1, 1, 1, 1, 1, 1,
  23296. 1, 1, 1, 1, 1, 1, 1, 1,
  23297. 1, 1, 1, 1, 1, 1, 1, 1,
  23298. 1, 1, 1, 1, 1, 1, 1, 1,
  23299. 1, 1, 1, 1, 1, 1, 1, 1,
  23300. 1, 1, 1, 1, 1, 1, 1, 1,
  23301. 1, 1, 1, 1, 1, 1, 1, 1,
  23302. 1, 1, 1, 1, 1, 1, 1, 1,
  23303. 1, 1, 1, 3793, 3793, 3793, 3793, 3793,
  23304. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23305. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23306. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23307. 3793, 3794, 3795, 3795, 3795, 3795, 3795, 3795,
  23308. 3795, 3795, 3795, 3795, 3795, 3795, 3796, 3795,
  23309. 3795, 3797, 3798, 3798, 3798, 3799, 1, 3789,
  23310. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23311. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23312. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23313. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23314. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23315. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23316. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23317. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 1,
  23318. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23319. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23320. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23321. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23322. 1, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23323. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23324. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23325. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23326. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23327. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23328. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23329. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23330. 3793, 1, 3793, 3793, 3793, 3793, 3793, 3793,
  23331. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23332. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23333. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23334. 3793, 3793, 1, 3795, 3795, 3795, 3795, 3795,
  23335. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23336. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23337. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23338. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23339. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23340. 3795, 3795, 3795, 1, 3795, 3795, 3795, 3795,
  23341. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23342. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23343. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23344. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23345. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23346. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23347. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23348. 3795, 3795, 3795, 3795, 1, 3795, 3795, 3795,
  23349. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23350. 3795, 3795, 3795, 3795, 3795, 1, 3789, 3789,
  23351. 3789, 3789, 3789, 3789, 3789, 3789, 3870, 1,
  23352. 3789, 3789, 3871, 3789, 3789, 3789, 3789, 3789,
  23353. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23354. 3789, 3789, 3789, 3789, 3789, 3870, 3789, 48,
  23355. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23356. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23357. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23358. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23359. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23360. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23361. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23362. 3789, 3792, 3789, 3789, 3789, 3789, 3789, 3789,
  23363. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23364. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23365. 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
  23366. 3789, 3789, 3789, 3789, 3789, 1, 1, 1,
  23367. 1, 1, 1, 1, 1, 1, 1, 1,
  23368. 1, 1, 1, 1, 1, 1, 1, 1,
  23369. 1, 1, 1, 1, 1, 1, 1, 1,
  23370. 1, 1, 1, 1, 1, 1, 1, 1,
  23371. 1, 1, 1, 1, 1, 1, 1, 1,
  23372. 1, 1, 1, 1, 1, 1, 1, 1,
  23373. 1, 1, 1, 1, 1, 1, 1, 1,
  23374. 1, 1, 1, 1, 1, 1, 1, 3793,
  23375. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23376. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23377. 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
  23378. 3793, 3793, 3793, 3793, 3793, 3794, 3795, 3795,
  23379. 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
  23380. 3795, 3795, 3796, 3795, 3795, 3797, 3798, 3798,
  23381. 3798, 3799, 1, 3872, 1, 3870, 1, 1,
  23382. 1, 1, 1, 1, 1, 1, 1, 1,
  23383. 1, 1, 1, 1, 1, 1, 1, 1,
  23384. 1, 1, 1, 1, 3870, 1, 3873, 1,
  23385. 3874, 1, 1, 1, 1, 1, 1, 1,
  23386. 1, 1, 1, 1, 1, 1, 1, 1,
  23387. 1, 1, 1, 1, 1, 1, 1, 3874,
  23388. 1, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23389. 3875, 3876, 1, 3875, 3875, 3877, 3875, 3875,
  23390. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23391. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23392. 3876, 3875, 3745, 3875, 3875, 3875, 3875, 3875,
  23393. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23394. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23395. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23396. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23397. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23398. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23399. 3875, 3875, 3875, 3875, 3878, 3875, 3875, 3875,
  23400. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23401. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23402. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23403. 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
  23404. 1, 1, 1, 1, 1, 1, 1, 1,
  23405. 1, 1, 1, 1, 1, 1, 1, 1,
  23406. 1, 1, 1, 1, 1, 1, 1, 1,
  23407. 1, 1, 1, 1, 1, 1, 1, 1,
  23408. 1, 1, 1, 1, 1, 1, 1, 1,
  23409. 1, 1, 1, 1, 1, 1, 1, 1,
  23410. 1, 1, 1, 1, 1, 1, 1, 1,
  23411. 1, 1, 1, 1, 1, 1, 1, 1,
  23412. 1, 1, 3879, 3879, 3879, 3879, 3879, 3879,
  23413. 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879,
  23414. 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879,
  23415. 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879,
  23416. 3880, 3881, 3881, 3881, 3881, 3881, 3881, 3881,
  23417. 3881, 3881, 3881, 3881, 3881, 3882, 3881, 3881,
  23418. 3883, 3884, 3884, 3884, 3885, 1, 3886, 3886,
  23419. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 1,
  23420. 3886, 3886, 3887, 3886, 3886, 3886, 3886, 3886,
  23421. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23422. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3888,
  23423. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23424. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23425. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23426. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23427. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23428. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23429. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23430. 3886, 3889, 3886, 3886, 3886, 3886, 3886, 3886,
  23431. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23432. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23433. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23434. 3886, 3886, 3886, 3886, 3886, 1, 1, 1,
  23435. 1, 1, 1, 1, 1, 1, 1, 1,
  23436. 1, 1, 1, 1, 1, 1, 1, 1,
  23437. 1, 1, 1, 1, 1, 1, 1, 1,
  23438. 1, 1, 1, 1, 1, 1, 1, 1,
  23439. 1, 1, 1, 1, 1, 1, 1, 1,
  23440. 1, 1, 1, 1, 1, 1, 1, 1,
  23441. 1, 1, 1, 1, 1, 1, 1, 1,
  23442. 1, 1, 1, 1, 1, 1, 1, 3890,
  23443. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23444. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23445. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23446. 3890, 3890, 3890, 3890, 3890, 3891, 3892, 3892,
  23447. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23448. 3892, 3892, 3893, 3892, 3892, 3894, 3895, 3895,
  23449. 3895, 3896, 1, 3897, 1, 3886, 1, 1,
  23450. 1, 1, 1, 1, 1, 1, 1, 1,
  23451. 1, 1, 1, 1, 1, 1, 1, 1,
  23452. 1, 1, 1, 1, 3886, 1, 3886, 3886,
  23453. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23454. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23455. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23456. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23457. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23458. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23459. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23460. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23461. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23462. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23463. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23464. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23465. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23466. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23467. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23468. 3886, 3886, 3886, 3886, 3886, 3886, 1, 1,
  23469. 1, 1, 1, 1, 1, 1, 1, 1,
  23470. 1, 1, 1, 1, 1, 1, 1, 1,
  23471. 1, 1, 1, 1, 1, 1, 1, 1,
  23472. 1, 1, 1, 1, 1, 1, 1, 1,
  23473. 1, 1, 1, 1, 1, 1, 1, 1,
  23474. 1, 1, 1, 1, 1, 1, 1, 1,
  23475. 1, 1, 1, 1, 1, 1, 1, 1,
  23476. 1, 1, 1, 1, 1, 1, 1, 1,
  23477. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23478. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23479. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23480. 3890, 3890, 3890, 3890, 3890, 3890, 3891, 3892,
  23481. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23482. 3892, 3892, 3892, 3893, 3892, 3892, 3894, 3895,
  23483. 3895, 3895, 3896, 1, 3886, 3886, 3886, 3886,
  23484. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23485. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23486. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23487. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23488. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23489. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23490. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23491. 3886, 3886, 3886, 3886, 1, 3890, 3890, 3890,
  23492. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23493. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23494. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23495. 3890, 3890, 3890, 3890, 3890, 1, 3890, 3890,
  23496. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23497. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23498. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23499. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23500. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23501. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23502. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23503. 3890, 3890, 3890, 3890, 3890, 3890, 1, 3890,
  23504. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23505. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23506. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23507. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 1,
  23508. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23509. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23510. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23511. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23512. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23513. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23514. 1, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23515. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23516. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23517. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23518. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23519. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23520. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23521. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23522. 3892, 1, 3892, 3892, 3892, 3892, 3892, 3892,
  23523. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
  23524. 3892, 3892, 1, 3886, 3886, 3886, 3886, 3886,
  23525. 3886, 3886, 3886, 3898, 1, 3886, 3886, 3899,
  23526. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23527. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23528. 3886, 3886, 3898, 3886, 3756, 3886, 3886, 3886,
  23529. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23530. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23531. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23532. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23533. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23534. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23535. 3886, 3886, 3886, 3886, 3886, 3886, 3889, 3886,
  23536. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23537. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23538. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23539. 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
  23540. 3886, 3886, 1, 1, 1, 1, 1, 1,
  23541. 1, 1, 1, 1, 1, 1, 1, 1,
  23542. 1, 1, 1, 1, 1, 1, 1, 1,
  23543. 1, 1, 1, 1, 1, 1, 1, 1,
  23544. 1, 1, 1, 1, 1, 1, 1, 1,
  23545. 1, 1, 1, 1, 1, 1, 1, 1,
  23546. 1, 1, 1, 1, 1, 1, 1, 1,
  23547. 1, 1, 1, 1, 1, 1, 1, 1,
  23548. 1, 1, 1, 1, 3890, 3890, 3890, 3890,
  23549. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23550. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23551. 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
  23552. 3890, 3890, 3891, 3892, 3892, 3892, 3892, 3892,
  23553. 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3893,
  23554. 3892, 3892, 3894, 3895, 3895, 3895, 3896, 1,
  23555. 3900, 1, 3898, 1, 1, 1, 1, 1,
  23556. 1, 1, 1, 1, 1, 1, 1, 1,
  23557. 1, 1, 1, 1, 1, 1, 1, 1,
  23558. 1, 3898, 1, 3901, 3901, 3901, 3901, 3901,
  23559. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23560. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23561. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23562. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23563. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23564. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23565. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  23566. 3901, 3901, 3901, 1, 3902, 3902, 3902, 3902,
  23567. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23568. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23569. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23570. 3902, 3902, 3902, 3902, 1, 3902, 3902, 3902,
  23571. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23572. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23573. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23574. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23575. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23576. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23577. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23578. 3902, 3902, 3902, 3902, 3902, 1, 3902, 3902,
  23579. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23580. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23581. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  23582. 3902, 3902, 3902, 3902, 3902, 3902, 1, 3903,
  23583. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23584. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23585. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23586. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23587. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23588. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 1,
  23589. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23590. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23591. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23592. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23593. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23594. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23595. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23596. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23597. 1, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23598. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  23599. 3903, 1, 3904, 3904, 3904, 3904, 3904, 3904,
  23600. 3904, 3904, 3905, 1, 3904, 3904, 3906, 3904,
  23601. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23602. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23603. 3904, 3905, 3904, 3907, 3904, 3904, 3904, 3904,
  23604. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23605. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23606. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23607. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23608. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23609. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23610. 3904, 3904, 3904, 3904, 3904, 3908, 3904, 3904,
  23611. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23612. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23613. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23614. 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
  23615. 3904, 1, 1, 1, 1, 1, 1, 1,
  23616. 1, 1, 1, 1, 1, 1, 1, 1,
  23617. 1, 1, 1, 1, 1, 1, 1, 1,
  23618. 1, 1, 1, 1, 1, 1, 1, 1,
  23619. 1, 1, 1, 1, 1, 1, 1, 1,
  23620. 1, 1, 1, 1, 1, 1, 1, 1,
  23621. 1, 1, 1, 1, 1, 1, 1, 1,
  23622. 1, 1, 1, 1, 1, 1, 1, 1,
  23623. 1, 1, 1, 3909, 3909, 3909, 3909, 3909,
  23624. 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
  23625. 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
  23626. 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
  23627. 3909, 3910, 3911, 3911, 3911, 3911, 3911, 3911,
  23628. 3911, 3911, 3911, 3911, 3911, 3911, 3912, 3911,
  23629. 3911, 3913, 3914, 3914, 3914, 3915, 1, 3916,
  23630. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23631. 1, 3916, 3916, 3917, 3916, 3916, 3916, 3916,
  23632. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23633. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23634. 3918, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23635. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23636. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23637. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23638. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23639. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23640. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23641. 3916, 3916, 3919, 3916, 3916, 3916, 3916, 3916,
  23642. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23643. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23644. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23645. 3916, 3916, 3916, 3916, 3916, 3916, 1, 1,
  23646. 1, 1, 1, 1, 1, 1, 1, 1,
  23647. 1, 1, 1, 1, 1, 1, 1, 1,
  23648. 1, 1, 1, 1, 1, 1, 1, 1,
  23649. 1, 1, 1, 1, 1, 1, 1, 1,
  23650. 1, 1, 1, 1, 1, 1, 1, 1,
  23651. 1, 1, 1, 1, 1, 1, 1, 1,
  23652. 1, 1, 1, 1, 1, 1, 1, 1,
  23653. 1, 1, 1, 1, 1, 1, 1, 1,
  23654. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23655. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23656. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23657. 3920, 3920, 3920, 3920, 3920, 3920, 3921, 3922,
  23658. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23659. 3922, 3922, 3922, 3923, 3922, 3922, 3924, 3925,
  23660. 3925, 3925, 3926, 1, 3927, 1, 3916, 1,
  23661. 1, 1, 1, 1, 1, 1, 1, 1,
  23662. 1, 1, 1, 1, 1, 1, 1, 1,
  23663. 1, 1, 1, 1, 1, 3916, 1, 3928,
  23664. 1, 3929, 1, 1, 1, 1, 1, 1,
  23665. 1, 1, 1, 1, 1, 1, 1, 1,
  23666. 1, 1, 1, 1, 1, 1, 1, 1,
  23667. 3929, 1, 3916, 3916, 3916, 3916, 3916, 3916,
  23668. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23669. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23670. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23671. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23672. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23673. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23674. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23675. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23676. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23677. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23678. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23679. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23680. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23681. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23682. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23683. 3916, 3916, 1, 1, 1, 1, 1, 1,
  23684. 1, 1, 1, 1, 1, 1, 1, 1,
  23685. 1, 1, 1, 1, 1, 1, 1, 1,
  23686. 1, 1, 1, 1, 1, 1, 1, 1,
  23687. 1, 1, 1, 1, 1, 1, 1, 1,
  23688. 1, 1, 1, 1, 1, 1, 1, 1,
  23689. 1, 1, 1, 1, 1, 1, 1, 1,
  23690. 1, 1, 1, 1, 1, 1, 1, 1,
  23691. 1, 1, 1, 1, 3920, 3920, 3920, 3920,
  23692. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23693. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23694. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23695. 3920, 3920, 3921, 3922, 3922, 3922, 3922, 3922,
  23696. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3923,
  23697. 3922, 3922, 3924, 3925, 3925, 3925, 3926, 1,
  23698. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23699. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23700. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23701. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23702. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23703. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23704. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23705. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23706. 1, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23707. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23708. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23709. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23710. 3920, 1, 3920, 3920, 3920, 3920, 3920, 3920,
  23711. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23712. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23713. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23714. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23715. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23716. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23717. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23718. 3920, 3920, 1, 3920, 3920, 3920, 3920, 3920,
  23719. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23720. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23721. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23722. 3920, 3920, 3920, 1, 3922, 3922, 3922, 3922,
  23723. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23724. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23725. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23726. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23727. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23728. 3922, 3922, 3922, 3922, 1, 3922, 3922, 3922,
  23729. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23730. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23731. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23732. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23733. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23734. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23735. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23736. 3922, 3922, 3922, 3922, 3922, 1, 3922, 3922,
  23737. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23738. 3922, 3922, 3922, 3922, 3922, 3922, 1, 3916,
  23739. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3930,
  23740. 1, 3916, 3916, 3931, 3916, 3916, 3916, 3916,
  23741. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23742. 3916, 3916, 3916, 3916, 3916, 3916, 3930, 3916,
  23743. 3932, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23744. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23745. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23746. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23747. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23748. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23749. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23750. 3916, 3916, 3919, 3916, 3916, 3916, 3916, 3916,
  23751. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23752. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23753. 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
  23754. 3916, 3916, 3916, 3916, 3916, 3916, 1, 1,
  23755. 1, 1, 1, 1, 1, 1, 1, 1,
  23756. 1, 1, 1, 1, 1, 1, 1, 1,
  23757. 1, 1, 1, 1, 1, 1, 1, 1,
  23758. 1, 1, 1, 1, 1, 1, 1, 1,
  23759. 1, 1, 1, 1, 1, 1, 1, 1,
  23760. 1, 1, 1, 1, 1, 1, 1, 1,
  23761. 1, 1, 1, 1, 1, 1, 1, 1,
  23762. 1, 1, 1, 1, 1, 1, 1, 1,
  23763. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23764. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23765. 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
  23766. 3920, 3920, 3920, 3920, 3920, 3920, 3921, 3922,
  23767. 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922,
  23768. 3922, 3922, 3922, 3923, 3922, 3922, 3924, 3925,
  23769. 3925, 3925, 3926, 1, 3933, 1, 3930, 1,
  23770. 1, 1, 1, 1, 1, 1, 1, 1,
  23771. 1, 1, 1, 1, 1, 1, 1, 1,
  23772. 1, 1, 1, 1, 1, 3930, 1, 3934,
  23773. 1, 3935, 1, 1, 1, 1, 1, 1,
  23774. 1, 1, 1, 1, 1, 1, 1, 1,
  23775. 1, 1, 1, 1, 1, 1, 1, 1,
  23776. 3935, 1, 3936, 1, 1, 1, 3937, 1,
  23777. 1, 1, 1, 1, 1, 1, 1, 1,
  23778. 1, 1, 1, 1, 1, 1, 1, 1,
  23779. 1, 3936, 3938, 3939, 3938, 3938, 3938, 3938,
  23780. 3938, 3940, 1, 3938, 3938, 1, 3938, 3941,
  23781. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23782. 3938, 3938, 3938, 1, 1, 83, 3938, 1,
  23783. 3938, 1, 3938, 3938, 3938, 3938, 3938, 3938,
  23784. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23785. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23786. 3938, 3938, 3938, 3938, 1, 1, 1, 3938,
  23787. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23788. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23789. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23790. 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
  23791. 1, 1, 1, 1, 1, 1, 1, 1,
  23792. 1, 1, 1, 1, 1, 1, 1, 1,
  23793. 1, 1, 1, 1, 1, 1, 1, 1,
  23794. 1, 1, 1, 1, 1, 1, 1, 1,
  23795. 1, 1, 1, 1, 1, 1, 1, 1,
  23796. 1, 1, 1, 1, 1, 1, 1, 1,
  23797. 1, 1, 1, 1, 1, 1, 1, 1,
  23798. 1, 1, 1, 1, 1, 1, 1, 1,
  23799. 1, 1, 1, 3942, 3942, 3942, 3942, 3942,
  23800. 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942,
  23801. 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942,
  23802. 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942,
  23803. 3942, 3943, 3944, 3944, 3944, 3944, 3944, 3944,
  23804. 3944, 3944, 3944, 3944, 3944, 3944, 3945, 3944,
  23805. 3944, 3946, 3947, 3947, 3947, 3948, 1, 3949,
  23806. 1, 1, 1, 3950, 1, 1, 1, 1,
  23807. 1, 1, 1, 1, 1, 1, 1, 1,
  23808. 1, 1, 1, 1, 1, 1, 3949, 3951,
  23809. 3952, 3951, 3951, 3951, 3951, 3951, 3953, 1,
  23810. 3951, 3951, 1, 3951, 3954, 3951, 3951, 3951,
  23811. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23812. 1, 1, 8, 3951, 1, 3951, 1, 3951,
  23813. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23814. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23815. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23816. 3951, 1, 1, 1, 3951, 3951, 3951, 3951,
  23817. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23818. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23819. 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
  23820. 3951, 3951, 3951, 3951, 3951, 1, 1, 1,
  23821. 1, 1, 1, 1, 1, 1, 1, 1,
  23822. 1, 1, 1, 1, 1, 1, 1, 1,
  23823. 1, 1, 1, 1, 1, 1, 1, 1,
  23824. 1, 1, 1, 1, 1, 1, 1, 1,
  23825. 1, 1, 1, 1, 1, 1, 1, 1,
  23826. 1, 1, 1, 1, 1, 1, 1, 1,
  23827. 1, 1, 1, 1, 1, 1, 1, 1,
  23828. 1, 1, 1, 1, 1, 1, 1, 1,
  23829. 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
  23830. 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
  23831. 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
  23832. 3955, 3955, 3955, 3955, 3955, 3955, 3956, 3957,
  23833. 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957,
  23834. 3957, 3957, 3957, 3958, 3957, 3957, 3959, 3960,
  23835. 3960, 3960, 3961, 1, 3962, 1, 3949, 1,
  23836. 1, 1, 1, 1, 1, 1, 1, 1,
  23837. 1, 1, 1, 1, 1, 1, 1, 1,
  23838. 1, 1, 1, 1, 1, 3949, 1, 3963,
  23839. 3964, 3963, 3963, 3963, 3963, 3963, 1, 1,
  23840. 3963, 3963, 1, 3963, 3965, 3963, 3963, 3963,
  23841. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23842. 1, 1, 1, 3963, 1, 3963, 1, 3963,
  23843. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23844. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23845. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23846. 3963, 1, 1, 1, 3963, 3963, 3963, 3963,
  23847. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23848. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23849. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  23850. 3963, 3963, 3963, 3963, 3963, 1, 1, 1,
  23851. 1, 1, 1, 1, 1, 1, 1, 1,
  23852. 1, 1, 1, 1, 1, 1, 1, 1,
  23853. 1, 1, 1, 1, 1, 1, 1, 1,
  23854. 1, 1, 1, 1, 1, 1, 1, 1,
  23855. 1, 1, 1, 1, 1, 1, 1, 1,
  23856. 1, 1, 1, 1, 1, 1, 1, 1,
  23857. 1, 1, 1, 1, 1, 1, 1, 1,
  23858. 1, 1, 1, 1, 1, 1, 1, 1,
  23859. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  23860. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  23861. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  23862. 3966, 3966, 3966, 3966, 3966, 3966, 3967, 3968,
  23863. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  23864. 3968, 3968, 3968, 3969, 3968, 3968, 3970, 3971,
  23865. 3971, 3971, 3972, 1, 3973, 1, 3974, 1,
  23866. 1, 1, 1, 1, 1, 1, 1, 1,
  23867. 1, 1, 1, 1, 1, 1, 1, 1,
  23868. 1, 1, 1, 1, 1, 3974, 1, 3975,
  23869. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3964,
  23870. 1, 3975, 3975, 3976, 3975, 3975, 3975, 3975,
  23871. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23872. 3975, 3975, 3975, 3975, 3975, 3975, 3964, 3975,
  23873. 1, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23874. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23875. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23876. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23877. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23878. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23879. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23880. 3975, 3975, 3977, 3975, 3975, 3975, 3975, 3975,
  23881. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23882. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23883. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23884. 3975, 3975, 3975, 3975, 3975, 3975, 1, 1,
  23885. 1, 1, 1, 1, 1, 1, 1, 1,
  23886. 1, 1, 1, 1, 1, 1, 1, 1,
  23887. 1, 1, 1, 1, 1, 1, 1, 1,
  23888. 1, 1, 1, 1, 1, 1, 1, 1,
  23889. 1, 1, 1, 1, 1, 1, 1, 1,
  23890. 1, 1, 1, 1, 1, 1, 1, 1,
  23891. 1, 1, 1, 1, 1, 1, 1, 1,
  23892. 1, 1, 1, 1, 1, 1, 1, 1,
  23893. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23894. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23895. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23896. 3978, 3978, 3978, 3978, 3978, 3978, 3979, 3980,
  23897. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23898. 3980, 3980, 3980, 3981, 3980, 3980, 3982, 3983,
  23899. 3983, 3983, 3984, 1, 3975, 3975, 3975, 3975,
  23900. 3975, 3975, 3975, 3975, 3975, 1, 3975, 3975,
  23901. 3985, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23902. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23903. 3975, 3975, 3975, 3975, 3975, 3963, 3975, 3975,
  23904. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23905. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23906. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23907. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23908. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23909. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23910. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3977,
  23911. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23912. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23913. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23914. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23915. 3975, 3975, 3975, 1, 1, 1, 1, 1,
  23916. 1, 1, 1, 1, 1, 1, 1, 1,
  23917. 1, 1, 1, 1, 1, 1, 1, 1,
  23918. 1, 1, 1, 1, 1, 1, 1, 1,
  23919. 1, 1, 1, 1, 1, 1, 1, 1,
  23920. 1, 1, 1, 1, 1, 1, 1, 1,
  23921. 1, 1, 1, 1, 1, 1, 1, 1,
  23922. 1, 1, 1, 1, 1, 1, 1, 1,
  23923. 1, 1, 1, 1, 1, 3978, 3978, 3978,
  23924. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23925. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23926. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23927. 3978, 3978, 3978, 3979, 3980, 3980, 3980, 3980,
  23928. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23929. 3981, 3980, 3980, 3982, 3983, 3983, 3983, 3984,
  23930. 1, 3986, 1, 3975, 1, 1, 1, 1,
  23931. 1, 1, 1, 1, 1, 1, 1, 1,
  23932. 1, 1, 1, 1, 1, 1, 1, 1,
  23933. 1, 1, 3975, 1, 3975, 3975, 3975, 3975,
  23934. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23935. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23936. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23937. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23938. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23939. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23940. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23941. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23942. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23943. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23944. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23945. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23946. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23947. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23948. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23949. 3975, 3975, 3975, 3975, 1, 1, 1, 1,
  23950. 1, 1, 1, 1, 1, 1, 1, 1,
  23951. 1, 1, 1, 1, 1, 1, 1, 1,
  23952. 1, 1, 1, 1, 1, 1, 1, 1,
  23953. 1, 1, 1, 1, 1, 1, 1, 1,
  23954. 1, 1, 1, 1, 1, 1, 1, 1,
  23955. 1, 1, 1, 1, 1, 1, 1, 1,
  23956. 1, 1, 1, 1, 1, 1, 1, 1,
  23957. 1, 1, 1, 1, 1, 1, 3978, 3978,
  23958. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23959. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23960. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23961. 3978, 3978, 3978, 3978, 3979, 3980, 3980, 3980,
  23962. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23963. 3980, 3981, 3980, 3980, 3982, 3983, 3983, 3983,
  23964. 3984, 1, 3975, 3975, 3975, 3975, 3975, 3975,
  23965. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23966. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23967. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23968. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23969. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23970. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23971. 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
  23972. 3975, 3975, 1, 3978, 3978, 3978, 3978, 3978,
  23973. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23974. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23975. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23976. 3978, 3978, 3978, 1, 3978, 3978, 3978, 3978,
  23977. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23978. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23979. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23980. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23981. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23982. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23983. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23984. 3978, 3978, 3978, 3978, 1, 3978, 3978, 3978,
  23985. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23986. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23987. 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
  23988. 3978, 3978, 3978, 3978, 3978, 1, 3980, 3980,
  23989. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23990. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23991. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23992. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23993. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23994. 3980, 3980, 3980, 3980, 3980, 3980, 1, 3980,
  23995. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23996. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23997. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23998. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  23999. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  24000. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  24001. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  24002. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 1,
  24003. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  24004. 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
  24005. 1, 3987, 1, 3964, 1, 1, 1, 1,
  24006. 1, 1, 1, 1, 1, 1, 1, 1,
  24007. 1, 1, 1, 1, 1, 1, 1, 1,
  24008. 1, 1, 3964, 1, 3963, 3963, 3963, 3963,
  24009. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24010. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24011. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24012. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24013. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24014. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24015. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  24016. 3963, 3963, 3963, 3963, 1, 3966, 3966, 3966,
  24017. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24018. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24019. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24020. 3966, 3966, 3966, 3966, 3966, 1, 3966, 3966,
  24021. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24022. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24023. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24024. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24025. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24026. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24027. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24028. 3966, 3966, 3966, 3966, 3966, 3966, 1, 3966,
  24029. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24030. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24031. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  24032. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 1,
  24033. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24034. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24035. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24036. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24037. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24038. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24039. 1, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24040. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24041. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24042. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24043. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24044. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24045. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24046. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24047. 3968, 1, 3968, 3968, 3968, 3968, 3968, 3968,
  24048. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  24049. 3968, 3968, 1, 73, 1, 1, 1, 74,
  24050. 1, 1, 1, 1, 1, 1, 1, 1,
  24051. 1, 1, 1, 1, 1, 1, 1, 1,
  24052. 1, 1, 73, 3867, 3988, 3867, 3867, 3867,
  24053. 3867, 3867, 75, 1, 3867, 3867, 1, 3867,
  24054. 3989, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24055. 3867, 3867, 3867, 3867, 25, 1, 26, 3867,
  24056. 1, 3867, 24, 3867, 3867, 3867, 3867, 3867,
  24057. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24058. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24059. 3867, 3867, 3867, 3867, 3867, 1, 1, 1,
  24060. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24061. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24062. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24063. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  24064. 3867, 1, 1, 1, 1, 1, 1, 1,
  24065. 1, 1, 1, 1, 1, 1, 1, 1,
  24066. 1, 1, 1, 1, 1, 1, 1, 1,
  24067. 1, 1, 1, 1, 1, 1, 1, 1,
  24068. 1, 1, 1, 1, 1, 1, 1, 1,
  24069. 1, 1, 1, 1, 1, 1, 1, 1,
  24070. 1, 1, 1, 1, 1, 1, 1, 1,
  24071. 1, 1, 1, 1, 1, 1, 1, 1,
  24072. 1, 1, 1, 1, 3868, 3868, 3868, 3868,
  24073. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  24074. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  24075. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  24076. 3868, 3868, 3990, 3869, 3869, 3869, 3869, 3869,
  24077. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3991,
  24078. 3869, 3869, 3992, 3993, 3993, 3993, 3994, 1,
  24079. 3995, 1, 1, 1, 3996, 1, 1, 1,
  24080. 1, 1, 1, 1, 1, 1, 1, 1,
  24081. 1, 1, 1, 1, 1, 1, 1, 3995,
  24082. 3997, 3998, 3997, 3997, 3997, 3997, 3997, 3999,
  24083. 1, 3997, 3997, 1, 3997, 4000, 3997, 3997,
  24084. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24085. 3997, 1, 1, 1, 3997, 1, 3997, 1,
  24086. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24087. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24088. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24089. 3997, 3997, 4001, 1, 1, 3997, 3997, 3997,
  24090. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24091. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24092. 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
  24093. 3997, 3997, 3997, 3997, 3997, 3997, 1, 1,
  24094. 1, 1, 1, 1, 1, 1, 1, 1,
  24095. 1, 1, 1, 1, 1, 1, 1, 1,
  24096. 1, 1, 1, 1, 1, 1, 1, 1,
  24097. 1, 1, 1, 1, 1, 1, 1, 1,
  24098. 1, 1, 1, 1, 1, 1, 1, 1,
  24099. 1, 1, 1, 1, 1, 1, 1, 1,
  24100. 1, 1, 1, 1, 1, 1, 1, 1,
  24101. 1, 1, 1, 1, 1, 1, 1, 1,
  24102. 1, 4002, 4002, 4002, 4002, 4002, 4002, 4002,
  24103. 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002,
  24104. 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002,
  24105. 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4003,
  24106. 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
  24107. 4004, 4004, 4004, 4004, 4005, 4004, 4004, 4006,
  24108. 4007, 4007, 4007, 4008, 1, 4009, 1, 1,
  24109. 1, 4010, 1, 1, 1, 1, 1, 1,
  24110. 1, 1, 1, 1, 1, 1, 1, 1,
  24111. 1, 1, 1, 1, 4009, 4011, 4012, 4011,
  24112. 4011, 4011, 4011, 4011, 4013, 1, 4011, 4011,
  24113. 1, 4011, 4014, 4011, 4011, 4011, 4011, 4011,
  24114. 4011, 4011, 4011, 4011, 4011, 4011, 1, 1,
  24115. 1, 4011, 1, 4011, 1, 4011, 4011, 4011,
  24116. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24117. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24118. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4015,
  24119. 1, 1, 4011, 4011, 4011, 4011, 4011, 4011,
  24120. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24121. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24122. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24123. 4011, 4011, 4011, 1, 1, 1, 1, 1,
  24124. 1, 1, 1, 1, 1, 1, 1, 1,
  24125. 1, 1, 1, 1, 1, 1, 1, 1,
  24126. 1, 1, 1, 1, 1, 1, 1, 1,
  24127. 1, 1, 1, 1, 1, 1, 1, 1,
  24128. 1, 1, 1, 1, 1, 1, 1, 1,
  24129. 1, 1, 1, 1, 1, 1, 1, 1,
  24130. 1, 1, 1, 1, 1, 1, 1, 1,
  24131. 1, 1, 1, 1, 1, 1, 4016, 4016,
  24132. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24133. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24134. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24135. 4016, 4016, 4016, 4016, 4017, 4018, 4018, 4018,
  24136. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24137. 4018, 4019, 4018, 4018, 4020, 4021, 4021, 4021,
  24138. 4022, 1, 4023, 1, 4009, 1, 1, 1,
  24139. 1, 1, 1, 1, 1, 1, 1, 1,
  24140. 1, 1, 1, 1, 1, 1, 1, 1,
  24141. 1, 1, 1, 4009, 1, 4024, 1, 1,
  24142. 1, 4025, 1, 1, 1, 1, 1, 1,
  24143. 1, 1, 1, 1, 1, 1, 1, 1,
  24144. 1, 1, 1, 1, 4024, 4011, 4012, 4011,
  24145. 4011, 4011, 4011, 4011, 4026, 1, 4011, 4011,
  24146. 1, 4011, 4027, 4011, 4011, 4011, 4011, 4011,
  24147. 4011, 4011, 4011, 4011, 4011, 4011, 1, 1,
  24148. 1, 4011, 4028, 4011, 1, 4011, 4011, 4011,
  24149. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24150. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24151. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 1,
  24152. 1, 1, 4011, 4011, 4011, 4011, 4011, 4011,
  24153. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24154. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24155. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24156. 4011, 4011, 4011, 1, 1, 1, 1, 1,
  24157. 1, 1, 1, 1, 1, 1, 1, 1,
  24158. 1, 1, 1, 1, 1, 1, 1, 1,
  24159. 1, 1, 1, 1, 1, 1, 1, 1,
  24160. 1, 1, 1, 1, 1, 1, 1, 1,
  24161. 1, 1, 1, 1, 1, 1, 1, 1,
  24162. 1, 1, 1, 1, 1, 1, 1, 1,
  24163. 1, 1, 1, 1, 1, 1, 1, 1,
  24164. 1, 1, 1, 1, 1, 1, 4016, 4016,
  24165. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24166. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24167. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24168. 4016, 4016, 4016, 4016, 4017, 4018, 4018, 4018,
  24169. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24170. 4018, 4019, 4018, 4018, 4020, 4021, 4021, 4021,
  24171. 4022, 1, 4024, 1, 1, 1, 4025, 1,
  24172. 1, 1, 1, 1, 1, 1, 1, 1,
  24173. 1, 1, 1, 1, 1, 1, 1, 1,
  24174. 1, 4024, 1, 1, 1, 1, 1, 1,
  24175. 1, 4026, 1, 1, 1, 1, 1, 4029,
  24176. 1, 1, 1, 1, 1, 1, 1, 1,
  24177. 1, 1, 1, 1, 1, 1, 1, 4028,
  24178. 1, 4030, 1, 4024, 1, 1, 1, 1,
  24179. 1, 1, 1, 1, 1, 1, 1, 1,
  24180. 1, 1, 1, 1, 1, 1, 1, 1,
  24181. 1, 1, 4024, 1, 4031, 1, 1, 1,
  24182. 4032, 1, 1, 1, 1, 1, 1, 1,
  24183. 1, 1, 1, 1, 1, 1, 1, 1,
  24184. 1, 1, 1, 4031, 1, 1, 1, 1,
  24185. 1, 1, 1, 4033, 1, 1, 1, 1,
  24186. 1, 4034, 1, 1, 1, 1, 1, 1,
  24187. 1, 1, 1, 1, 1, 1, 1, 1,
  24188. 1, 4035, 1, 4029, 1, 1, 1, 4036,
  24189. 1, 1, 1, 1, 1, 1, 1, 1,
  24190. 1, 1, 1, 1, 1, 1, 1, 1,
  24191. 1, 1, 4029, 4037, 1, 4037, 4037, 4037,
  24192. 4037, 4037, 4038, 1, 4037, 4037, 1, 4037,
  24193. 1, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24194. 4037, 4037, 4037, 4037, 1, 1, 1, 4037,
  24195. 1, 4037, 1, 4037, 4037, 4037, 4037, 4037,
  24196. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24197. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24198. 4037, 4037, 4037, 4037, 4037, 1, 1, 1,
  24199. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24200. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24201. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24202. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24203. 4037, 1, 1, 1, 1, 1, 1, 1,
  24204. 1, 1, 1, 1, 1, 1, 1, 1,
  24205. 1, 1, 1, 1, 1, 1, 1, 1,
  24206. 1, 1, 1, 1, 1, 1, 1, 1,
  24207. 1, 1, 1, 1, 1, 1, 1, 1,
  24208. 1, 1, 1, 1, 1, 1, 1, 1,
  24209. 1, 1, 1, 1, 1, 1, 1, 1,
  24210. 1, 1, 1, 1, 1, 1, 1, 1,
  24211. 1, 1, 1, 1, 4039, 4039, 4039, 4039,
  24212. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24213. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24214. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24215. 4039, 4039, 4040, 4041, 4041, 4041, 4041, 4041,
  24216. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4042,
  24217. 4041, 4041, 4043, 4044, 4044, 4044, 4045, 1,
  24218. 4046, 1, 4029, 1, 1, 1, 1, 1,
  24219. 1, 1, 1, 1, 1, 1, 1, 1,
  24220. 1, 1, 1, 1, 1, 1, 1, 1,
  24221. 1, 4029, 1, 4024, 1, 1, 1, 4025,
  24222. 1, 1, 1, 1, 1, 1, 1, 1,
  24223. 1, 1, 1, 1, 1, 1, 1, 1,
  24224. 1, 1, 4024, 4037, 1, 4037, 4037, 4037,
  24225. 4037, 4037, 4026, 1, 4037, 4037, 1, 4037,
  24226. 4029, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24227. 4037, 4037, 4037, 4037, 1, 1, 1, 4037,
  24228. 4028, 4037, 1, 4037, 4037, 4037, 4037, 4037,
  24229. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24230. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24231. 4037, 4037, 4037, 4037, 4037, 1, 1, 1,
  24232. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24233. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24234. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24235. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24236. 4037, 1, 1, 1, 1, 1, 1, 1,
  24237. 1, 1, 1, 1, 1, 1, 1, 1,
  24238. 1, 1, 1, 1, 1, 1, 1, 1,
  24239. 1, 1, 1, 1, 1, 1, 1, 1,
  24240. 1, 1, 1, 1, 1, 1, 1, 1,
  24241. 1, 1, 1, 1, 1, 1, 1, 1,
  24242. 1, 1, 1, 1, 1, 1, 1, 1,
  24243. 1, 1, 1, 1, 1, 1, 1, 1,
  24244. 1, 1, 1, 1, 4039, 4039, 4039, 4039,
  24245. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24246. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24247. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24248. 4039, 4039, 4040, 4041, 4041, 4041, 4041, 4041,
  24249. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4042,
  24250. 4041, 4041, 4043, 4044, 4044, 4044, 4045, 1,
  24251. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24252. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24253. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24254. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24255. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24256. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24257. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24258. 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037,
  24259. 1, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24260. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24261. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24262. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24263. 4039, 1, 4039, 4039, 4039, 4039, 4039, 4039,
  24264. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24265. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24266. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24267. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24268. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24269. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24270. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24271. 4039, 4039, 1, 4039, 4039, 4039, 4039, 4039,
  24272. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24273. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24274. 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
  24275. 4039, 4039, 4039, 1, 4041, 4041, 4041, 4041,
  24276. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24277. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24278. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24279. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24280. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24281. 4041, 4041, 4041, 4041, 1, 4041, 4041, 4041,
  24282. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24283. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24284. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24285. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24286. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24287. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24288. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24289. 4041, 4041, 4041, 4041, 4041, 1, 4041, 4041,
  24290. 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
  24291. 4041, 4041, 4041, 4041, 4041, 4041, 1, 4034,
  24292. 1, 1, 1, 4047, 1, 1, 1, 1,
  24293. 1, 1, 1, 1, 1, 1, 1, 1,
  24294. 1, 1, 1, 1, 1, 1, 4034, 4048,
  24295. 1, 4048, 4048, 4048, 4048, 4048, 4049, 1,
  24296. 4048, 4048, 1, 4048, 1, 4048, 4048, 4048,
  24297. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24298. 1, 1, 1, 4048, 1, 4048, 1, 4048,
  24299. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24300. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24301. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24302. 4048, 1, 1, 1, 4048, 4048, 4048, 4048,
  24303. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24304. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24305. 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048,
  24306. 4048, 4048, 4048, 4048, 4048, 1, 1, 1,
  24307. 1, 1, 1, 1, 1, 1, 1, 1,
  24308. 1, 1, 1, 1, 1, 1, 1, 1,
  24309. 1, 1, 1, 1, 1, 1, 1, 1,
  24310. 1, 1, 1, 1, 1, 1, 1, 1,
  24311. 1, 1, 1, 1, 1, 1, 1, 1,
  24312. 1, 1, 1, 1, 1, 1, 1, 1,
  24313. 1, 1, 1, 1, 1, 1, 1, 1,
  24314. 1, 1, 1, 1, 1, 1, 1, 1,
  24315. 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
  24316. 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
  24317. 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
  24318. 4050, 4050, 4050, 4050, 4050, 4050, 4051, 4052,
  24319. 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052,
  24320. 4052, 4052, 4052, 4053, 4052, 4052, 4054, 4055,
  24321. 4055, 4055, 4056, 1, 4057, 4057, 4057, 4057,
  24322. 4057, 4057, 4057, 4057, 4012, 1, 4057, 4057,
  24323. 4058, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24324. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24325. 4057, 4057, 4057, 4012, 4057, 1, 4057, 4057,
  24326. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24327. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24328. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24329. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24330. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24331. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24332. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4059,
  24333. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24334. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24335. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24336. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24337. 4057, 4057, 4057, 1, 1, 1, 1, 1,
  24338. 1, 1, 1, 1, 1, 1, 1, 1,
  24339. 1, 1, 1, 1, 1, 1, 1, 1,
  24340. 1, 1, 1, 1, 1, 1, 1, 1,
  24341. 1, 1, 1, 1, 1, 1, 1, 1,
  24342. 1, 1, 1, 1, 1, 1, 1, 1,
  24343. 1, 1, 1, 1, 1, 1, 1, 1,
  24344. 1, 1, 1, 1, 1, 1, 1, 1,
  24345. 1, 1, 1, 1, 1, 4060, 4060, 4060,
  24346. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24347. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24348. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24349. 4060, 4060, 4060, 4061, 4062, 4062, 4062, 4062,
  24350. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24351. 4063, 4062, 4062, 4064, 4065, 4065, 4065, 4066,
  24352. 1, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24353. 4057, 4057, 1, 4057, 4057, 4067, 4057, 4057,
  24354. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24355. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24356. 4057, 4057, 4068, 4057, 4057, 4057, 4057, 4057,
  24357. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24358. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24359. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24360. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24361. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24362. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24363. 4057, 4057, 4057, 4057, 4059, 4057, 4057, 4057,
  24364. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24365. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24366. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24367. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24368. 1, 1, 1, 1, 1, 1, 1, 1,
  24369. 1, 1, 1, 1, 1, 1, 1, 1,
  24370. 1, 1, 1, 1, 1, 1, 1, 1,
  24371. 1, 1, 1, 1, 1, 1, 1, 1,
  24372. 1, 1, 1, 1, 1, 1, 1, 1,
  24373. 1, 1, 1, 1, 1, 1, 1, 1,
  24374. 1, 1, 1, 1, 1, 1, 1, 1,
  24375. 1, 1, 1, 1, 1, 1, 1, 1,
  24376. 1, 1, 4060, 4060, 4060, 4060, 4060, 4060,
  24377. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24378. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24379. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24380. 4061, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24381. 4062, 4062, 4062, 4062, 4062, 4063, 4062, 4062,
  24382. 4064, 4065, 4065, 4065, 4066, 1, 4069, 1,
  24383. 4057, 1, 1, 1, 1, 1, 1, 1,
  24384. 1, 1, 1, 1, 1, 1, 1, 1,
  24385. 1, 1, 1, 1, 1, 1, 1, 4057,
  24386. 1, 4070, 1, 1, 1, 4071, 1, 1,
  24387. 1, 1, 1, 1, 1, 1, 1, 1,
  24388. 1, 1, 1, 1, 1, 1, 1, 1,
  24389. 4070, 4068, 4012, 4068, 4068, 4068, 4068, 4068,
  24390. 4072, 1, 4068, 4068, 1, 4068, 4014, 4068,
  24391. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24392. 4068, 4068, 1, 1, 1, 4068, 4028, 4068,
  24393. 1, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24394. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24395. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24396. 4068, 4068, 4068, 1, 1, 1, 4068, 4068,
  24397. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24398. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24399. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24400. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 1,
  24401. 1, 1, 1, 1, 1, 1, 1, 1,
  24402. 1, 1, 1, 1, 1, 1, 1, 1,
  24403. 1, 1, 1, 1, 1, 1, 1, 1,
  24404. 1, 1, 1, 1, 1, 1, 1, 1,
  24405. 1, 1, 1, 1, 1, 1, 1, 1,
  24406. 1, 1, 1, 1, 1, 1, 1, 1,
  24407. 1, 1, 1, 1, 1, 1, 1, 1,
  24408. 1, 1, 1, 1, 1, 1, 1, 1,
  24409. 1, 1, 4073, 4073, 4073, 4073, 4073, 4073,
  24410. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24411. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24412. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24413. 4074, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24414. 4075, 4075, 4075, 4075, 4075, 4076, 4075, 4075,
  24415. 4077, 4078, 4078, 4078, 4079, 1, 4070, 1,
  24416. 1, 1, 4071, 1, 1, 1, 1, 1,
  24417. 1, 1, 1, 1, 1, 1, 1, 1,
  24418. 1, 1, 1, 1, 1, 4070, 1, 1,
  24419. 1, 1, 1, 1, 1, 4072, 1, 1,
  24420. 1, 1, 1, 1, 1, 1, 1, 1,
  24421. 1, 1, 1, 1, 1, 1, 1, 1,
  24422. 1, 1, 1, 4028, 1, 4080, 1, 4070,
  24423. 1, 1, 1, 1, 1, 1, 1, 1,
  24424. 1, 1, 1, 1, 1, 1, 1, 1,
  24425. 1, 1, 1, 1, 1, 1, 4070, 1,
  24426. 4081, 1, 1, 1, 4082, 1, 1, 1,
  24427. 1, 1, 1, 1, 1, 1, 1, 1,
  24428. 1, 1, 1, 1, 1, 1, 1, 4081,
  24429. 1, 1, 1, 1, 1, 1, 1, 4083,
  24430. 1, 1, 1, 1, 1, 1, 1, 1,
  24431. 1, 1, 1, 1, 1, 1, 1, 1,
  24432. 1, 1, 1, 1, 1, 4035, 1, 4068,
  24433. 4012, 4068, 4068, 4068, 4068, 4068, 1, 1,
  24434. 4068, 4068, 1, 4068, 4014, 4068, 4068, 4068,
  24435. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24436. 1, 1, 1, 4068, 1, 4068, 1, 4068,
  24437. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24438. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24439. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24440. 4068, 1, 1, 1, 4068, 4068, 4068, 4068,
  24441. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24442. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24443. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24444. 4068, 4068, 4068, 4068, 4068, 1, 1, 1,
  24445. 1, 1, 1, 1, 1, 1, 1, 1,
  24446. 1, 1, 1, 1, 1, 1, 1, 1,
  24447. 1, 1, 1, 1, 1, 1, 1, 1,
  24448. 1, 1, 1, 1, 1, 1, 1, 1,
  24449. 1, 1, 1, 1, 1, 1, 1, 1,
  24450. 1, 1, 1, 1, 1, 1, 1, 1,
  24451. 1, 1, 1, 1, 1, 1, 1, 1,
  24452. 1, 1, 1, 1, 1, 1, 1, 1,
  24453. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24454. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24455. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24456. 4073, 4073, 4073, 4073, 4073, 4073, 4074, 4075,
  24457. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24458. 4075, 4075, 4075, 4076, 4075, 4075, 4077, 4078,
  24459. 4078, 4078, 4079, 1, 4068, 4068, 4068, 4068,
  24460. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24461. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24462. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24463. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24464. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24465. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24466. 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
  24467. 4068, 4068, 4068, 4068, 1, 4073, 4073, 4073,
  24468. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24469. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24470. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24471. 4073, 4073, 4073, 4073, 4073, 1, 4073, 4073,
  24472. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24473. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24474. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24475. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24476. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24477. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24478. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24479. 4073, 4073, 4073, 4073, 4073, 4073, 1, 4073,
  24480. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24481. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24482. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073,
  24483. 4073, 4073, 4073, 4073, 4073, 4073, 4073, 1,
  24484. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24485. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24486. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24487. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24488. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24489. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24490. 1, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24491. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24492. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24493. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24494. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24495. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24496. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24497. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24498. 4075, 1, 4075, 4075, 4075, 4075, 4075, 4075,
  24499. 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075,
  24500. 4075, 4075, 1, 4057, 4057, 4057, 4057, 4057,
  24501. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24502. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24503. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24504. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24505. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24506. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24507. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24508. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24509. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24510. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24511. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24512. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24513. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24514. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24515. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24516. 4057, 4057, 4057, 1, 1, 1, 1, 1,
  24517. 1, 1, 1, 1, 1, 1, 1, 1,
  24518. 1, 1, 1, 1, 1, 1, 1, 1,
  24519. 1, 1, 1, 1, 1, 1, 1, 1,
  24520. 1, 1, 1, 1, 1, 1, 1, 1,
  24521. 1, 1, 1, 1, 1, 1, 1, 1,
  24522. 1, 1, 1, 1, 1, 1, 1, 1,
  24523. 1, 1, 1, 1, 1, 1, 1, 1,
  24524. 1, 1, 1, 1, 1, 4060, 4060, 4060,
  24525. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24526. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24527. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24528. 4060, 4060, 4060, 4061, 4062, 4062, 4062, 4062,
  24529. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24530. 4063, 4062, 4062, 4064, 4065, 4065, 4065, 4066,
  24531. 1, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24532. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24533. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24534. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24535. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24536. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24537. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24538. 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057,
  24539. 4057, 1, 4060, 4060, 4060, 4060, 4060, 4060,
  24540. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24541. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24542. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24543. 4060, 4060, 1, 4060, 4060, 4060, 4060, 4060,
  24544. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24545. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24546. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24547. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24548. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24549. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24550. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24551. 4060, 4060, 4060, 1, 4060, 4060, 4060, 4060,
  24552. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24553. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24554. 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060,
  24555. 4060, 4060, 4060, 4060, 1, 4062, 4062, 4062,
  24556. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24557. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24558. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24559. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24560. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24561. 4062, 4062, 4062, 4062, 4062, 1, 4062, 4062,
  24562. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24563. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24564. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24565. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24566. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24567. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24568. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24569. 4062, 4062, 4062, 4062, 4062, 4062, 1, 4062,
  24570. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062,
  24571. 4062, 4062, 4062, 4062, 4062, 4062, 4062, 1,
  24572. 4084, 1, 4012, 1, 1, 1, 1, 1,
  24573. 1, 1, 1, 1, 1, 1, 1, 1,
  24574. 1, 1, 1, 1, 1, 1, 1, 1,
  24575. 1, 4012, 1, 4029, 1, 1, 1, 4036,
  24576. 1, 1, 1, 1, 1, 1, 1, 1,
  24577. 1, 1, 1, 1, 1, 1, 1, 1,
  24578. 1, 1, 4029, 4011, 4012, 4011, 4011, 4011,
  24579. 4011, 4011, 4038, 1, 4011, 4011, 1, 4011,
  24580. 4014, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24581. 4011, 4011, 4011, 4011, 1, 1, 1, 4011,
  24582. 1, 4011, 1, 4011, 4011, 4011, 4011, 4011,
  24583. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24584. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24585. 4011, 4011, 4011, 4011, 4011, 1, 1, 1,
  24586. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24587. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24588. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24589. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24590. 4011, 1, 1, 1, 1, 1, 1, 1,
  24591. 1, 1, 1, 1, 1, 1, 1, 1,
  24592. 1, 1, 1, 1, 1, 1, 1, 1,
  24593. 1, 1, 1, 1, 1, 1, 1, 1,
  24594. 1, 1, 1, 1, 1, 1, 1, 1,
  24595. 1, 1, 1, 1, 1, 1, 1, 1,
  24596. 1, 1, 1, 1, 1, 1, 1, 1,
  24597. 1, 1, 1, 1, 1, 1, 1, 1,
  24598. 1, 1, 1, 1, 4016, 4016, 4016, 4016,
  24599. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24600. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24601. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24602. 4016, 4016, 4017, 4018, 4018, 4018, 4018, 4018,
  24603. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4019,
  24604. 4018, 4018, 4020, 4021, 4021, 4021, 4022, 1,
  24605. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24606. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24607. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24608. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24609. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24610. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24611. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24612. 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011,
  24613. 1, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24614. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24615. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24616. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24617. 4016, 1, 4016, 4016, 4016, 4016, 4016, 4016,
  24618. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24619. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24620. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24621. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24622. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24623. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24624. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24625. 4016, 4016, 1, 4016, 4016, 4016, 4016, 4016,
  24626. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24627. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24628. 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016,
  24629. 4016, 4016, 4016, 1, 4018, 4018, 4018, 4018,
  24630. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24631. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24632. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24633. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24634. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24635. 4018, 4018, 4018, 4018, 1, 4018, 4018, 4018,
  24636. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24637. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24638. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24639. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24640. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24641. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24642. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24643. 4018, 4018, 4018, 4018, 4018, 1, 4018, 4018,
  24644. 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
  24645. 4018, 4018, 4018, 4018, 4018, 4018, 1, 4085,
  24646. 1, 1, 1, 4086, 1, 1, 1, 1,
  24647. 1, 1, 1, 1, 1, 1, 1, 1,
  24648. 1, 1, 1, 1, 1, 1, 4085, 4087,
  24649. 4088, 4087, 4087, 4087, 4087, 4087, 4089, 1,
  24650. 4087, 4087, 1, 4087, 4090, 4087, 4087, 4087,
  24651. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24652. 1, 1, 1, 4087, 1, 4087, 1, 4087,
  24653. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24654. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24655. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24656. 4087, 4091, 1, 1, 4087, 4087, 4087, 4087,
  24657. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24658. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24659. 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
  24660. 4087, 4087, 4087, 4087, 4087, 1, 1, 1,
  24661. 1, 1, 1, 1, 1, 1, 1, 1,
  24662. 1, 1, 1, 1, 1, 1, 1, 1,
  24663. 1, 1, 1, 1, 1, 1, 1, 1,
  24664. 1, 1, 1, 1, 1, 1, 1, 1,
  24665. 1, 1, 1, 1, 1, 1, 1, 1,
  24666. 1, 1, 1, 1, 1, 1, 1, 1,
  24667. 1, 1, 1, 1, 1, 1, 1, 1,
  24668. 1, 1, 1, 1, 1, 1, 1, 1,
  24669. 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
  24670. 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
  24671. 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
  24672. 4092, 4092, 4092, 4092, 4092, 4092, 4093, 4094,
  24673. 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094,
  24674. 4094, 4094, 4094, 4095, 4094, 4094, 4096, 4097,
  24675. 4097, 4097, 4098, 1, 4015, 4015, 4015, 4015,
  24676. 4015, 4015, 4015, 4015, 4015, 1, 4015, 4015,
  24677. 4099, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24678. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24679. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24680. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24681. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24682. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24683. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24684. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24685. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24686. 4015, 4015, 4015, 4015, 4015, 4015, 1, 4100,
  24687. 4070, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24688. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24689. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24690. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24691. 4015, 4015, 4015, 1, 1, 1, 1, 1,
  24692. 1, 1, 1, 1, 1, 1, 1, 1,
  24693. 1, 1, 1, 1, 1, 1, 1, 1,
  24694. 1, 1, 1, 1, 1, 1, 1, 1,
  24695. 1, 1, 1, 1, 1, 1, 1, 1,
  24696. 1, 1, 1, 1, 1, 1, 1, 1,
  24697. 1, 1, 1, 1, 1, 1, 1, 1,
  24698. 1, 1, 1, 1, 1, 1, 1, 1,
  24699. 1, 1, 1, 1, 1, 4101, 4101, 4101,
  24700. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24701. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24702. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24703. 4101, 4101, 4101, 4102, 4103, 4103, 4103, 4103,
  24704. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24705. 4104, 4103, 4103, 4105, 4106, 4106, 4106, 4107,
  24706. 1, 4108, 1, 4015, 1, 1, 1, 1,
  24707. 1, 1, 1, 1, 1, 1, 1, 1,
  24708. 1, 1, 1, 1, 1, 1, 1, 1,
  24709. 1, 1, 4015, 1, 4015, 4015, 4015, 4015,
  24710. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24711. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24712. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24713. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24714. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24715. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24716. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24717. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24718. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24719. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24720. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24721. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24722. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24723. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24724. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24725. 4015, 4015, 4015, 4015, 1, 1, 1, 1,
  24726. 1, 1, 1, 1, 1, 1, 1, 1,
  24727. 1, 1, 1, 1, 1, 1, 1, 1,
  24728. 1, 1, 1, 1, 1, 1, 1, 1,
  24729. 1, 1, 1, 1, 1, 1, 1, 1,
  24730. 1, 1, 1, 1, 1, 1, 1, 1,
  24731. 1, 1, 1, 1, 1, 1, 1, 1,
  24732. 1, 1, 1, 1, 1, 1, 1, 1,
  24733. 1, 1, 1, 1, 1, 1, 4101, 4101,
  24734. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24735. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24736. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24737. 4101, 4101, 4101, 4101, 4102, 4103, 4103, 4103,
  24738. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24739. 4103, 4104, 4103, 4103, 4105, 4106, 4106, 4106,
  24740. 4107, 1, 4015, 4015, 4015, 4015, 4015, 4015,
  24741. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24742. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24743. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24744. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24745. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24746. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24747. 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
  24748. 4015, 4015, 1, 4101, 4101, 4101, 4101, 4101,
  24749. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24750. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24751. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24752. 4101, 4101, 4101, 1, 4101, 4101, 4101, 4101,
  24753. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24754. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24755. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24756. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24757. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24758. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24759. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24760. 4101, 4101, 4101, 4101, 1, 4101, 4101, 4101,
  24761. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24762. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24763. 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
  24764. 4101, 4101, 4101, 4101, 4101, 1, 4103, 4103,
  24765. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24766. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24767. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24768. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24769. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24770. 4103, 4103, 4103, 4103, 4103, 4103, 1, 4103,
  24771. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24772. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24773. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24774. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24775. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24776. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24777. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24778. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 1,
  24779. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24780. 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103,
  24781. 1, 134, 134, 134, 134, 134, 134, 134,
  24782. 134, 134, 134, 134, 134, 134, 134, 134,
  24783. 134, 134, 134, 134, 134, 134, 134, 134,
  24784. 134, 134, 134, 134, 134, 134, 134, 134,
  24785. 134, 134, 134, 134, 134, 134, 134, 134,
  24786. 134, 134, 134, 134, 134, 134, 134, 134,
  24787. 134, 134, 134, 134, 134, 134, 134, 134,
  24788. 134, 134, 134, 134, 134, 134, 134, 134,
  24789. 134, 1, 137, 137, 137, 137, 137, 137,
  24790. 137, 137, 137, 137, 137, 137, 137, 137,
  24791. 137, 137, 137, 137, 137, 137, 137, 137,
  24792. 137, 137, 137, 137, 137, 137, 137, 137,
  24793. 137, 137, 1, 137, 137, 137, 137, 137,
  24794. 137, 137, 137, 137, 137, 137, 137, 137,
  24795. 137, 137, 137, 137, 137, 137, 137, 137,
  24796. 137, 137, 137, 137, 137, 137, 137, 137,
  24797. 137, 137, 137, 137, 137, 137, 137, 137,
  24798. 137, 137, 137, 137, 137, 137, 137, 137,
  24799. 137, 137, 137, 137, 137, 137, 137, 137,
  24800. 137, 137, 137, 137, 137, 137, 137, 137,
  24801. 137, 137, 137, 1, 137, 137, 137, 137,
  24802. 137, 137, 137, 137, 137, 137, 137, 137,
  24803. 137, 137, 137, 137, 137, 137, 137, 137,
  24804. 137, 137, 137, 137, 137, 137, 137, 137,
  24805. 137, 137, 137, 137, 1, 139, 139, 139,
  24806. 139, 139, 139, 139, 139, 139, 139, 139,
  24807. 139, 139, 139, 139, 139, 139, 139, 139,
  24808. 139, 139, 139, 139, 139, 139, 139, 139,
  24809. 139, 139, 139, 139, 139, 139, 139, 139,
  24810. 139, 139, 139, 139, 139, 139, 139, 139,
  24811. 139, 139, 139, 139, 139, 1, 139, 139,
  24812. 139, 139, 139, 139, 139, 139, 139, 139,
  24813. 139, 139, 139, 139, 139, 139, 139, 139,
  24814. 139, 139, 139, 139, 139, 139, 139, 139,
  24815. 139, 139, 139, 139, 139, 139, 139, 139,
  24816. 139, 139, 139, 139, 139, 139, 139, 139,
  24817. 139, 139, 139, 139, 139, 139, 139, 139,
  24818. 139, 139, 139, 139, 139, 139, 139, 139,
  24819. 139, 139, 139, 139, 139, 139, 1, 139,
  24820. 139, 139, 139, 139, 139, 139, 139, 139,
  24821. 139, 139, 139, 139, 139, 139, 139, 1,
  24822. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24823. 4109, 1, 4109, 4109, 4110, 4109, 4109, 4109,
  24824. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24825. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24826. 4109, 4111, 4109, 4109, 4109, 4109, 4109, 4109,
  24827. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24828. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24829. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24830. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24831. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24832. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24833. 4109, 4109, 4109, 4112, 4109, 4109, 4109, 4109,
  24834. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24835. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24836. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109,
  24837. 4109, 4109, 4109, 4109, 4109, 4109, 4109, 1,
  24838. 1, 1, 1, 1, 1, 1, 1, 1,
  24839. 1, 1, 1, 1, 1, 1, 1, 1,
  24840. 1, 1, 1, 1, 1, 1, 1, 1,
  24841. 1, 1, 1, 1, 1, 1, 1, 1,
  24842. 1, 1, 1, 1, 1, 1, 1, 1,
  24843. 1, 1, 1, 1, 1, 1, 1, 1,
  24844. 1, 1, 1, 1, 1, 1, 1, 1,
  24845. 1, 1, 1, 1, 1, 1, 1, 1,
  24846. 1, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
  24847. 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
  24848. 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
  24849. 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4114,
  24850. 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115,
  24851. 4115, 4115, 4115, 4115, 4116, 4115, 4115, 4117,
  24852. 4118, 4118, 4118, 4119, 1, 4120, 4120, 4120,
  24853. 4120, 4120, 4120, 4120, 4120, 4120, 1, 4120,
  24854. 4120, 4121, 4120, 4120, 4120, 4120, 4120, 4120,
  24855. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24856. 4120, 4120, 4120, 4120, 4120, 4120, 4122, 4120,
  24857. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24858. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24859. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24860. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24861. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24862. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24863. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24864. 4123, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24865. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24866. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24867. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24868. 4120, 4120, 4120, 4120, 1, 1, 1, 1,
  24869. 1, 1, 1, 1, 1, 1, 1, 1,
  24870. 1, 1, 1, 1, 1, 1, 1, 1,
  24871. 1, 1, 1, 1, 1, 1, 1, 1,
  24872. 1, 1, 1, 1, 1, 1, 1, 1,
  24873. 1, 1, 1, 1, 1, 1, 1, 1,
  24874. 1, 1, 1, 1, 1, 1, 1, 1,
  24875. 1, 1, 1, 1, 1, 1, 1, 1,
  24876. 1, 1, 1, 1, 1, 1, 4124, 4124,
  24877. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24878. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24879. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24880. 4124, 4124, 4124, 4124, 4125, 4126, 4126, 4126,
  24881. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24882. 4126, 4127, 4126, 4126, 4128, 4129, 4129, 4129,
  24883. 4130, 1, 4131, 1, 4120, 1, 1, 1,
  24884. 1, 1, 1, 1, 1, 1, 1, 1,
  24885. 1, 1, 1, 1, 1, 1, 1, 1,
  24886. 1, 1, 1, 4120, 1, 4120, 4120, 4120,
  24887. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24888. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24889. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24890. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24891. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24892. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24893. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24894. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24895. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24896. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24897. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24898. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24899. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24900. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24901. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24902. 4120, 4120, 4120, 4120, 4120, 1, 1, 1,
  24903. 1, 1, 1, 1, 1, 1, 1, 1,
  24904. 1, 1, 1, 1, 1, 1, 1, 1,
  24905. 1, 1, 1, 1, 1, 1, 1, 1,
  24906. 1, 1, 1, 1, 1, 1, 1, 1,
  24907. 1, 1, 1, 1, 1, 1, 1, 1,
  24908. 1, 1, 1, 1, 1, 1, 1, 1,
  24909. 1, 1, 1, 1, 1, 1, 1, 1,
  24910. 1, 1, 1, 1, 1, 1, 1, 4124,
  24911. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24912. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24913. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24914. 4124, 4124, 4124, 4124, 4124, 4125, 4126, 4126,
  24915. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24916. 4126, 4126, 4127, 4126, 4126, 4128, 4129, 4129,
  24917. 4129, 4130, 1, 4120, 4120, 4120, 4120, 4120,
  24918. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24919. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24920. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24921. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24922. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24923. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24924. 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120,
  24925. 4120, 4120, 4120, 1, 4124, 4124, 4124, 4124,
  24926. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24927. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24928. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24929. 4124, 4124, 4124, 4124, 1, 4124, 4124, 4124,
  24930. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24931. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24932. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24933. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24934. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24935. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24936. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24937. 4124, 4124, 4124, 4124, 4124, 1, 4124, 4124,
  24938. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24939. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24940. 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
  24941. 4124, 4124, 4124, 4124, 4124, 4124, 1, 4126,
  24942. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24943. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24944. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24945. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24946. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24947. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 1,
  24948. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24949. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24950. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24951. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24952. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24953. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24954. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24955. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24956. 1, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24957. 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
  24958. 4126, 1, 130, 1, 1, 1, 4132, 1,
  24959. 1, 1, 1, 1, 1, 1, 1, 1,
  24960. 1, 1, 1, 1, 1, 1, 1, 1,
  24961. 1, 130, 4133, 4134, 4133, 4133, 4133, 4133,
  24962. 4133, 4135, 1, 4133, 4133, 1, 4133, 1,
  24963. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24964. 4133, 4133, 4133, 1, 1, 1, 4133, 1,
  24965. 4133, 1, 4133, 4133, 4133, 4133, 4133, 4133,
  24966. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24967. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24968. 4133, 4133, 4133, 4133, 1, 1, 1, 4133,
  24969. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24970. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24971. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24972. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  24973. 1, 1, 1, 1, 1, 1, 1, 1,
  24974. 1, 1, 1, 1, 1, 1, 1, 1,
  24975. 1, 1, 1, 1, 1, 1, 1, 1,
  24976. 1, 1, 1, 1, 1, 1, 1, 1,
  24977. 1, 1, 1, 1, 1, 1, 1, 1,
  24978. 1, 1, 1, 1, 1, 1, 1, 1,
  24979. 1, 1, 1, 1, 1, 1, 1, 1,
  24980. 1, 1, 1, 1, 1, 1, 1, 1,
  24981. 1, 1, 1, 4136, 4136, 4136, 4136, 4136,
  24982. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  24983. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  24984. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  24985. 4136, 4137, 4138, 4138, 4138, 4138, 4138, 4138,
  24986. 4138, 4138, 4138, 4138, 4138, 4138, 4139, 4138,
  24987. 4138, 4140, 4141, 4141, 4141, 4142, 1, 4143,
  24988. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 108,
  24989. 1, 4143, 4143, 4144, 4143, 4143, 4143, 4143,
  24990. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24991. 4143, 4143, 4143, 4143, 4143, 4143, 108, 4143,
  24992. 1, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24993. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24994. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24995. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24996. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24997. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24998. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  24999. 4143, 4143, 4145, 4143, 4143, 4143, 4143, 4143,
  25000. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25001. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25002. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25003. 4143, 4143, 4143, 4143, 4143, 4143, 1, 1,
  25004. 1, 1, 1, 1, 1, 1, 1, 1,
  25005. 1, 1, 1, 1, 1, 1, 1, 1,
  25006. 1, 1, 1, 1, 1, 1, 1, 1,
  25007. 1, 1, 1, 1, 1, 1, 1, 1,
  25008. 1, 1, 1, 1, 1, 1, 1, 1,
  25009. 1, 1, 1, 1, 1, 1, 1, 1,
  25010. 1, 1, 1, 1, 1, 1, 1, 1,
  25011. 1, 1, 1, 1, 1, 1, 1, 1,
  25012. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25013. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25014. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25015. 4146, 4146, 4146, 4146, 4146, 4146, 4147, 4148,
  25016. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25017. 4148, 4148, 4148, 4149, 4148, 4148, 4150, 4151,
  25018. 4151, 4151, 4152, 1, 4143, 4143, 4143, 4143,
  25019. 4143, 4143, 4143, 4143, 4143, 1, 4143, 4143,
  25020. 4153, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25021. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25022. 4143, 4143, 4143, 4143, 4143, 4154, 4143, 4143,
  25023. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25024. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25025. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25026. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25027. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25028. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25029. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4145,
  25030. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25031. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25032. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25033. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25034. 4143, 4143, 4143, 1, 1, 1, 1, 1,
  25035. 1, 1, 1, 1, 1, 1, 1, 1,
  25036. 1, 1, 1, 1, 1, 1, 1, 1,
  25037. 1, 1, 1, 1, 1, 1, 1, 1,
  25038. 1, 1, 1, 1, 1, 1, 1, 1,
  25039. 1, 1, 1, 1, 1, 1, 1, 1,
  25040. 1, 1, 1, 1, 1, 1, 1, 1,
  25041. 1, 1, 1, 1, 1, 1, 1, 1,
  25042. 1, 1, 1, 1, 1, 4146, 4146, 4146,
  25043. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25044. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25045. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25046. 4146, 4146, 4146, 4147, 4148, 4148, 4148, 4148,
  25047. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25048. 4149, 4148, 4148, 4150, 4151, 4151, 4151, 4152,
  25049. 1, 4155, 1, 4143, 1, 1, 1, 1,
  25050. 1, 1, 1, 1, 1, 1, 1, 1,
  25051. 1, 1, 1, 1, 1, 1, 1, 1,
  25052. 1, 1, 4143, 1, 4156, 1, 1, 1,
  25053. 4157, 1, 1, 1, 1, 1, 1, 1,
  25054. 1, 1, 1, 1, 1, 1, 1, 1,
  25055. 1, 1, 1, 4156, 4154, 108, 4154, 4154,
  25056. 4154, 4154, 4154, 4158, 1, 4154, 4154, 1,
  25057. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25058. 4154, 4154, 4154, 4154, 4154, 1, 1, 1,
  25059. 4154, 111, 4154, 112, 4154, 4154, 4154, 4154,
  25060. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25061. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25062. 4154, 4154, 4154, 4154, 4154, 4154, 1, 1,
  25063. 1, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25064. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25065. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25066. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25067. 4154, 4154, 1, 1, 1, 1, 1, 1,
  25068. 1, 1, 1, 1, 1, 1, 1, 1,
  25069. 1, 1, 1, 1, 1, 1, 1, 1,
  25070. 1, 1, 1, 1, 1, 1, 1, 1,
  25071. 1, 1, 1, 1, 1, 1, 1, 1,
  25072. 1, 1, 1, 1, 1, 1, 1, 1,
  25073. 1, 1, 1, 1, 1, 1, 1, 1,
  25074. 1, 1, 1, 1, 1, 1, 1, 1,
  25075. 1, 1, 1, 1, 1, 4159, 4159, 4159,
  25076. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25077. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25078. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25079. 4159, 4159, 4159, 4160, 4161, 4161, 4161, 4161,
  25080. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25081. 4162, 4161, 4161, 4163, 4164, 4164, 4164, 4165,
  25082. 1, 4166, 1, 1, 1, 4167, 1, 1,
  25083. 1, 1, 1, 1, 1, 1, 1, 1,
  25084. 1, 1, 1, 1, 1, 1, 1, 1,
  25085. 4166, 1, 1, 1, 1, 1, 1, 1,
  25086. 4168, 1, 1, 1, 1, 1, 1, 1,
  25087. 1, 1, 1, 1, 1, 1, 1, 1,
  25088. 1, 1, 1, 1, 1, 1, 124, 1,
  25089. 125, 1, 4169, 1, 4166, 1, 1, 1,
  25090. 1, 1, 1, 1, 1, 1, 1, 1,
  25091. 1, 1, 1, 1, 1, 1, 1, 1,
  25092. 1, 1, 1, 4166, 1, 4170, 1, 1,
  25093. 1, 4171, 1, 1, 1, 1, 1, 1,
  25094. 1, 1, 1, 1, 1, 1, 1, 1,
  25095. 1, 1, 1, 1, 4170, 1, 1, 1,
  25096. 1, 1, 1, 1, 4172, 1, 1, 1,
  25097. 1, 1, 1, 1, 1, 1, 1, 1,
  25098. 1, 1, 1, 1, 1, 1, 1, 1,
  25099. 1, 1, 131, 1, 132, 1, 4154, 4154,
  25100. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25101. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25102. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25103. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25104. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25105. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25106. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25107. 4154, 4154, 4154, 4154, 4154, 4154, 1, 4159,
  25108. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25109. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25110. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25111. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 1,
  25112. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25113. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25114. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25115. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25116. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25117. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25118. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25119. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25120. 1, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25121. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25122. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25123. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25124. 4159, 1, 4161, 4161, 4161, 4161, 4161, 4161,
  25125. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25126. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25127. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25128. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25129. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25130. 4161, 4161, 1, 4161, 4161, 4161, 4161, 4161,
  25131. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25132. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25133. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25134. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25135. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25136. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25137. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25138. 4161, 4161, 4161, 1, 4161, 4161, 4161, 4161,
  25139. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25140. 4161, 4161, 4161, 4161, 1, 4143, 4143, 4143,
  25141. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25142. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25143. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25144. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25145. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25146. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25147. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25148. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25149. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25150. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25151. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25152. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25153. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25154. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25155. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25156. 4143, 4143, 4143, 4143, 4143, 1, 1, 1,
  25157. 1, 1, 1, 1, 1, 1, 1, 1,
  25158. 1, 1, 1, 1, 1, 1, 1, 1,
  25159. 1, 1, 1, 1, 1, 1, 1, 1,
  25160. 1, 1, 1, 1, 1, 1, 1, 1,
  25161. 1, 1, 1, 1, 1, 1, 1, 1,
  25162. 1, 1, 1, 1, 1, 1, 1, 1,
  25163. 1, 1, 1, 1, 1, 1, 1, 1,
  25164. 1, 1, 1, 1, 1, 1, 1, 4146,
  25165. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25166. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25167. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25168. 4146, 4146, 4146, 4146, 4146, 4147, 4148, 4148,
  25169. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25170. 4148, 4148, 4149, 4148, 4148, 4150, 4151, 4151,
  25171. 4151, 4152, 1, 4143, 4143, 4143, 4143, 4143,
  25172. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25173. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25174. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25175. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25176. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25177. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25178. 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
  25179. 4143, 4143, 4143, 1, 4146, 4146, 4146, 4146,
  25180. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25181. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25182. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25183. 4146, 4146, 4146, 4146, 1, 4146, 4146, 4146,
  25184. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25185. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25186. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25187. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25188. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25189. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25190. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25191. 4146, 4146, 4146, 4146, 4146, 1, 4146, 4146,
  25192. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25193. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25194. 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146,
  25195. 4146, 4146, 4146, 4146, 4146, 4146, 1, 4148,
  25196. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25197. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25198. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25199. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25200. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25201. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 1,
  25202. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25203. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25204. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25205. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25206. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25207. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25208. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25209. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25210. 1, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25211. 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
  25212. 4148, 1, 4173, 1, 108, 1, 1, 1,
  25213. 1, 1, 1, 1, 1, 1, 1, 1,
  25214. 1, 1, 1, 1, 1, 1, 1, 1,
  25215. 1, 1, 1, 108, 1, 4174, 1, 1,
  25216. 1, 4175, 1, 1, 1, 1, 1, 1,
  25217. 1, 1, 1, 1, 1, 1, 1, 1,
  25218. 1, 1, 1, 1, 4174, 107, 4176, 107,
  25219. 107, 107, 107, 107, 4177, 1, 107, 107,
  25220. 1, 107, 4154, 107, 107, 107, 107, 107,
  25221. 107, 107, 107, 107, 107, 107, 1, 1,
  25222. 1, 107, 111, 107, 112, 107, 107, 107,
  25223. 107, 107, 107, 107, 107, 107, 107, 107,
  25224. 107, 107, 107, 107, 107, 107, 107, 107,
  25225. 107, 107, 107, 107, 107, 107, 107, 1,
  25226. 1, 1, 107, 107, 107, 107, 107, 107,
  25227. 107, 107, 107, 107, 107, 107, 107, 107,
  25228. 107, 107, 107, 107, 107, 107, 107, 107,
  25229. 107, 107, 107, 107, 107, 107, 107, 107,
  25230. 107, 107, 107, 1, 1, 1, 1, 1,
  25231. 1, 1, 1, 1, 1, 1, 1, 1,
  25232. 1, 1, 1, 1, 1, 1, 1, 1,
  25233. 1, 1, 1, 1, 1, 1, 1, 1,
  25234. 1, 1, 1, 1, 1, 1, 1, 1,
  25235. 1, 1, 1, 1, 1, 1, 1, 1,
  25236. 1, 1, 1, 1, 1, 1, 1, 1,
  25237. 1, 1, 1, 1, 1, 1, 1, 1,
  25238. 1, 1, 1, 1, 1, 1, 113, 113,
  25239. 113, 113, 113, 113, 113, 113, 113, 113,
  25240. 113, 113, 113, 113, 113, 113, 113, 113,
  25241. 113, 113, 113, 113, 113, 113, 113, 113,
  25242. 113, 113, 113, 113, 114, 115, 115, 115,
  25243. 115, 115, 115, 115, 115, 115, 115, 115,
  25244. 115, 116, 115, 115, 117, 118, 118, 118,
  25245. 119, 1, 4178, 1, 1, 1, 4179, 1,
  25246. 1, 1, 1, 1, 1, 1, 1, 1,
  25247. 1, 1, 1, 1, 1, 1, 1, 1,
  25248. 1, 4178, 134, 135, 134, 134, 134, 134,
  25249. 134, 4180, 1, 134, 134, 1, 134, 1,
  25250. 134, 134, 134, 134, 134, 134, 134, 134,
  25251. 134, 134, 134, 1, 1, 1, 134, 124,
  25252. 134, 125, 134, 134, 134, 134, 134, 134,
  25253. 134, 134, 134, 134, 134, 134, 134, 134,
  25254. 134, 134, 134, 134, 134, 134, 134, 134,
  25255. 134, 134, 134, 134, 1, 1, 1, 134,
  25256. 134, 134, 134, 134, 134, 134, 134, 134,
  25257. 134, 134, 134, 134, 134, 134, 134, 134,
  25258. 134, 134, 134, 134, 134, 134, 134, 134,
  25259. 134, 134, 134, 134, 134, 134, 134, 134,
  25260. 1, 1, 1, 1, 1, 1, 1, 1,
  25261. 1, 1, 1, 1, 1, 1, 1, 1,
  25262. 1, 1, 1, 1, 1, 1, 1, 1,
  25263. 1, 1, 1, 1, 1, 1, 1, 1,
  25264. 1, 1, 1, 1, 1, 1, 1, 1,
  25265. 1, 1, 1, 1, 1, 1, 1, 1,
  25266. 1, 1, 1, 1, 1, 1, 1, 1,
  25267. 1, 1, 1, 1, 1, 1, 1, 1,
  25268. 1, 1, 1, 137, 137, 137, 137, 137,
  25269. 137, 137, 137, 137, 137, 137, 137, 137,
  25270. 137, 137, 137, 137, 137, 137, 137, 137,
  25271. 137, 137, 137, 137, 137, 137, 137, 137,
  25272. 137, 138, 139, 139, 139, 139, 139, 139,
  25273. 139, 139, 139, 139, 139, 139, 140, 139,
  25274. 139, 141, 142, 142, 142, 143, 1, 4181,
  25275. 1, 4178, 1, 1, 1, 1, 1, 1,
  25276. 1, 1, 1, 1, 1, 1, 1, 1,
  25277. 1, 1, 1, 1, 1, 1, 1, 1,
  25278. 4178, 1, 4182, 1, 1, 1, 4183, 1,
  25279. 1, 1, 1, 1, 1, 1, 1, 1,
  25280. 1, 1, 1, 1, 1, 1, 1, 1,
  25281. 1, 4182, 4133, 4134, 4133, 4133, 4133, 4133,
  25282. 4133, 4184, 1, 4133, 4133, 1, 4133, 1,
  25283. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25284. 4133, 4133, 4133, 1, 1, 1, 4133, 131,
  25285. 4133, 132, 4133, 4133, 4133, 4133, 4133, 4133,
  25286. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25287. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25288. 4133, 4133, 4133, 4133, 1, 1, 1, 4133,
  25289. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25290. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25291. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25292. 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133,
  25293. 1, 1, 1, 1, 1, 1, 1, 1,
  25294. 1, 1, 1, 1, 1, 1, 1, 1,
  25295. 1, 1, 1, 1, 1, 1, 1, 1,
  25296. 1, 1, 1, 1, 1, 1, 1, 1,
  25297. 1, 1, 1, 1, 1, 1, 1, 1,
  25298. 1, 1, 1, 1, 1, 1, 1, 1,
  25299. 1, 1, 1, 1, 1, 1, 1, 1,
  25300. 1, 1, 1, 1, 1, 1, 1, 1,
  25301. 1, 1, 1, 4136, 4136, 4136, 4136, 4136,
  25302. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  25303. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  25304. 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
  25305. 4136, 4137, 4138, 4138, 4138, 4138, 4138, 4138,
  25306. 4138, 4138, 4138, 4138, 4138, 4138, 4139, 4138,
  25307. 4138, 4140, 4141, 4141, 4141, 4142, 1, 4185,
  25308. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4186,
  25309. 1, 4185, 4185, 4187, 4185, 4185, 4185, 4185,
  25310. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25311. 4185, 4185, 4185, 4185, 4185, 4185, 4186, 4185,
  25312. 4111, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25313. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25314. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25315. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25316. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25317. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25318. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25319. 4185, 4185, 4188, 4185, 4185, 4185, 4185, 4185,
  25320. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25321. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25322. 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185,
  25323. 4185, 4185, 4185, 4185, 4185, 4185, 1, 1,
  25324. 1, 1, 1, 1, 1, 1, 1, 1,
  25325. 1, 1, 1, 1, 1, 1, 1, 1,
  25326. 1, 1, 1, 1, 1, 1, 1, 1,
  25327. 1, 1, 1, 1, 1, 1, 1, 1,
  25328. 1, 1, 1, 1, 1, 1, 1, 1,
  25329. 1, 1, 1, 1, 1, 1, 1, 1,
  25330. 1, 1, 1, 1, 1, 1, 1, 1,
  25331. 1, 1, 1, 1, 1, 1, 1, 1,
  25332. 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
  25333. 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
  25334. 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
  25335. 4189, 4189, 4189, 4189, 4189, 4189, 4190, 4191,
  25336. 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191,
  25337. 4191, 4191, 4191, 4192, 4191, 4191, 4193, 4194,
  25338. 4194, 4194, 4195, 1, 4196, 4196, 4196, 4196,
  25339. 4196, 4196, 4196, 4196, 4196, 1, 4196, 4196,
  25340. 4197, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25341. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25342. 4196, 4196, 4196, 4196, 4196, 4198, 4196, 4196,
  25343. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25344. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25345. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25346. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25347. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25348. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25349. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4199,
  25350. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25351. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25352. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25353. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25354. 4196, 4196, 4196, 1, 1, 1, 1, 1,
  25355. 1, 1, 1, 1, 1, 1, 1, 1,
  25356. 1, 1, 1, 1, 1, 1, 1, 1,
  25357. 1, 1, 1, 1, 1, 1, 1, 1,
  25358. 1, 1, 1, 1, 1, 1, 1, 1,
  25359. 1, 1, 1, 1, 1, 1, 1, 1,
  25360. 1, 1, 1, 1, 1, 1, 1, 1,
  25361. 1, 1, 1, 1, 1, 1, 1, 1,
  25362. 1, 1, 1, 1, 1, 4200, 4200, 4200,
  25363. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25364. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25365. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25366. 4200, 4200, 4200, 4201, 4202, 4202, 4202, 4202,
  25367. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25368. 4203, 4202, 4202, 4204, 4205, 4205, 4205, 4206,
  25369. 1, 4207, 1, 4196, 1, 1, 1, 1,
  25370. 1, 1, 1, 1, 1, 1, 1, 1,
  25371. 1, 1, 1, 1, 1, 1, 1, 1,
  25372. 1, 1, 4196, 1, 105, 1, 1, 1,
  25373. 106, 1, 1, 1, 1, 1, 1, 1,
  25374. 1, 1, 1, 1, 1, 1, 1, 1,
  25375. 1, 1, 1, 105, 4154, 108, 4154, 4154,
  25376. 4154, 4154, 4154, 109, 1, 4154, 4154, 1,
  25377. 4154, 110, 4154, 4154, 4154, 4154, 4154, 4154,
  25378. 4154, 4154, 4154, 4154, 4154, 1, 1, 1,
  25379. 4154, 111, 4154, 112, 4154, 4154, 4154, 4154,
  25380. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25381. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25382. 4154, 4154, 4154, 4154, 4154, 4154, 1, 1,
  25383. 1, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25384. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25385. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25386. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25387. 4154, 4154, 1, 1, 1, 1, 1, 1,
  25388. 1, 1, 1, 1, 1, 1, 1, 1,
  25389. 1, 1, 1, 1, 1, 1, 1, 1,
  25390. 1, 1, 1, 1, 1, 1, 1, 1,
  25391. 1, 1, 1, 1, 1, 1, 1, 1,
  25392. 1, 1, 1, 1, 1, 1, 1, 1,
  25393. 1, 1, 1, 1, 1, 1, 1, 1,
  25394. 1, 1, 1, 1, 1, 1, 1, 1,
  25395. 1, 1, 1, 1, 1, 4159, 4159, 4159,
  25396. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25397. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25398. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25399. 4159, 4159, 4159, 4160, 4161, 4161, 4161, 4161,
  25400. 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161,
  25401. 4162, 4161, 4161, 4163, 4164, 4164, 4164, 4165,
  25402. 1, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25403. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25404. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25405. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25406. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25407. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25408. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25409. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25410. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25411. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25412. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25413. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25414. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25415. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25416. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25417. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25418. 4196, 1, 1, 1, 1, 1, 1, 1,
  25419. 1, 1, 1, 1, 1, 1, 1, 1,
  25420. 1, 1, 1, 1, 1, 1, 1, 1,
  25421. 1, 1, 1, 1, 1, 1, 1, 1,
  25422. 1, 1, 1, 1, 1, 1, 1, 1,
  25423. 1, 1, 1, 1, 1, 1, 1, 1,
  25424. 1, 1, 1, 1, 1, 1, 1, 1,
  25425. 1, 1, 1, 1, 1, 1, 1, 1,
  25426. 1, 1, 1, 4200, 4200, 4200, 4200, 4200,
  25427. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25428. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25429. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25430. 4200, 4201, 4202, 4202, 4202, 4202, 4202, 4202,
  25431. 4202, 4202, 4202, 4202, 4202, 4202, 4203, 4202,
  25432. 4202, 4204, 4205, 4205, 4205, 4206, 1, 4196,
  25433. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25434. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25435. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25436. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25437. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25438. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25439. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25440. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 1,
  25441. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25442. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25443. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25444. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25445. 1, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25446. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25447. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25448. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25449. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25450. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25451. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25452. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25453. 4200, 1, 4200, 4200, 4200, 4200, 4200, 4200,
  25454. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25455. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25456. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25457. 4200, 4200, 1, 4202, 4202, 4202, 4202, 4202,
  25458. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25459. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25460. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25461. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25462. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25463. 4202, 4202, 4202, 1, 4202, 4202, 4202, 4202,
  25464. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25465. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25466. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25467. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25468. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25469. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25470. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25471. 4202, 4202, 4202, 4202, 1, 4202, 4202, 4202,
  25472. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25473. 4202, 4202, 4202, 4202, 4202, 1, 4196, 4196,
  25474. 4196, 4196, 4196, 4196, 4196, 4196, 4208, 1,
  25475. 4196, 4196, 4209, 4196, 4196, 4196, 4196, 4196,
  25476. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25477. 4196, 4196, 4196, 4196, 4196, 4208, 4196, 4122,
  25478. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25479. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25480. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25481. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25482. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25483. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25484. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25485. 4196, 4199, 4196, 4196, 4196, 4196, 4196, 4196,
  25486. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25487. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25488. 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196,
  25489. 4196, 4196, 4196, 4196, 4196, 1, 1, 1,
  25490. 1, 1, 1, 1, 1, 1, 1, 1,
  25491. 1, 1, 1, 1, 1, 1, 1, 1,
  25492. 1, 1, 1, 1, 1, 1, 1, 1,
  25493. 1, 1, 1, 1, 1, 1, 1, 1,
  25494. 1, 1, 1, 1, 1, 1, 1, 1,
  25495. 1, 1, 1, 1, 1, 1, 1, 1,
  25496. 1, 1, 1, 1, 1, 1, 1, 1,
  25497. 1, 1, 1, 1, 1, 1, 1, 4200,
  25498. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25499. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25500. 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
  25501. 4200, 4200, 4200, 4200, 4200, 4201, 4202, 4202,
  25502. 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
  25503. 4202, 4202, 4203, 4202, 4202, 4204, 4205, 4205,
  25504. 4205, 4206, 1, 4210, 1, 4208, 1, 1,
  25505. 1, 1, 1, 1, 1, 1, 1, 1,
  25506. 1, 1, 1, 1, 1, 1, 1, 1,
  25507. 1, 1, 1, 1, 4208, 1, 107, 107,
  25508. 107, 107, 107, 107, 107, 107, 107, 107,
  25509. 107, 107, 107, 107, 107, 107, 107, 107,
  25510. 107, 107, 107, 107, 107, 107, 107, 107,
  25511. 107, 107, 107, 107, 107, 107, 107, 107,
  25512. 107, 107, 107, 107, 107, 107, 107, 107,
  25513. 107, 107, 107, 107, 107, 107, 107, 107,
  25514. 107, 107, 107, 107, 107, 107, 107, 107,
  25515. 107, 107, 107, 107, 107, 107, 1, 113,
  25516. 113, 113, 113, 113, 113, 113, 113, 113,
  25517. 113, 113, 113, 113, 113, 113, 113, 113,
  25518. 113, 113, 113, 113, 113, 113, 113, 113,
  25519. 113, 113, 113, 113, 113, 113, 113, 1,
  25520. 113, 113, 113, 113, 113, 113, 113, 113,
  25521. 113, 113, 113, 113, 113, 113, 113, 113,
  25522. 113, 113, 113, 113, 113, 113, 113, 113,
  25523. 113, 113, 113, 113, 113, 113, 113, 113,
  25524. 113, 113, 113, 113, 113, 113, 113, 113,
  25525. 113, 113, 113, 113, 113, 113, 113, 113,
  25526. 113, 113, 113, 113, 113, 113, 113, 113,
  25527. 113, 113, 113, 113, 113, 113, 113, 113,
  25528. 1, 113, 113, 113, 113, 113, 113, 113,
  25529. 113, 113, 113, 113, 113, 113, 113, 113,
  25530. 113, 113, 113, 113, 113, 113, 113, 113,
  25531. 113, 113, 113, 113, 113, 113, 113, 113,
  25532. 113, 1, 115, 115, 115, 115, 115, 115,
  25533. 115, 115, 115, 115, 115, 115, 115, 115,
  25534. 115, 115, 115, 115, 115, 115, 115, 115,
  25535. 115, 115, 115, 115, 115, 115, 115, 115,
  25536. 115, 115, 115, 115, 115, 115, 115, 115,
  25537. 115, 115, 115, 115, 115, 115, 115, 115,
  25538. 115, 115, 1, 115, 115, 115, 115, 115,
  25539. 115, 115, 115, 115, 115, 115, 115, 115,
  25540. 115, 115, 115, 115, 115, 115, 115, 115,
  25541. 115, 115, 115, 115, 115, 115, 115, 115,
  25542. 115, 115, 115, 115, 115, 115, 115, 115,
  25543. 115, 115, 115, 115, 115, 115, 115, 115,
  25544. 115, 115, 115, 115, 115, 115, 115, 115,
  25545. 115, 115, 115, 115, 115, 115, 115, 115,
  25546. 115, 115, 115, 1, 115, 115, 115, 115,
  25547. 115, 115, 115, 115, 115, 115, 115, 115,
  25548. 115, 115, 115, 115, 1, 4211, 4211, 4211,
  25549. 4211, 4211, 4211, 4211, 4211, 4212, 1, 4211,
  25550. 4211, 4213, 4211, 4211, 4211, 4211, 4211, 4211,
  25551. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25552. 4211, 4211, 4211, 4211, 4212, 4211, 4214, 4211,
  25553. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25554. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25555. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25556. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25557. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25558. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25559. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25560. 4215, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25561. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25562. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25563. 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
  25564. 4211, 4211, 4211, 4211, 1, 1, 1, 1,
  25565. 1, 1, 1, 1, 1, 1, 1, 1,
  25566. 1, 1, 1, 1, 1, 1, 1, 1,
  25567. 1, 1, 1, 1, 1, 1, 1, 1,
  25568. 1, 1, 1, 1, 1, 1, 1, 1,
  25569. 1, 1, 1, 1, 1, 1, 1, 1,
  25570. 1, 1, 1, 1, 1, 1, 1, 1,
  25571. 1, 1, 1, 1, 1, 1, 1, 1,
  25572. 1, 1, 1, 1, 1, 1, 4216, 4216,
  25573. 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
  25574. 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
  25575. 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
  25576. 4216, 4216, 4216, 4216, 4217, 4218, 4218, 4218,
  25577. 4218, 4218, 4218, 4218, 4218, 4218, 4218, 4218,
  25578. 4218, 4219, 4218, 4218, 4220, 4221, 4221, 4221,
  25579. 4222, 1, 4223, 4223, 4223, 4223, 4223, 4223,
  25580. 4223, 4223, 4223, 1, 4223, 4223, 4224, 4223,
  25581. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25582. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25583. 4223, 4223, 4223, 4225, 4223, 4223, 4223, 4223,
  25584. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25585. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25586. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25587. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25588. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25589. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25590. 4223, 4223, 4223, 4223, 4223, 4226, 4223, 4223,
  25591. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25592. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25593. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25594. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25595. 4223, 1, 1, 1, 1, 1, 1, 1,
  25596. 1, 1, 1, 1, 1, 1, 1, 1,
  25597. 1, 1, 1, 1, 1, 1, 1, 1,
  25598. 1, 1, 1, 1, 1, 1, 1, 1,
  25599. 1, 1, 1, 1, 1, 1, 1, 1,
  25600. 1, 1, 1, 1, 1, 1, 1, 1,
  25601. 1, 1, 1, 1, 1, 1, 1, 1,
  25602. 1, 1, 1, 1, 1, 1, 1, 1,
  25603. 1, 1, 1, 4227, 4227, 4227, 4227, 4227,
  25604. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25605. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25606. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25607. 4227, 4228, 4229, 4229, 4229, 4229, 4229, 4229,
  25608. 4229, 4229, 4229, 4229, 4229, 4229, 4230, 4229,
  25609. 4229, 4231, 4232, 4232, 4232, 4233, 1, 4234,
  25610. 1, 4223, 1, 1, 1, 1, 1, 1,
  25611. 1, 1, 1, 1, 1, 1, 1, 1,
  25612. 1, 1, 1, 1, 1, 1, 1, 1,
  25613. 4223, 1, 4235, 1, 1, 1, 4236, 1,
  25614. 1, 1, 1, 1, 1, 1, 1, 1,
  25615. 1, 1, 1, 1, 1, 1, 1, 1,
  25616. 1, 4235, 4154, 108, 4154, 4154, 4154, 4154,
  25617. 4154, 4237, 1, 4154, 4154, 1, 4154, 110,
  25618. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25619. 4154, 4154, 4154, 1, 1, 1, 4154, 111,
  25620. 4154, 4238, 4154, 4154, 4154, 4154, 4154, 4154,
  25621. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25622. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25623. 4154, 4154, 4154, 4154, 1, 1, 1, 4154,
  25624. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25625. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25626. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25627. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  25628. 1, 1, 1, 1, 1, 1, 1, 1,
  25629. 1, 1, 1, 1, 1, 1, 1, 1,
  25630. 1, 1, 1, 1, 1, 1, 1, 1,
  25631. 1, 1, 1, 1, 1, 1, 1, 1,
  25632. 1, 1, 1, 1, 1, 1, 1, 1,
  25633. 1, 1, 1, 1, 1, 1, 1, 1,
  25634. 1, 1, 1, 1, 1, 1, 1, 1,
  25635. 1, 1, 1, 1, 1, 1, 1, 1,
  25636. 1, 1, 1, 4159, 4159, 4159, 4159, 4159,
  25637. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25638. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25639. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  25640. 4159, 4160, 4161, 4161, 4161, 4161, 4161, 4161,
  25641. 4161, 4161, 4161, 4161, 4161, 4161, 4162, 4161,
  25642. 4161, 4163, 4164, 4164, 4164, 4165, 1, 4239,
  25643. 1, 1, 1, 4240, 1, 1, 1, 1,
  25644. 1, 1, 1, 1, 1, 1, 1, 1,
  25645. 1, 1, 1, 1, 1, 1, 4239, 1,
  25646. 1, 1, 1, 1, 1, 1, 4241, 1,
  25647. 1, 1, 1, 1, 123, 1, 1, 1,
  25648. 1, 1, 1, 1, 1, 1, 1, 1,
  25649. 1, 1, 1, 1, 124, 1, 4242, 1,
  25650. 4243, 1, 4239, 1, 1, 1, 1, 1,
  25651. 1, 1, 1, 1, 1, 1, 1, 1,
  25652. 1, 1, 1, 1, 1, 1, 1, 1,
  25653. 1, 4239, 1, 4244, 1, 1, 1, 4245,
  25654. 1, 1, 1, 1, 1, 1, 1, 1,
  25655. 1, 1, 1, 1, 1, 1, 1, 1,
  25656. 1, 1, 4244, 1, 1, 1, 1, 1,
  25657. 1, 1, 4246, 1, 1, 1, 1, 1,
  25658. 130, 1, 1, 1, 1, 1, 1, 1,
  25659. 1, 1, 1, 1, 1, 1, 1, 1,
  25660. 131, 1, 4247, 1, 4223, 4223, 4223, 4223,
  25661. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25662. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25663. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25664. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25665. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25666. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25667. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25668. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25669. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25670. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25671. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25672. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25673. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25674. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25675. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25676. 4223, 4223, 4223, 4223, 1, 1, 1, 1,
  25677. 1, 1, 1, 1, 1, 1, 1, 1,
  25678. 1, 1, 1, 1, 1, 1, 1, 1,
  25679. 1, 1, 1, 1, 1, 1, 1, 1,
  25680. 1, 1, 1, 1, 1, 1, 1, 1,
  25681. 1, 1, 1, 1, 1, 1, 1, 1,
  25682. 1, 1, 1, 1, 1, 1, 1, 1,
  25683. 1, 1, 1, 1, 1, 1, 1, 1,
  25684. 1, 1, 1, 1, 1, 1, 4227, 4227,
  25685. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25686. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25687. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25688. 4227, 4227, 4227, 4227, 4228, 4229, 4229, 4229,
  25689. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25690. 4229, 4230, 4229, 4229, 4231, 4232, 4232, 4232,
  25691. 4233, 1, 4223, 4223, 4223, 4223, 4223, 4223,
  25692. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25693. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25694. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25695. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25696. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25697. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25698. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25699. 4223, 4223, 1, 4227, 4227, 4227, 4227, 4227,
  25700. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25701. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25702. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25703. 4227, 4227, 4227, 1, 4227, 4227, 4227, 4227,
  25704. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25705. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25706. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25707. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25708. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25709. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25710. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25711. 4227, 4227, 4227, 4227, 1, 4227, 4227, 4227,
  25712. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25713. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25714. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25715. 4227, 4227, 4227, 4227, 4227, 1, 4229, 4229,
  25716. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25717. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25718. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25719. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25720. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25721. 4229, 4229, 4229, 4229, 4229, 4229, 1, 4229,
  25722. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25723. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25724. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25725. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25726. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25727. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25728. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25729. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 1,
  25730. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25731. 4229, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25732. 1, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25733. 4223, 4248, 1, 4223, 4223, 4249, 4223, 4223,
  25734. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25735. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25736. 4248, 4223, 4250, 4223, 4223, 4223, 4223, 4223,
  25737. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25738. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25739. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25740. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25741. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25742. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25743. 4223, 4223, 4223, 4223, 4226, 4223, 4223, 4223,
  25744. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25745. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25746. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25747. 4223, 4223, 4223, 4223, 4223, 4223, 4223, 4223,
  25748. 1, 1, 1, 1, 1, 1, 1, 1,
  25749. 1, 1, 1, 1, 1, 1, 1, 1,
  25750. 1, 1, 1, 1, 1, 1, 1, 1,
  25751. 1, 1, 1, 1, 1, 1, 1, 1,
  25752. 1, 1, 1, 1, 1, 1, 1, 1,
  25753. 1, 1, 1, 1, 1, 1, 1, 1,
  25754. 1, 1, 1, 1, 1, 1, 1, 1,
  25755. 1, 1, 1, 1, 1, 1, 1, 1,
  25756. 1, 1, 4227, 4227, 4227, 4227, 4227, 4227,
  25757. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25758. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25759. 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
  25760. 4228, 4229, 4229, 4229, 4229, 4229, 4229, 4229,
  25761. 4229, 4229, 4229, 4229, 4229, 4230, 4229, 4229,
  25762. 4231, 4232, 4232, 4232, 4233, 1, 4251, 1,
  25763. 4248, 1, 1, 1, 1, 1, 1, 1,
  25764. 1, 1, 1, 1, 1, 1, 1, 1,
  25765. 1, 1, 1, 1, 1, 1, 1, 4248,
  25766. 1, 4252, 1, 1, 1, 4253, 1, 1,
  25767. 1, 1, 1, 1, 1, 1, 1, 1,
  25768. 1, 1, 1, 1, 1, 1, 1, 1,
  25769. 4252, 1, 1, 1, 1, 1, 1, 1,
  25770. 4254, 1, 1, 1, 1, 1, 123, 1,
  25771. 1, 1, 1, 1, 1, 1, 1, 1,
  25772. 1, 1, 1, 1, 1, 1, 124, 1,
  25773. 4255, 1, 4256, 1, 4252, 1, 1, 1,
  25774. 1, 1, 1, 1, 1, 1, 1, 1,
  25775. 1, 1, 1, 1, 1, 1, 1, 1,
  25776. 1, 1, 1, 4252, 1, 4257, 1, 1,
  25777. 1, 4258, 1, 1, 1, 1, 1, 1,
  25778. 1, 1, 1, 1, 1, 1, 1, 1,
  25779. 1, 1, 1, 1, 4257, 1, 1, 1,
  25780. 1, 1, 1, 1, 4259, 1, 1, 1,
  25781. 1, 1, 130, 1, 1, 1, 1, 1,
  25782. 1, 1, 1, 1, 1, 1, 1, 1,
  25783. 1, 1, 131, 1, 4260, 1, 4261, 1,
  25784. 1, 1, 4262, 1, 1, 1, 1, 1,
  25785. 1, 1, 1, 1, 1, 1, 1, 1,
  25786. 1, 1, 1, 1, 1, 4261, 4263, 4264,
  25787. 4263, 4263, 4263, 4263, 4263, 4265, 1, 4263,
  25788. 4263, 4266, 4263, 4267, 4263, 4263, 4263, 4263,
  25789. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 1,
  25790. 1, 1, 4263, 1, 4263, 4268, 4263, 4263,
  25791. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25792. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25793. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25794. 1, 1, 1, 4263, 4263, 4263, 4263, 4263,
  25795. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25796. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25797. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  25798. 4263, 4263, 4263, 4263, 1, 1, 1, 1,
  25799. 1, 1, 1, 1, 1, 1, 1, 1,
  25800. 1, 1, 1, 1, 1, 1, 1, 1,
  25801. 1, 1, 1, 1, 1, 1, 1, 1,
  25802. 1, 1, 1, 1, 1, 1, 1, 1,
  25803. 1, 1, 1, 1, 1, 1, 1, 1,
  25804. 1, 1, 1, 1, 1, 1, 1, 1,
  25805. 1, 1, 1, 1, 1, 1, 1, 1,
  25806. 1, 1, 1, 1, 1, 1, 1, 4269,
  25807. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  25808. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  25809. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  25810. 4269, 4269, 4269, 4269, 4269, 4270, 4271, 4271,
  25811. 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271,
  25812. 4271, 4271, 4272, 4271, 4271, 4273, 4274, 4274,
  25813. 4274, 4275, 1, 102, 1, 1, 1, 4276,
  25814. 1, 1, 1, 1, 1, 1, 1, 1,
  25815. 1, 1, 1, 1, 1, 1, 1, 1,
  25816. 1, 1, 102, 1, 1, 1, 1, 1,
  25817. 1, 1, 4277, 1, 1, 1, 102, 1,
  25818. 1, 1, 1, 1, 1, 1, 1, 1,
  25819. 1, 1, 1, 1, 1, 1, 1, 1,
  25820. 1, 1, 103, 1, 4278, 1, 102, 1,
  25821. 1, 1, 1, 1, 1, 1, 1, 1,
  25822. 1, 1, 1, 1, 1, 1, 1, 1,
  25823. 1, 1, 1, 1, 1, 102, 1, 4266,
  25824. 1, 1, 1, 4279, 1, 1, 1, 1,
  25825. 1, 1, 1, 1, 1, 1, 1, 1,
  25826. 1, 1, 1, 1, 1, 1, 4266, 1,
  25827. 1, 1, 1, 1, 1, 1, 4280, 1,
  25828. 1, 1, 4266, 1, 1, 1, 1, 1,
  25829. 1, 1, 1, 1, 1, 1, 1, 1,
  25830. 1, 1, 1, 1, 1, 1, 4268, 1,
  25831. 4281, 1, 1, 1, 4282, 1, 1, 1,
  25832. 1, 1, 1, 1, 1, 1, 1, 1,
  25833. 1, 1, 1, 1, 1, 1, 1, 4281,
  25834. 4283, 4284, 4283, 4283, 4283, 4283, 4283, 4285,
  25835. 1, 4283, 4283, 1, 4283, 4286, 4283, 4283,
  25836. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25837. 4283, 1, 1, 1, 4283, 1, 4283, 1,
  25838. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25839. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25840. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25841. 4283, 4283, 4287, 1, 1, 4283, 4283, 4283,
  25842. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25843. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25844. 4283, 4283, 4283, 4283, 4283, 4283, 4283, 4283,
  25845. 4283, 4283, 4283, 4283, 4283, 4283, 1, 1,
  25846. 1, 1, 1, 1, 1, 1, 1, 1,
  25847. 1, 1, 1, 1, 1, 1, 1, 1,
  25848. 1, 1, 1, 1, 1, 1, 1, 1,
  25849. 1, 1, 1, 1, 1, 1, 1, 1,
  25850. 1, 1, 1, 1, 1, 1, 1, 1,
  25851. 1, 1, 1, 1, 1, 1, 1, 1,
  25852. 1, 1, 1, 1, 1, 1, 1, 1,
  25853. 1, 1, 1, 1, 1, 1, 1, 1,
  25854. 1, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
  25855. 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
  25856. 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
  25857. 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4289,
  25858. 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290,
  25859. 4290, 4290, 4290, 4290, 4291, 4290, 4290, 4292,
  25860. 4293, 4293, 4293, 4294, 1, 4295, 1, 1,
  25861. 1, 4296, 1, 1, 1, 1, 1, 1,
  25862. 1, 1, 1, 1, 1, 1, 1, 1,
  25863. 1, 1, 1, 1, 4295, 4297, 4298, 4297,
  25864. 4297, 4297, 4297, 4297, 4299, 1, 4297, 4297,
  25865. 1, 4297, 4300, 4297, 4297, 4297, 4297, 4297,
  25866. 4297, 4297, 4297, 4297, 4297, 4297, 1, 1,
  25867. 1, 4297, 1, 4297, 1, 4297, 4297, 4297,
  25868. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25869. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25870. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4301,
  25871. 1, 1, 4297, 4297, 4297, 4297, 4297, 4297,
  25872. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25873. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25874. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25875. 4297, 4297, 4297, 1, 1, 1, 1, 1,
  25876. 1, 1, 1, 1, 1, 1, 1, 1,
  25877. 1, 1, 1, 1, 1, 1, 1, 1,
  25878. 1, 1, 1, 1, 1, 1, 1, 1,
  25879. 1, 1, 1, 1, 1, 1, 1, 1,
  25880. 1, 1, 1, 1, 1, 1, 1, 1,
  25881. 1, 1, 1, 1, 1, 1, 1, 1,
  25882. 1, 1, 1, 1, 1, 1, 1, 1,
  25883. 1, 1, 1, 1, 1, 1, 4302, 4302,
  25884. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25885. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25886. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25887. 4302, 4302, 4302, 4302, 4303, 4304, 4304, 4304,
  25888. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  25889. 4304, 4305, 4304, 4304, 4306, 4307, 4307, 4307,
  25890. 4308, 1, 4309, 1, 4295, 1, 1, 1,
  25891. 1, 1, 1, 1, 1, 1, 1, 1,
  25892. 1, 1, 1, 1, 1, 1, 1, 1,
  25893. 1, 1, 1, 4295, 1, 4310, 1, 1,
  25894. 1, 4311, 1, 1, 1, 1, 1, 1,
  25895. 1, 1, 1, 1, 1, 1, 1, 1,
  25896. 1, 1, 1, 1, 4310, 4297, 4298, 4297,
  25897. 4297, 4297, 4297, 4297, 4312, 1, 4297, 4297,
  25898. 4313, 4297, 4314, 4297, 4297, 4297, 4297, 4297,
  25899. 4297, 4297, 4297, 4297, 4297, 4297, 4315, 1,
  25900. 1, 4297, 1, 4297, 1, 4297, 4297, 4297,
  25901. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25902. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25903. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 1,
  25904. 1, 1, 4297, 4297, 4297, 4297, 4297, 4297,
  25905. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25906. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25907. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  25908. 4297, 4297, 4297, 1, 1, 1, 1, 1,
  25909. 1, 1, 1, 1, 1, 1, 1, 1,
  25910. 1, 1, 1, 1, 1, 1, 1, 1,
  25911. 1, 1, 1, 1, 1, 1, 1, 1,
  25912. 1, 1, 1, 1, 1, 1, 1, 1,
  25913. 1, 1, 1, 1, 1, 1, 1, 1,
  25914. 1, 1, 1, 1, 1, 1, 1, 1,
  25915. 1, 1, 1, 1, 1, 1, 1, 1,
  25916. 1, 1, 1, 1, 1, 1, 4302, 4302,
  25917. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25918. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25919. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  25920. 4302, 4302, 4302, 4302, 4303, 4304, 4304, 4304,
  25921. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  25922. 4304, 4305, 4304, 4304, 4306, 4307, 4307, 4307,
  25923. 4308, 1, 4310, 1, 1, 1, 4311, 1,
  25924. 1, 1, 1, 1, 1, 1, 1, 1,
  25925. 1, 1, 1, 1, 1, 1, 1, 1,
  25926. 1, 4310, 1, 1, 1, 1, 1, 1,
  25927. 1, 4312, 1, 1, 1, 4313, 1, 4316,
  25928. 1, 1, 1, 1, 1, 1, 1, 1,
  25929. 1, 1, 1, 4315, 1, 4317, 1, 4310,
  25930. 1, 1, 1, 1, 1, 1, 1, 1,
  25931. 1, 1, 1, 1, 1, 1, 1, 1,
  25932. 1, 1, 1, 1, 1, 1, 4310, 1,
  25933. 4318, 1, 1, 1, 4319, 1, 1, 1,
  25934. 1, 1, 1, 1, 1, 1, 1, 1,
  25935. 1, 1, 1, 1, 1, 1, 1, 4318,
  25936. 1, 1, 1, 1, 1, 1, 1, 4320,
  25937. 1, 1, 1, 4321, 1, 4322, 1, 1,
  25938. 1, 1, 1, 1, 1, 1, 1, 1,
  25939. 1, 4323, 1, 4324, 1, 1, 1, 4325,
  25940. 1, 1, 1, 1, 1, 1, 1, 1,
  25941. 1, 1, 1, 1, 1, 1, 1, 1,
  25942. 1, 1, 4324, 1, 1, 1, 1, 1,
  25943. 1, 1, 4326, 1, 1, 1, 4324, 1,
  25944. 1, 1, 1, 1, 1, 1, 1, 1,
  25945. 1, 1, 1, 1, 4327, 1, 1, 1,
  25946. 1, 1, 103, 1, 4328, 1, 4324, 1,
  25947. 1, 1, 1, 1, 1, 1, 1, 1,
  25948. 1, 1, 1, 1, 1, 1, 1, 1,
  25949. 1, 1, 1, 1, 1, 4324, 1, 4329,
  25950. 1, 1, 1, 4330, 1, 1, 1, 1,
  25951. 1, 1, 1, 1, 1, 1, 1, 1,
  25952. 1, 1, 1, 1, 1, 1, 4329, 1,
  25953. 1, 1, 1, 1, 1, 1, 4331, 1,
  25954. 1, 1, 4329, 1, 1, 1, 1, 1,
  25955. 1, 1, 1, 1, 1, 1, 1, 1,
  25956. 4332, 1, 1, 1, 1, 1, 4268, 1,
  25957. 4333, 1, 1, 1, 4334, 1, 1, 1,
  25958. 1, 1, 1, 1, 1, 1, 1, 1,
  25959. 1, 1, 1, 1, 1, 1, 1, 4333,
  25960. 4335, 4336, 4335, 4335, 4335, 4335, 4335, 4337,
  25961. 1, 4335, 4335, 1, 4335, 4338, 4335, 4335,
  25962. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25963. 4335, 1, 1, 1, 4335, 1, 4335, 1,
  25964. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25965. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25966. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25967. 4335, 4335, 1, 1, 1, 4335, 4335, 4335,
  25968. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25969. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25970. 4335, 4335, 4335, 4335, 4335, 4335, 4335, 4335,
  25971. 4335, 4335, 4335, 4335, 4335, 4335, 1, 1,
  25972. 1, 1, 1, 1, 1, 1, 1, 1,
  25973. 1, 1, 1, 1, 1, 1, 1, 1,
  25974. 1, 1, 1, 1, 1, 1, 1, 1,
  25975. 1, 1, 1, 1, 1, 1, 1, 1,
  25976. 1, 1, 1, 1, 1, 1, 1, 1,
  25977. 1, 1, 1, 1, 1, 1, 1, 1,
  25978. 1, 1, 1, 1, 1, 1, 1, 1,
  25979. 1, 1, 1, 1, 1, 1, 1, 1,
  25980. 1, 4339, 4339, 4339, 4339, 4339, 4339, 4339,
  25981. 4339, 4339, 4339, 4339, 4339, 4339, 4339, 4339,
  25982. 4339, 4339, 4339, 4339, 4339, 4339, 4339, 4339,
  25983. 4339, 4339, 4339, 4339, 4339, 4339, 4339, 4340,
  25984. 4341, 4341, 4341, 4341, 4341, 4341, 4341, 4341,
  25985. 4341, 4341, 4341, 4341, 4342, 4341, 4341, 4343,
  25986. 4344, 4344, 4344, 4345, 1, 4346, 1, 1,
  25987. 1, 4347, 1, 1, 1, 1, 1, 1,
  25988. 1, 1, 1, 1, 1, 1, 1, 1,
  25989. 1, 1, 1, 1, 4346, 86, 87, 86,
  25990. 86, 86, 86, 86, 4348, 1, 86, 86,
  25991. 1, 86, 90, 86, 86, 86, 86, 86,
  25992. 86, 86, 86, 86, 86, 86, 1, 1,
  25993. 1, 86, 1, 86, 1, 86, 86, 86,
  25994. 86, 86, 86, 86, 86, 86, 86, 86,
  25995. 86, 86, 86, 86, 86, 86, 86, 86,
  25996. 86, 86, 86, 86, 86, 86, 86, 1,
  25997. 1, 1, 86, 86, 86, 86, 86, 86,
  25998. 86, 86, 86, 86, 86, 86, 86, 86,
  25999. 86, 86, 86, 86, 86, 86, 86, 86,
  26000. 86, 86, 86, 86, 86, 86, 86, 86,
  26001. 86, 86, 86, 1, 1, 1, 1, 1,
  26002. 1, 1, 1, 1, 1, 1, 1, 1,
  26003. 1, 1, 1, 1, 1, 1, 1, 1,
  26004. 1, 1, 1, 1, 1, 1, 1, 1,
  26005. 1, 1, 1, 1, 1, 1, 1, 1,
  26006. 1, 1, 1, 1, 1, 1, 1, 1,
  26007. 1, 1, 1, 1, 1, 1, 1, 1,
  26008. 1, 1, 1, 1, 1, 1, 1, 1,
  26009. 1, 1, 1, 1, 1, 1, 92, 92,
  26010. 92, 92, 92, 92, 92, 92, 92, 92,
  26011. 92, 92, 92, 92, 92, 92, 92, 92,
  26012. 92, 92, 92, 92, 92, 92, 92, 92,
  26013. 92, 92, 92, 92, 93, 94, 94, 94,
  26014. 94, 94, 94, 94, 94, 94, 94, 94,
  26015. 94, 95, 94, 94, 96, 97, 97, 97,
  26016. 98, 1, 4349, 1, 4346, 1, 1, 1,
  26017. 1, 1, 1, 1, 1, 1, 1, 1,
  26018. 1, 1, 1, 1, 1, 1, 1, 1,
  26019. 1, 1, 1, 4346, 1, 4350, 1, 1,
  26020. 1, 4351, 1, 1, 1, 1, 1, 1,
  26021. 1, 1, 1, 1, 1, 1, 1, 1,
  26022. 1, 1, 1, 1, 4350, 4263, 4264, 4263,
  26023. 4263, 4263, 4263, 4263, 4352, 1, 4263, 4263,
  26024. 1, 4263, 4267, 4263, 4263, 4263, 4263, 4263,
  26025. 4263, 4263, 4263, 4263, 4263, 4263, 1, 1,
  26026. 1, 4263, 1, 4263, 1, 4263, 4263, 4263,
  26027. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  26028. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  26029. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 1,
  26030. 1, 1, 4263, 4263, 4263, 4263, 4263, 4263,
  26031. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  26032. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  26033. 4263, 4263, 4263, 4263, 4263, 4263, 4263, 4263,
  26034. 4263, 4263, 4263, 1, 1, 1, 1, 1,
  26035. 1, 1, 1, 1, 1, 1, 1, 1,
  26036. 1, 1, 1, 1, 1, 1, 1, 1,
  26037. 1, 1, 1, 1, 1, 1, 1, 1,
  26038. 1, 1, 1, 1, 1, 1, 1, 1,
  26039. 1, 1, 1, 1, 1, 1, 1, 1,
  26040. 1, 1, 1, 1, 1, 1, 1, 1,
  26041. 1, 1, 1, 1, 1, 1, 1, 1,
  26042. 1, 1, 1, 1, 1, 1, 4269, 4269,
  26043. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  26044. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  26045. 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
  26046. 4269, 4269, 4269, 4269, 4270, 4271, 4271, 4271,
  26047. 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271,
  26048. 4271, 4272, 4271, 4271, 4273, 4274, 4274, 4274,
  26049. 4275, 1, 4154, 108, 4154, 4154, 4154, 4154,
  26050. 4154, 1, 1, 4154, 4154, 1, 4154, 4353,
  26051. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26052. 4154, 4154, 4154, 1, 1, 1, 4154, 1,
  26053. 4154, 1, 4154, 4154, 4154, 4154, 4154, 4154,
  26054. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26055. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26056. 4154, 4154, 4154, 4154, 1, 1, 1, 4154,
  26057. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26058. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26059. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26060. 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154,
  26061. 1, 1, 1, 1, 1, 1, 1, 1,
  26062. 1, 1, 1, 1, 1, 1, 1, 1,
  26063. 1, 1, 1, 1, 1, 1, 1, 1,
  26064. 1, 1, 1, 1, 1, 1, 1, 1,
  26065. 1, 1, 1, 1, 1, 1, 1, 1,
  26066. 1, 1, 1, 1, 1, 1, 1, 1,
  26067. 1, 1, 1, 1, 1, 1, 1, 1,
  26068. 1, 1, 1, 1, 1, 1, 1, 1,
  26069. 1, 1, 1, 4159, 4159, 4159, 4159, 4159,
  26070. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  26071. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  26072. 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159,
  26073. 4159, 4160, 4161, 4161, 4161, 4161, 4161, 4161,
  26074. 4161, 4161, 4161, 4161, 4161, 4161, 4162, 4161,
  26075. 4161, 4163, 4164, 4164, 4164, 4165, 1, 4316,
  26076. 1, 1, 1, 4354, 1, 1, 1, 1,
  26077. 1, 1, 1, 1, 1, 1, 1, 1,
  26078. 1, 1, 1, 1, 1, 1, 4316, 4355,
  26079. 1, 4355, 4355, 4355, 4355, 4355, 4356, 1,
  26080. 4355, 4355, 1, 4355, 1, 4355, 4355, 4355,
  26081. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26082. 1, 1, 1, 4355, 1, 4355, 1, 4355,
  26083. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26084. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26085. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26086. 4355, 1, 1, 1, 4355, 4355, 4355, 4355,
  26087. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26088. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26089. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26090. 4355, 4355, 4355, 4355, 4355, 1, 1, 1,
  26091. 1, 1, 1, 1, 1, 1, 1, 1,
  26092. 1, 1, 1, 1, 1, 1, 1, 1,
  26093. 1, 1, 1, 1, 1, 1, 1, 1,
  26094. 1, 1, 1, 1, 1, 1, 1, 1,
  26095. 1, 1, 1, 1, 1, 1, 1, 1,
  26096. 1, 1, 1, 1, 1, 1, 1, 1,
  26097. 1, 1, 1, 1, 1, 1, 1, 1,
  26098. 1, 1, 1, 1, 1, 1, 1, 1,
  26099. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26100. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26101. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26102. 4357, 4357, 4357, 4357, 4357, 4357, 4358, 4359,
  26103. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26104. 4359, 4359, 4359, 4360, 4359, 4359, 4361, 4362,
  26105. 4362, 4362, 4363, 1, 4364, 1, 4316, 1,
  26106. 1, 1, 1, 1, 1, 1, 1, 1,
  26107. 1, 1, 1, 1, 1, 1, 1, 1,
  26108. 1, 1, 1, 1, 1, 4316, 1, 4310,
  26109. 1, 1, 1, 4311, 1, 1, 1, 1,
  26110. 1, 1, 1, 1, 1, 1, 1, 1,
  26111. 1, 1, 1, 1, 1, 1, 4310, 4355,
  26112. 1, 4355, 4355, 4355, 4355, 4355, 4312, 1,
  26113. 4355, 4355, 4313, 4355, 4316, 4355, 4355, 4355,
  26114. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26115. 4315, 1, 1, 4355, 1, 4355, 1, 4355,
  26116. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26117. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26118. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26119. 4355, 1, 1, 1, 4355, 4355, 4355, 4355,
  26120. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26121. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26122. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26123. 4355, 4355, 4355, 4355, 4355, 1, 1, 1,
  26124. 1, 1, 1, 1, 1, 1, 1, 1,
  26125. 1, 1, 1, 1, 1, 1, 1, 1,
  26126. 1, 1, 1, 1, 1, 1, 1, 1,
  26127. 1, 1, 1, 1, 1, 1, 1, 1,
  26128. 1, 1, 1, 1, 1, 1, 1, 1,
  26129. 1, 1, 1, 1, 1, 1, 1, 1,
  26130. 1, 1, 1, 1, 1, 1, 1, 1,
  26131. 1, 1, 1, 1, 1, 1, 1, 1,
  26132. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26133. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26134. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26135. 4357, 4357, 4357, 4357, 4357, 4357, 4358, 4359,
  26136. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26137. 4359, 4359, 4359, 4360, 4359, 4359, 4361, 4362,
  26138. 4362, 4362, 4363, 1, 4355, 4355, 4355, 4355,
  26139. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26140. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26141. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26142. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26143. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26144. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26145. 4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355,
  26146. 4355, 4355, 4355, 4355, 1, 4357, 4357, 4357,
  26147. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26148. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26149. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26150. 4357, 4357, 4357, 4357, 4357, 1, 4357, 4357,
  26151. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26152. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26153. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26154. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26155. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26156. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26157. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26158. 4357, 4357, 4357, 4357, 4357, 4357, 1, 4357,
  26159. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26160. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26161. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
  26162. 4357, 4357, 4357, 4357, 4357, 4357, 4357, 1,
  26163. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26164. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26165. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26166. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26167. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26168. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26169. 1, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26170. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26171. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26172. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26173. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26174. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26175. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26176. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26177. 4359, 1, 4359, 4359, 4359, 4359, 4359, 4359,
  26178. 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
  26179. 4359, 4359, 1, 4322, 1, 1, 1, 4365,
  26180. 1, 1, 1, 1, 1, 1, 1, 1,
  26181. 1, 1, 1, 1, 1, 1, 1, 1,
  26182. 1, 1, 4322, 4366, 1, 4366, 4366, 4366,
  26183. 4366, 4366, 4367, 1, 4366, 4366, 1, 4366,
  26184. 1, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26185. 4366, 4366, 4366, 4366, 1, 1, 1, 4366,
  26186. 1, 4366, 1, 4366, 4366, 4366, 4366, 4366,
  26187. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26188. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26189. 4366, 4366, 4366, 4366, 4366, 1, 1, 1,
  26190. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26191. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26192. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26193. 4366, 4366, 4366, 4366, 4366, 4366, 4366, 4366,
  26194. 4366, 1, 1, 1, 1, 1, 1, 1,
  26195. 1, 1, 1, 1, 1, 1, 1, 1,
  26196. 1, 1, 1, 1, 1, 1, 1, 1,
  26197. 1, 1, 1, 1, 1, 1, 1, 1,
  26198. 1, 1, 1, 1, 1, 1, 1, 1,
  26199. 1, 1, 1, 1, 1, 1, 1, 1,
  26200. 1, 1, 1, 1, 1, 1, 1, 1,
  26201. 1, 1, 1, 1, 1, 1, 1, 1,
  26202. 1, 1, 1, 1, 4368, 4368, 4368, 4368,
  26203. 4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368,
  26204. 4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368,
  26205. 4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368,
  26206. 4368, 4368, 4369, 4370, 4370, 4370, 4370, 4370,
  26207. 4370, 4370, 4370, 4370, 4370, 4370, 4370, 4371,
  26208. 4370, 4370, 4372, 4373, 4373, 4373, 4374, 1,
  26209. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26210. 4298, 1, 4375, 4375, 4376, 4375, 4375, 4375,
  26211. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26212. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4298,
  26213. 4375, 1, 4375, 4375, 4375, 4375, 4375, 4375,
  26214. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26215. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26216. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26217. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26218. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26219. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26220. 4375, 4375, 4375, 4377, 4375, 4375, 4375, 4375,
  26221. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26222. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26223. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26224. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 1,
  26225. 1, 1, 1, 1, 1, 1, 1, 1,
  26226. 1, 1, 1, 1, 1, 1, 1, 1,
  26227. 1, 1, 1, 1, 1, 1, 1, 1,
  26228. 1, 1, 1, 1, 1, 1, 1, 1,
  26229. 1, 1, 1, 1, 1, 1, 1, 1,
  26230. 1, 1, 1, 1, 1, 1, 1, 1,
  26231. 1, 1, 1, 1, 1, 1, 1, 1,
  26232. 1, 1, 1, 1, 1, 1, 1, 1,
  26233. 1, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26234. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26235. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26236. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4379,
  26237. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26238. 4380, 4380, 4380, 4380, 4381, 4380, 4380, 4382,
  26239. 4383, 4383, 4383, 4384, 1, 4375, 4375, 4375,
  26240. 4375, 4375, 4375, 4375, 4375, 4375, 1, 4375,
  26241. 4375, 4385, 4375, 4375, 4375, 4375, 4375, 4375,
  26242. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26243. 4375, 4375, 4375, 4375, 4375, 4375, 4386, 4375,
  26244. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26245. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26246. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26247. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26248. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26249. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26250. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26251. 4377, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26252. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26253. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26254. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26255. 4375, 4375, 4375, 4375, 1, 1, 1, 1,
  26256. 1, 1, 1, 1, 1, 1, 1, 1,
  26257. 1, 1, 1, 1, 1, 1, 1, 1,
  26258. 1, 1, 1, 1, 1, 1, 1, 1,
  26259. 1, 1, 1, 1, 1, 1, 1, 1,
  26260. 1, 1, 1, 1, 1, 1, 1, 1,
  26261. 1, 1, 1, 1, 1, 1, 1, 1,
  26262. 1, 1, 1, 1, 1, 1, 1, 1,
  26263. 1, 1, 1, 1, 1, 1, 4378, 4378,
  26264. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26265. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26266. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26267. 4378, 4378, 4378, 4378, 4379, 4380, 4380, 4380,
  26268. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26269. 4380, 4381, 4380, 4380, 4382, 4383, 4383, 4383,
  26270. 4384, 1, 4387, 1, 4375, 1, 1, 1,
  26271. 1, 1, 1, 1, 1, 1, 1, 1,
  26272. 1, 1, 1, 1, 1, 1, 1, 1,
  26273. 1, 1, 1, 4375, 1, 4388, 1, 1,
  26274. 1, 4389, 1, 1, 1, 1, 1, 1,
  26275. 1, 1, 1, 1, 1, 1, 1, 1,
  26276. 1, 1, 1, 1, 4388, 4386, 4298, 4386,
  26277. 4386, 4386, 4386, 4386, 4390, 1, 4386, 4386,
  26278. 4313, 4386, 4300, 4386, 4386, 4386, 4386, 4386,
  26279. 4386, 4386, 4386, 4386, 4386, 4386, 4315, 1,
  26280. 1, 4386, 1, 4386, 1, 4386, 4386, 4386,
  26281. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26282. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26283. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 1,
  26284. 1, 1, 4386, 4386, 4386, 4386, 4386, 4386,
  26285. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26286. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26287. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26288. 4386, 4386, 4386, 1, 1, 1, 1, 1,
  26289. 1, 1, 1, 1, 1, 1, 1, 1,
  26290. 1, 1, 1, 1, 1, 1, 1, 1,
  26291. 1, 1, 1, 1, 1, 1, 1, 1,
  26292. 1, 1, 1, 1, 1, 1, 1, 1,
  26293. 1, 1, 1, 1, 1, 1, 1, 1,
  26294. 1, 1, 1, 1, 1, 1, 1, 1,
  26295. 1, 1, 1, 1, 1, 1, 1, 1,
  26296. 1, 1, 1, 1, 1, 1, 4391, 4391,
  26297. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26298. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26299. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26300. 4391, 4391, 4391, 4391, 4392, 4393, 4393, 4393,
  26301. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26302. 4393, 4394, 4393, 4393, 4395, 4396, 4396, 4396,
  26303. 4397, 1, 4388, 1, 1, 1, 4389, 1,
  26304. 1, 1, 1, 1, 1, 1, 1, 1,
  26305. 1, 1, 1, 1, 1, 1, 1, 1,
  26306. 1, 4388, 1, 1, 1, 1, 1, 1,
  26307. 1, 4390, 1, 1, 1, 4313, 1, 1,
  26308. 1, 1, 1, 1, 1, 1, 1, 1,
  26309. 1, 1, 1, 4315, 1, 4398, 1, 4388,
  26310. 1, 1, 1, 1, 1, 1, 1, 1,
  26311. 1, 1, 1, 1, 1, 1, 1, 1,
  26312. 1, 1, 1, 1, 1, 1, 4388, 1,
  26313. 4399, 1, 1, 1, 4400, 1, 1, 1,
  26314. 1, 1, 1, 1, 1, 1, 1, 1,
  26315. 1, 1, 1, 1, 1, 1, 1, 4399,
  26316. 1, 1, 1, 1, 1, 1, 1, 4401,
  26317. 1, 1, 1, 4321, 1, 1, 1, 1,
  26318. 1, 1, 1, 1, 1, 1, 1, 1,
  26319. 1, 4323, 1, 4386, 4298, 4386, 4386, 4386,
  26320. 4386, 4386, 1, 1, 4386, 4386, 1, 4386,
  26321. 4300, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26322. 4386, 4386, 4386, 4386, 1, 1, 1, 4386,
  26323. 1, 4386, 1, 4386, 4386, 4386, 4386, 4386,
  26324. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26325. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26326. 4386, 4386, 4386, 4386, 4386, 1, 1, 1,
  26327. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26328. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26329. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26330. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26331. 4386, 1, 1, 1, 1, 1, 1, 1,
  26332. 1, 1, 1, 1, 1, 1, 1, 1,
  26333. 1, 1, 1, 1, 1, 1, 1, 1,
  26334. 1, 1, 1, 1, 1, 1, 1, 1,
  26335. 1, 1, 1, 1, 1, 1, 1, 1,
  26336. 1, 1, 1, 1, 1, 1, 1, 1,
  26337. 1, 1, 1, 1, 1, 1, 1, 1,
  26338. 1, 1, 1, 1, 1, 1, 1, 1,
  26339. 1, 1, 1, 1, 4391, 4391, 4391, 4391,
  26340. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26341. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26342. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26343. 4391, 4391, 4392, 4393, 4393, 4393, 4393, 4393,
  26344. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4394,
  26345. 4393, 4393, 4395, 4396, 4396, 4396, 4397, 1,
  26346. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26347. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26348. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26349. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26350. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26351. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26352. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26353. 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
  26354. 1, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26355. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26356. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26357. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26358. 4391, 1, 4391, 4391, 4391, 4391, 4391, 4391,
  26359. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26360. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26361. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26362. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26363. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26364. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26365. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26366. 4391, 4391, 1, 4391, 4391, 4391, 4391, 4391,
  26367. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26368. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26369. 4391, 4391, 4391, 4391, 4391, 4391, 4391, 4391,
  26370. 4391, 4391, 4391, 1, 4393, 4393, 4393, 4393,
  26371. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26372. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26373. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26374. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26375. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26376. 4393, 4393, 4393, 4393, 1, 4393, 4393, 4393,
  26377. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26378. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26379. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26380. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26381. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26382. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26383. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26384. 4393, 4393, 4393, 4393, 4393, 1, 4393, 4393,
  26385. 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
  26386. 4393, 4393, 4393, 4393, 4393, 4393, 1, 4375,
  26387. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26388. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26389. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26390. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26391. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26392. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26393. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26394. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26395. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26396. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26397. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26398. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26399. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26400. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26401. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26402. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 1,
  26403. 1, 1, 1, 1, 1, 1, 1, 1,
  26404. 1, 1, 1, 1, 1, 1, 1, 1,
  26405. 1, 1, 1, 1, 1, 1, 1, 1,
  26406. 1, 1, 1, 1, 1, 1, 1, 1,
  26407. 1, 1, 1, 1, 1, 1, 1, 1,
  26408. 1, 1, 1, 1, 1, 1, 1, 1,
  26409. 1, 1, 1, 1, 1, 1, 1, 1,
  26410. 1, 1, 1, 1, 1, 1, 1, 1,
  26411. 1, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26412. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26413. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26414. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4379,
  26415. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26416. 4380, 4380, 4380, 4380, 4381, 4380, 4380, 4382,
  26417. 4383, 4383, 4383, 4384, 1, 4375, 4375, 4375,
  26418. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26419. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26420. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26421. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26422. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26423. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26424. 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
  26425. 4375, 4375, 4375, 4375, 4375, 1, 4378, 4378,
  26426. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26427. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26428. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26429. 4378, 4378, 4378, 4378, 4378, 4378, 1, 4378,
  26430. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26431. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26432. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26433. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26434. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26435. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26436. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26437. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 1,
  26438. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26439. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26440. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26441. 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
  26442. 1, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26443. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26444. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26445. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26446. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26447. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26448. 4380, 1, 4380, 4380, 4380, 4380, 4380, 4380,
  26449. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26450. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26451. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26452. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26453. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26454. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26455. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26456. 4380, 4380, 1, 4380, 4380, 4380, 4380, 4380,
  26457. 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
  26458. 4380, 4380, 4380, 1, 4402, 1, 4298, 1,
  26459. 1, 1, 1, 1, 1, 1, 1, 1,
  26460. 1, 1, 1, 1, 1, 1, 1, 1,
  26461. 1, 1, 1, 1, 1, 4298, 1, 4316,
  26462. 1, 1, 1, 4354, 1, 1, 1, 1,
  26463. 1, 1, 1, 1, 1, 1, 1, 1,
  26464. 1, 1, 1, 1, 1, 1, 4316, 4297,
  26465. 4298, 4297, 4297, 4297, 4297, 4297, 4356, 1,
  26466. 4297, 4297, 1, 4297, 4300, 4297, 4297, 4297,
  26467. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26468. 1, 1, 1, 4297, 1, 4297, 1, 4297,
  26469. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26470. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26471. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26472. 4297, 1, 1, 1, 4297, 4297, 4297, 4297,
  26473. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26474. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26475. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26476. 4297, 4297, 4297, 4297, 4297, 1, 1, 1,
  26477. 1, 1, 1, 1, 1, 1, 1, 1,
  26478. 1, 1, 1, 1, 1, 1, 1, 1,
  26479. 1, 1, 1, 1, 1, 1, 1, 1,
  26480. 1, 1, 1, 1, 1, 1, 1, 1,
  26481. 1, 1, 1, 1, 1, 1, 1, 1,
  26482. 1, 1, 1, 1, 1, 1, 1, 1,
  26483. 1, 1, 1, 1, 1, 1, 1, 1,
  26484. 1, 1, 1, 1, 1, 1, 1, 1,
  26485. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26486. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26487. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26488. 4302, 4302, 4302, 4302, 4302, 4302, 4303, 4304,
  26489. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26490. 4304, 4304, 4304, 4305, 4304, 4304, 4306, 4307,
  26491. 4307, 4307, 4308, 1, 4297, 4297, 4297, 4297,
  26492. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26493. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26494. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26495. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26496. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26497. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26498. 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
  26499. 4297, 4297, 4297, 4297, 1, 4302, 4302, 4302,
  26500. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26501. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26502. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26503. 4302, 4302, 4302, 4302, 4302, 1, 4302, 4302,
  26504. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26505. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26506. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26507. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26508. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26509. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26510. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26511. 4302, 4302, 4302, 4302, 4302, 4302, 1, 4302,
  26512. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26513. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26514. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 4302,
  26515. 4302, 4302, 4302, 4302, 4302, 4302, 4302, 1,
  26516. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26517. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26518. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26519. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26520. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26521. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26522. 1, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26523. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26524. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26525. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26526. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26527. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26528. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26529. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26530. 4304, 1, 4304, 4304, 4304, 4304, 4304, 4304,
  26531. 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
  26532. 4304, 4304, 1, 4403, 1, 1, 1, 4404,
  26533. 1, 1, 1, 1, 1, 1, 1, 1,
  26534. 1, 1, 1, 1, 1, 1, 1, 1,
  26535. 1, 1, 4403, 4405, 4406, 4405, 4405, 4405,
  26536. 4405, 4405, 4407, 1, 4405, 4405, 1, 4405,
  26537. 4408, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26538. 4405, 4405, 4405, 4405, 1, 1, 1, 4405,
  26539. 1, 4405, 1, 4405, 4405, 4405, 4405, 4405,
  26540. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26541. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26542. 4405, 4405, 4405, 4405, 4405, 4409, 1, 1,
  26543. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26544. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26545. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26546. 4405, 4405, 4405, 4405, 4405, 4405, 4405, 4405,
  26547. 4405, 1, 1, 1, 1, 1, 1, 1,
  26548. 1, 1, 1, 1, 1, 1, 1, 1,
  26549. 1, 1, 1, 1, 1, 1, 1, 1,
  26550. 1, 1, 1, 1, 1, 1, 1, 1,
  26551. 1, 1, 1, 1, 1, 1, 1, 1,
  26552. 1, 1, 1, 1, 1, 1, 1, 1,
  26553. 1, 1, 1, 1, 1, 1, 1, 1,
  26554. 1, 1, 1, 1, 1, 1, 1, 1,
  26555. 1, 1, 1, 1, 4410, 4410, 4410, 4410,
  26556. 4410, 4410, 4410, 4410, 4410, 4410, 4410, 4410,
  26557. 4410, 4410, 4410, 4410, 4410, 4410, 4410, 4410,
  26558. 4410, 4410, 4410, 4410, 4410, 4410, 4410, 4410,
  26559. 4410, 4410, 4411, 4412, 4412, 4412, 4412, 4412,
  26560. 4412, 4412, 4412, 4412, 4412, 4412, 4412, 4413,
  26561. 4412, 4412, 4414, 4415, 4415, 4415, 4416, 1,
  26562. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26563. 4301, 1, 4301, 4301, 4417, 4301, 4301, 4301,
  26564. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26565. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26566. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26567. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26568. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26569. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26570. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26571. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26572. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26573. 4301, 4301, 1, 4418, 4388, 4301, 4301, 4301,
  26574. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26575. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26576. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26577. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 1,
  26578. 1, 1, 1, 1, 1, 1, 1, 1,
  26579. 1, 1, 1, 1, 1, 1, 1, 1,
  26580. 1, 1, 1, 1, 1, 1, 1, 1,
  26581. 1, 1, 1, 1, 1, 1, 1, 1,
  26582. 1, 1, 1, 1, 1, 1, 1, 1,
  26583. 1, 1, 1, 1, 1, 1, 1, 1,
  26584. 1, 1, 1, 1, 1, 1, 1, 1,
  26585. 1, 1, 1, 1, 1, 1, 1, 1,
  26586. 1, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26587. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26588. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26589. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4420,
  26590. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26591. 4421, 4421, 4421, 4421, 4422, 4421, 4421, 4423,
  26592. 4424, 4424, 4424, 4425, 1, 4426, 1, 4301,
  26593. 1, 1, 1, 1, 1, 1, 1, 1,
  26594. 1, 1, 1, 1, 1, 1, 1, 1,
  26595. 1, 1, 1, 1, 1, 1, 4301, 1,
  26596. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26597. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26598. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26599. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26600. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26601. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26602. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26603. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26604. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26605. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26606. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26607. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26608. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26609. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26610. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26611. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26612. 1, 1, 1, 1, 1, 1, 1, 1,
  26613. 1, 1, 1, 1, 1, 1, 1, 1,
  26614. 1, 1, 1, 1, 1, 1, 1, 1,
  26615. 1, 1, 1, 1, 1, 1, 1, 1,
  26616. 1, 1, 1, 1, 1, 1, 1, 1,
  26617. 1, 1, 1, 1, 1, 1, 1, 1,
  26618. 1, 1, 1, 1, 1, 1, 1, 1,
  26619. 1, 1, 1, 1, 1, 1, 1, 1,
  26620. 1, 1, 4419, 4419, 4419, 4419, 4419, 4419,
  26621. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26622. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26623. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26624. 4420, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26625. 4421, 4421, 4421, 4421, 4421, 4422, 4421, 4421,
  26626. 4423, 4424, 4424, 4424, 4425, 1, 4301, 4301,
  26627. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26628. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26629. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26630. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26631. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26632. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26633. 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
  26634. 4301, 4301, 4301, 4301, 4301, 4301, 1, 4419,
  26635. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26636. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26637. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26638. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 1,
  26639. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26640. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26641. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26642. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26643. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26644. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26645. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26646. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26647. 1, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26648. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26649. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26650. 4419, 4419, 4419, 4419, 4419, 4419, 4419, 4419,
  26651. 4419, 1, 4421, 4421, 4421, 4421, 4421, 4421,
  26652. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26653. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26654. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26655. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26656. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26657. 4421, 4421, 1, 4421, 4421, 4421, 4421, 4421,
  26658. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26659. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26660. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26661. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26662. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26663. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26664. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26665. 4421, 4421, 4421, 1, 4421, 4421, 4421, 4421,
  26666. 4421, 4421, 4421, 4421, 4421, 4421, 4421, 4421,
  26667. 4421, 4421, 4421, 4421, 1, 4427, 1, 1,
  26668. 1, 4428, 1, 1, 1, 1, 1, 1,
  26669. 1, 1, 1, 1, 1, 1, 1, 1,
  26670. 1, 1, 1, 1, 4427, 4429, 4430, 4429,
  26671. 4429, 4429, 4429, 4429, 4431, 1, 4429, 4429,
  26672. 1, 4429, 24, 4429, 4429, 4429, 4429, 4429,
  26673. 4429, 4429, 4429, 4429, 4429, 4429, 25, 1,
  26674. 26, 4429, 1, 4429, 24, 4429, 4429, 4429,
  26675. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26676. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26677. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 1,
  26678. 1, 1, 4429, 4429, 4429, 4429, 4429, 4429,
  26679. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26680. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26681. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26682. 4429, 4429, 4429, 1, 1, 1, 1, 1,
  26683. 1, 1, 1, 1, 1, 1, 1, 1,
  26684. 1, 1, 1, 1, 1, 1, 1, 1,
  26685. 1, 1, 1, 1, 1, 1, 1, 1,
  26686. 1, 1, 1, 1, 1, 1, 1, 1,
  26687. 1, 1, 1, 1, 1, 1, 1, 1,
  26688. 1, 1, 1, 1, 1, 1, 1, 1,
  26689. 1, 1, 1, 1, 1, 1, 1, 1,
  26690. 1, 1, 1, 1, 1, 1, 4432, 4432,
  26691. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26692. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26693. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26694. 4432, 4432, 4432, 4432, 4433, 4434, 4434, 4434,
  26695. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  26696. 4434, 4435, 4434, 4434, 4436, 4437, 4437, 4437,
  26697. 4438, 1, 4439, 1, 1, 1, 4440, 1,
  26698. 1, 1, 1, 1, 1, 1, 1, 1,
  26699. 1, 1, 1, 1, 1, 1, 1, 1,
  26700. 1, 4439, 4429, 4430, 4429, 4429, 4429, 4429,
  26701. 4429, 4441, 1, 4429, 4429, 1, 4429, 1,
  26702. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26703. 4429, 4429, 4429, 1, 1, 8, 4429, 1,
  26704. 4429, 1, 4429, 4429, 4429, 4429, 4429, 4429,
  26705. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26706. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26707. 4429, 4429, 4429, 4429, 1, 1, 1, 4429,
  26708. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26709. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26710. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26711. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  26712. 1, 1, 1, 1, 1, 1, 1, 1,
  26713. 1, 1, 1, 1, 1, 1, 1, 1,
  26714. 1, 1, 1, 1, 1, 1, 1, 1,
  26715. 1, 1, 1, 1, 1, 1, 1, 1,
  26716. 1, 1, 1, 1, 1, 1, 1, 1,
  26717. 1, 1, 1, 1, 1, 1, 1, 1,
  26718. 1, 1, 1, 1, 1, 1, 1, 1,
  26719. 1, 1, 1, 1, 1, 1, 1, 1,
  26720. 1, 1, 1, 4432, 4432, 4432, 4432, 4432,
  26721. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26722. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26723. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  26724. 4432, 4433, 4434, 4434, 4434, 4434, 4434, 4434,
  26725. 4434, 4434, 4434, 4434, 4434, 4434, 4435, 4434,
  26726. 4434, 4436, 4437, 4437, 4437, 4438, 1, 4442,
  26727. 1, 4439, 1, 1, 1, 1, 1, 1,
  26728. 1, 1, 1, 1, 1, 1, 1, 1,
  26729. 1, 1, 1, 1, 1, 1, 1, 1,
  26730. 4439, 1, 4443, 1, 4444, 1, 1, 1,
  26731. 1, 1, 1, 1, 1, 1, 1, 1,
  26732. 1, 1, 1, 1, 1, 1, 1, 1,
  26733. 1, 1, 1, 4444, 1, 4445, 1, 1,
  26734. 1, 4446, 1, 1, 1, 1, 1, 1,
  26735. 1, 1, 1, 1, 1, 1, 1, 1,
  26736. 1, 1, 1, 1, 4445, 3603, 3604, 3603,
  26737. 3603, 3603, 3603, 3603, 4447, 1, 3603, 3603,
  26738. 1, 3603, 3606, 3603, 3603, 3603, 3603, 3603,
  26739. 3603, 3603, 3603, 3603, 3603, 3603, 25, 1,
  26740. 26, 3603, 1, 3603, 24, 3603, 3603, 3603,
  26741. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  26742. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  26743. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3607,
  26744. 1, 1, 3603, 3603, 3603, 3603, 3603, 3603,
  26745. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  26746. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  26747. 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
  26748. 3603, 3603, 3603, 1, 1, 1, 1, 1,
  26749. 1, 1, 1, 1, 1, 1, 1, 1,
  26750. 1, 1, 1, 1, 1, 1, 1, 1,
  26751. 1, 1, 1, 1, 1, 1, 1, 1,
  26752. 1, 1, 1, 1, 1, 1, 1, 1,
  26753. 1, 1, 1, 1, 1, 1, 1, 1,
  26754. 1, 1, 1, 1, 1, 1, 1, 1,
  26755. 1, 1, 1, 1, 1, 1, 1, 1,
  26756. 1, 1, 1, 1, 1, 1, 3608, 3608,
  26757. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  26758. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  26759. 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608,
  26760. 3608, 3608, 3608, 3608, 3609, 3610, 3610, 3610,
  26761. 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
  26762. 3610, 3611, 3610, 3610, 3612, 3613, 3613, 3613,
  26763. 3614, 1, 4448, 1, 1, 1, 4449, 1,
  26764. 1, 1, 1, 1, 1, 1, 1, 1,
  26765. 1, 1, 1, 1, 1, 1, 1, 1,
  26766. 1, 4448, 3617, 3618, 3617, 3617, 3617, 3617,
  26767. 3617, 4450, 1, 3617, 3617, 1, 3617, 4451,
  26768. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26769. 3617, 3617, 3617, 1, 1, 8, 3617, 1,
  26770. 3617, 1, 3617, 3617, 3617, 3617, 3617, 3617,
  26771. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26772. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26773. 3617, 3617, 3617, 3617, 3621, 1, 1, 3617,
  26774. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26775. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26776. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26777. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  26778. 1, 1, 1, 1, 1, 1, 1, 1,
  26779. 1, 1, 1, 1, 1, 1, 1, 1,
  26780. 1, 1, 1, 1, 1, 1, 1, 1,
  26781. 1, 1, 1, 1, 1, 1, 1, 1,
  26782. 1, 1, 1, 1, 1, 1, 1, 1,
  26783. 1, 1, 1, 1, 1, 1, 1, 1,
  26784. 1, 1, 1, 1, 1, 1, 1, 1,
  26785. 1, 1, 1, 1, 1, 1, 1, 1,
  26786. 1, 1, 1, 3622, 3622, 3622, 3622, 3622,
  26787. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  26788. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  26789. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  26790. 3622, 3623, 3624, 3624, 3624, 3624, 3624, 3624,
  26791. 3624, 3624, 3624, 3624, 3624, 3624, 3625, 3624,
  26792. 3624, 3626, 3627, 3627, 3627, 3628, 1, 4452,
  26793. 1, 4448, 1, 1, 1, 1, 1, 1,
  26794. 1, 1, 1, 1, 1, 1, 1, 1,
  26795. 1, 1, 1, 1, 1, 1, 1, 1,
  26796. 4448, 1, 4453, 1, 1, 1, 4454, 1,
  26797. 1, 1, 1, 1, 1, 1, 1, 1,
  26798. 1, 1, 1, 1, 1, 1, 1, 1,
  26799. 1, 4453, 3697, 3698, 3697, 3697, 3697, 3697,
  26800. 3697, 4455, 1, 3697, 3697, 1, 3697, 4456,
  26801. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26802. 3697, 3697, 3697, 1, 1, 83, 3697, 1,
  26803. 3697, 1, 3697, 3697, 3697, 3697, 3697, 3697,
  26804. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26805. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26806. 3697, 3697, 3697, 3697, 3701, 1, 1, 3697,
  26807. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26808. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26809. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26810. 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
  26811. 1, 1, 1, 1, 1, 1, 1, 1,
  26812. 1, 1, 1, 1, 1, 1, 1, 1,
  26813. 1, 1, 1, 1, 1, 1, 1, 1,
  26814. 1, 1, 1, 1, 1, 1, 1, 1,
  26815. 1, 1, 1, 1, 1, 1, 1, 1,
  26816. 1, 1, 1, 1, 1, 1, 1, 1,
  26817. 1, 1, 1, 1, 1, 1, 1, 1,
  26818. 1, 1, 1, 1, 1, 1, 1, 1,
  26819. 1, 1, 1, 3702, 3702, 3702, 3702, 3702,
  26820. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  26821. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  26822. 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
  26823. 3702, 3703, 3704, 3704, 3704, 3704, 3704, 3704,
  26824. 3704, 3704, 3704, 3704, 3704, 3704, 3705, 3704,
  26825. 3704, 3706, 3707, 3707, 3707, 3708, 1, 4457,
  26826. 4458, 4457, 4457, 4457, 4457, 4457, 1, 1,
  26827. 4457, 4457, 1, 4457, 4451, 4457, 4457, 4457,
  26828. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26829. 1, 1, 1, 4457, 1, 4457, 1, 4457,
  26830. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26831. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26832. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26833. 4457, 1, 1, 1, 4457, 4457, 4457, 4457,
  26834. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26835. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26836. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26837. 4457, 4457, 4457, 4457, 4457, 1, 1, 1,
  26838. 1, 1, 1, 1, 1, 1, 1, 1,
  26839. 1, 1, 1, 1, 1, 1, 1, 1,
  26840. 1, 1, 1, 1, 1, 1, 1, 1,
  26841. 1, 1, 1, 1, 1, 1, 1, 1,
  26842. 1, 1, 1, 1, 1, 1, 1, 1,
  26843. 1, 1, 1, 1, 1, 1, 1, 1,
  26844. 1, 1, 1, 1, 1, 1, 1, 1,
  26845. 1, 1, 1, 1, 1, 1, 1, 1,
  26846. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  26847. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  26848. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  26849. 4459, 4459, 4459, 4459, 4459, 4459, 4460, 4461,
  26850. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  26851. 4461, 4461, 4461, 4462, 4461, 4461, 4463, 4464,
  26852. 4464, 4464, 4465, 1, 4466, 4466, 4466, 4466,
  26853. 4466, 4466, 4466, 4466, 4458, 1, 4466, 4466,
  26854. 4467, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26855. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26856. 4466, 4466, 4466, 4458, 4466, 1, 4466, 4466,
  26857. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26858. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26859. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26860. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26861. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26862. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26863. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4468,
  26864. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26865. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26866. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26867. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26868. 4466, 4466, 4466, 1, 1, 1, 1, 1,
  26869. 1, 1, 1, 1, 1, 1, 1, 1,
  26870. 1, 1, 1, 1, 1, 1, 1, 1,
  26871. 1, 1, 1, 1, 1, 1, 1, 1,
  26872. 1, 1, 1, 1, 1, 1, 1, 1,
  26873. 1, 1, 1, 1, 1, 1, 1, 1,
  26874. 1, 1, 1, 1, 1, 1, 1, 1,
  26875. 1, 1, 1, 1, 1, 1, 1, 1,
  26876. 1, 1, 1, 1, 1, 4469, 4469, 4469,
  26877. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26878. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26879. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26880. 4469, 4469, 4469, 4470, 4471, 4471, 4471, 4471,
  26881. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26882. 4472, 4471, 4471, 4473, 4474, 4474, 4474, 4475,
  26883. 1, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26884. 4466, 4466, 1, 4466, 4466, 4476, 4466, 4466,
  26885. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26886. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26887. 4466, 4466, 4457, 4466, 4466, 4466, 4466, 4466,
  26888. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26889. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26890. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26891. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26892. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26893. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26894. 4466, 4466, 4466, 4466, 4468, 4466, 4466, 4466,
  26895. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26896. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26897. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26898. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26899. 1, 1, 1, 1, 1, 1, 1, 1,
  26900. 1, 1, 1, 1, 1, 1, 1, 1,
  26901. 1, 1, 1, 1, 1, 1, 1, 1,
  26902. 1, 1, 1, 1, 1, 1, 1, 1,
  26903. 1, 1, 1, 1, 1, 1, 1, 1,
  26904. 1, 1, 1, 1, 1, 1, 1, 1,
  26905. 1, 1, 1, 1, 1, 1, 1, 1,
  26906. 1, 1, 1, 1, 1, 1, 1, 1,
  26907. 1, 1, 4469, 4469, 4469, 4469, 4469, 4469,
  26908. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26909. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26910. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26911. 4470, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26912. 4471, 4471, 4471, 4471, 4471, 4472, 4471, 4471,
  26913. 4473, 4474, 4474, 4474, 4475, 1, 4477, 1,
  26914. 4466, 1, 1, 1, 1, 1, 1, 1,
  26915. 1, 1, 1, 1, 1, 1, 1, 1,
  26916. 1, 1, 1, 1, 1, 1, 1, 4466,
  26917. 1, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26918. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26919. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26920. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26921. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26922. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26923. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26924. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26925. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26926. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26927. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26928. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26929. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26930. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26931. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26932. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26933. 4466, 1, 1, 1, 1, 1, 1, 1,
  26934. 1, 1, 1, 1, 1, 1, 1, 1,
  26935. 1, 1, 1, 1, 1, 1, 1, 1,
  26936. 1, 1, 1, 1, 1, 1, 1, 1,
  26937. 1, 1, 1, 1, 1, 1, 1, 1,
  26938. 1, 1, 1, 1, 1, 1, 1, 1,
  26939. 1, 1, 1, 1, 1, 1, 1, 1,
  26940. 1, 1, 1, 1, 1, 1, 1, 1,
  26941. 1, 1, 1, 4469, 4469, 4469, 4469, 4469,
  26942. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26943. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26944. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26945. 4469, 4470, 4471, 4471, 4471, 4471, 4471, 4471,
  26946. 4471, 4471, 4471, 4471, 4471, 4471, 4472, 4471,
  26947. 4471, 4473, 4474, 4474, 4474, 4475, 1, 4466,
  26948. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26949. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26950. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26951. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26952. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26953. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26954. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
  26955. 4466, 4466, 4466, 4466, 4466, 4466, 4466, 1,
  26956. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26957. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26958. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26959. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26960. 1, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26961. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26962. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26963. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26964. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26965. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26966. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26967. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26968. 4469, 1, 4469, 4469, 4469, 4469, 4469, 4469,
  26969. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26970. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26971. 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469,
  26972. 4469, 4469, 1, 4471, 4471, 4471, 4471, 4471,
  26973. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26974. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26975. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26976. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26977. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26978. 4471, 4471, 4471, 1, 4471, 4471, 4471, 4471,
  26979. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26980. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26981. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26982. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26983. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26984. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26985. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26986. 4471, 4471, 4471, 4471, 1, 4471, 4471, 4471,
  26987. 4471, 4471, 4471, 4471, 4471, 4471, 4471, 4471,
  26988. 4471, 4471, 4471, 4471, 4471, 1, 4478, 1,
  26989. 4458, 1, 1, 1, 1, 1, 1, 1,
  26990. 1, 1, 1, 1, 1, 1, 1, 1,
  26991. 1, 1, 1, 1, 1, 1, 1, 4458,
  26992. 1, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26993. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26994. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26995. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26996. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26997. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26998. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  26999. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  27000. 4457, 1, 4459, 4459, 4459, 4459, 4459, 4459,
  27001. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27002. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27003. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27004. 4459, 4459, 1, 4459, 4459, 4459, 4459, 4459,
  27005. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27006. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27007. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27008. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27009. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27010. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27011. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27012. 4459, 4459, 4459, 1, 4459, 4459, 4459, 4459,
  27013. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27014. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27015. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  27016. 4459, 4459, 4459, 4459, 1, 4461, 4461, 4461,
  27017. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27018. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27019. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27020. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27021. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27022. 4461, 4461, 4461, 4461, 4461, 1, 4461, 4461,
  27023. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27024. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27025. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27026. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27027. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27028. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27029. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27030. 4461, 4461, 4461, 4461, 4461, 4461, 1, 4461,
  27031. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  27032. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 1,
  27033. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27034. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27035. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27036. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27037. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27038. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27039. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27040. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  27041. 1, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27042. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27043. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27044. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27045. 4432, 1, 4432, 4432, 4432, 4432, 4432, 4432,
  27046. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27047. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27048. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27049. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27050. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27051. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27052. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27053. 4432, 4432, 1, 4432, 4432, 4432, 4432, 4432,
  27054. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27055. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27056. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  27057. 4432, 4432, 4432, 1, 4434, 4434, 4434, 4434,
  27058. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27059. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27060. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27061. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27062. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27063. 4434, 4434, 4434, 4434, 1, 4434, 4434, 4434,
  27064. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27065. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27066. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27067. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27068. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27069. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27070. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27071. 4434, 4434, 4434, 4434, 4434, 1, 4434, 4434,
  27072. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  27073. 4434, 4434, 4434, 4434, 4434, 4434, 1, 4479,
  27074. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27075. 1, 4479, 4479, 4480, 4479, 4479, 4479, 4479,
  27076. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27077. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27078. 4481, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27079. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27080. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27081. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27082. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27083. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27084. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27085. 4479, 4479, 4482, 4479, 4479, 4479, 4479, 4479,
  27086. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27087. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27088. 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
  27089. 4479, 4479, 4479, 4479, 4479, 4479, 1, 1,
  27090. 1, 1, 1, 1, 1, 1, 1, 1,
  27091. 1, 1, 1, 1, 1, 1, 1, 1,
  27092. 1, 1, 1, 1, 1, 1, 1, 1,
  27093. 1, 1, 1, 1, 1, 1, 1, 1,
  27094. 1, 1, 1, 1, 1, 1, 1, 1,
  27095. 1, 1, 1, 1, 1, 1, 1, 1,
  27096. 1, 1, 1, 1, 1, 1, 1, 1,
  27097. 1, 1, 1, 1, 1, 1, 1, 1,
  27098. 4483, 4483, 4483, 4483, 4483, 4483, 4483, 4483,
  27099. 4483, 4483, 4483, 4483, 4483, 4483, 4483, 4483,
  27100. 4483, 4483, 4483, 4483, 4483, 4483, 4483, 4483,
  27101. 4483, 4483, 4483, 4483, 4483, 4483, 4484, 4485,
  27102. 4485, 4485, 4485, 4485, 4485, 4485, 4485, 4485,
  27103. 4485, 4485, 4485, 4486, 4485, 4485, 4487, 4488,
  27104. 4488, 4488, 4489, 1, 4490, 4490, 4490, 4490,
  27105. 4490, 4490, 4490, 4490, 4490, 1, 4490, 4490,
  27106. 4491, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27107. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27108. 4490, 4490, 4490, 4490, 4490, 4492, 4490, 4490,
  27109. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27110. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27111. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27112. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27113. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27114. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27115. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4493,
  27116. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27117. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27118. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27119. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27120. 4490, 4490, 4490, 1, 1, 1, 1, 1,
  27121. 1, 1, 1, 1, 1, 1, 1, 1,
  27122. 1, 1, 1, 1, 1, 1, 1, 1,
  27123. 1, 1, 1, 1, 1, 1, 1, 1,
  27124. 1, 1, 1, 1, 1, 1, 1, 1,
  27125. 1, 1, 1, 1, 1, 1, 1, 1,
  27126. 1, 1, 1, 1, 1, 1, 1, 1,
  27127. 1, 1, 1, 1, 1, 1, 1, 1,
  27128. 1, 1, 1, 1, 1, 4494, 4494, 4494,
  27129. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27130. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27131. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27132. 4494, 4494, 4494, 4495, 4496, 4496, 4496, 4496,
  27133. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27134. 4497, 4496, 4496, 4498, 4499, 4499, 4499, 4500,
  27135. 1, 4501, 1, 4490, 1, 1, 1, 1,
  27136. 1, 1, 1, 1, 1, 1, 1, 1,
  27137. 1, 1, 1, 1, 1, 1, 1, 1,
  27138. 1, 1, 4490, 1, 4490, 4490, 4490, 4490,
  27139. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27140. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27141. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27142. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27143. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27144. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27145. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27146. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27147. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27148. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27149. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27150. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27151. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27152. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27153. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27154. 4490, 4490, 4490, 4490, 1, 1, 1, 1,
  27155. 1, 1, 1, 1, 1, 1, 1, 1,
  27156. 1, 1, 1, 1, 1, 1, 1, 1,
  27157. 1, 1, 1, 1, 1, 1, 1, 1,
  27158. 1, 1, 1, 1, 1, 1, 1, 1,
  27159. 1, 1, 1, 1, 1, 1, 1, 1,
  27160. 1, 1, 1, 1, 1, 1, 1, 1,
  27161. 1, 1, 1, 1, 1, 1, 1, 1,
  27162. 1, 1, 1, 1, 1, 1, 4494, 4494,
  27163. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27164. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27165. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27166. 4494, 4494, 4494, 4494, 4495, 4496, 4496, 4496,
  27167. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27168. 4496, 4497, 4496, 4496, 4498, 4499, 4499, 4499,
  27169. 4500, 1, 4490, 4490, 4490, 4490, 4490, 4490,
  27170. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27171. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27172. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27173. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27174. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27175. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27176. 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
  27177. 4490, 4490, 1, 4494, 4494, 4494, 4494, 4494,
  27178. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27179. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27180. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27181. 4494, 4494, 4494, 1, 4494, 4494, 4494, 4494,
  27182. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27183. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27184. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27185. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27186. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27187. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27188. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27189. 4494, 4494, 4494, 4494, 1, 4494, 4494, 4494,
  27190. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27191. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27192. 4494, 4494, 4494, 4494, 4494, 4494, 4494, 4494,
  27193. 4494, 4494, 4494, 4494, 4494, 1, 4496, 4496,
  27194. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27195. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27196. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27197. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27198. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27199. 4496, 4496, 4496, 4496, 4496, 4496, 1, 4496,
  27200. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27201. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27202. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27203. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27204. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27205. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27206. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27207. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 1,
  27208. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27209. 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
  27210. 1, 4502, 1, 1, 1, 4503, 1, 1,
  27211. 1, 1, 1, 1, 1, 1, 1, 1,
  27212. 1, 1, 1, 1, 1, 1, 1, 1,
  27213. 4502, 4504, 4505, 4504, 4504, 4504, 4504, 4504,
  27214. 4506, 1, 4504, 4504, 1, 4504, 1, 4504,
  27215. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27216. 4504, 4504, 1, 1, 83, 4504, 1, 4504,
  27217. 1, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27218. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27219. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27220. 4504, 4504, 4504, 1, 1, 1, 4504, 4504,
  27221. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27222. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27223. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  27224. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 1,
  27225. 1, 1, 1, 1, 1, 1, 1, 1,
  27226. 1, 1, 1, 1, 1, 1, 1, 1,
  27227. 1, 1, 1, 1, 1, 1, 1, 1,
  27228. 1, 1, 1, 1, 1, 1, 1, 1,
  27229. 1, 1, 1, 1, 1, 1, 1, 1,
  27230. 1, 1, 1, 1, 1, 1, 1, 1,
  27231. 1, 1, 1, 1, 1, 1, 1, 1,
  27232. 1, 1, 1, 1, 1, 1, 1, 1,
  27233. 1, 1, 4507, 4507, 4507, 4507, 4507, 4507,
  27234. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  27235. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  27236. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  27237. 4508, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
  27238. 4509, 4509, 4509, 4509, 4509, 4510, 4509, 4509,
  27239. 4511, 4512, 4512, 4512, 4513, 1, 4514, 4514,
  27240. 4514, 4514, 4514, 4514, 4514, 4514, 4515, 1,
  27241. 4514, 4514, 4516, 4514, 4514, 4514, 4514, 4514,
  27242. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27243. 4514, 4514, 4514, 4514, 4514, 4515, 4514, 37,
  27244. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27245. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27246. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27247. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27248. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27249. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27250. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27251. 4514, 4517, 4514, 4514, 4514, 4514, 4514, 4514,
  27252. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27253. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27254. 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
  27255. 4514, 4514, 4514, 4514, 4514, 1, 1, 1,
  27256. 1, 1, 1, 1, 1, 1, 1, 1,
  27257. 1, 1, 1, 1, 1, 1, 1, 1,
  27258. 1, 1, 1, 1, 1, 1, 1, 1,
  27259. 1, 1, 1, 1, 1, 1, 1, 1,
  27260. 1, 1, 1, 1, 1, 1, 1, 1,
  27261. 1, 1, 1, 1, 1, 1, 1, 1,
  27262. 1, 1, 1, 1, 1, 1, 1, 1,
  27263. 1, 1, 1, 1, 1, 1, 1, 4518,
  27264. 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
  27265. 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
  27266. 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
  27267. 4518, 4518, 4518, 4518, 4518, 4519, 4520, 4520,
  27268. 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
  27269. 4520, 4520, 4521, 4520, 4520, 4522, 4523, 4523,
  27270. 4523, 4524, 1, 4525, 4525, 4525, 4525, 4525,
  27271. 4525, 4525, 4525, 4525, 1, 4525, 4525, 4526,
  27272. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27273. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27274. 4525, 4525, 4525, 4525, 4527, 4525, 4525, 4525,
  27275. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27276. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27277. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27278. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27279. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27280. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27281. 4525, 4525, 4525, 4525, 4525, 4525, 4528, 4525,
  27282. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27283. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27284. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27285. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27286. 4525, 4525, 1, 1, 1, 1, 1, 1,
  27287. 1, 1, 1, 1, 1, 1, 1, 1,
  27288. 1, 1, 1, 1, 1, 1, 1, 1,
  27289. 1, 1, 1, 1, 1, 1, 1, 1,
  27290. 1, 1, 1, 1, 1, 1, 1, 1,
  27291. 1, 1, 1, 1, 1, 1, 1, 1,
  27292. 1, 1, 1, 1, 1, 1, 1, 1,
  27293. 1, 1, 1, 1, 1, 1, 1, 1,
  27294. 1, 1, 1, 1, 4529, 4529, 4529, 4529,
  27295. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27296. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27297. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27298. 4529, 4529, 4530, 4531, 4531, 4531, 4531, 4531,
  27299. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4532,
  27300. 4531, 4531, 4533, 4534, 4534, 4534, 4535, 1,
  27301. 4536, 1, 4525, 1, 1, 1, 1, 1,
  27302. 1, 1, 1, 1, 1, 1, 1, 1,
  27303. 1, 1, 1, 1, 1, 1, 1, 1,
  27304. 1, 4525, 1, 4537, 1, 4538, 1, 1,
  27305. 1, 1, 1, 1, 1, 1, 1, 1,
  27306. 1, 1, 1, 1, 1, 1, 1, 1,
  27307. 1, 1, 1, 1, 4538, 1, 4539, 1,
  27308. 4540, 1, 1, 1, 1, 1, 1, 1,
  27309. 1, 1, 1, 1, 1, 1, 1, 1,
  27310. 1, 1, 1, 1, 1, 1, 1, 4540,
  27311. 1, 4541, 1, 1, 1, 4542, 1, 1,
  27312. 1, 1, 1, 1, 1, 1, 1, 1,
  27313. 1, 1, 1, 1, 1, 1, 1, 1,
  27314. 4541, 4543, 4544, 4543, 4543, 4543, 4543, 4543,
  27315. 4545, 1, 4543, 4543, 1, 4543, 4546, 4543,
  27316. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27317. 4543, 4543, 1, 1, 1, 4543, 1, 4543,
  27318. 1, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27319. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27320. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27321. 4543, 4543, 4543, 3607, 1, 1, 4543, 4543,
  27322. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27323. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27324. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
  27325. 4543, 4543, 4543, 4543, 4543, 4543, 4543, 1,
  27326. 1, 1, 1, 1, 1, 1, 1, 1,
  27327. 1, 1, 1, 1, 1, 1, 1, 1,
  27328. 1, 1, 1, 1, 1, 1, 1, 1,
  27329. 1, 1, 1, 1, 1, 1, 1, 1,
  27330. 1, 1, 1, 1, 1, 1, 1, 1,
  27331. 1, 1, 1, 1, 1, 1, 1, 1,
  27332. 1, 1, 1, 1, 1, 1, 1, 1,
  27333. 1, 1, 1, 1, 1, 1, 1, 1,
  27334. 1, 1, 4547, 4547, 4547, 4547, 4547, 4547,
  27335. 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547,
  27336. 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547,
  27337. 4547, 4547, 4547, 4547, 4547, 4547, 4547, 4547,
  27338. 4548, 4549, 4549, 4549, 4549, 4549, 4549, 4549,
  27339. 4549, 4549, 4549, 4549, 4549, 4550, 4549, 4549,
  27340. 4551, 4552, 4552, 4552, 4553, 1, 4554, 1,
  27341. 1, 1, 4555, 1, 1, 1, 1, 1,
  27342. 1, 1, 1, 1, 1, 1, 1, 1,
  27343. 1, 1, 1, 1, 1, 4554, 4556, 4458,
  27344. 4556, 4556, 4556, 4556, 4556, 4557, 1, 4556,
  27345. 4556, 1, 4556, 4451, 4556, 4556, 4556, 4556,
  27346. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 1,
  27347. 1, 1, 4556, 1, 4556, 1, 4556, 4556,
  27348. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27349. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27350. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27351. 3621, 1, 1, 4556, 4556, 4556, 4556, 4556,
  27352. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27353. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27354. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27355. 4556, 4556, 4556, 4556, 1, 1, 1, 1,
  27356. 1, 1, 1, 1, 1, 1, 1, 1,
  27357. 1, 1, 1, 1, 1, 1, 1, 1,
  27358. 1, 1, 1, 1, 1, 1, 1, 1,
  27359. 1, 1, 1, 1, 1, 1, 1, 1,
  27360. 1, 1, 1, 1, 1, 1, 1, 1,
  27361. 1, 1, 1, 1, 1, 1, 1, 1,
  27362. 1, 1, 1, 1, 1, 1, 1, 1,
  27363. 1, 1, 1, 1, 1, 1, 1, 4558,
  27364. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27365. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27366. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27367. 4558, 4558, 4558, 4558, 4558, 4559, 4560, 4560,
  27368. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27369. 4560, 4560, 4561, 4560, 4560, 4562, 4563, 4563,
  27370. 4563, 4564, 1, 4565, 1, 4554, 1, 1,
  27371. 1, 1, 1, 1, 1, 1, 1, 1,
  27372. 1, 1, 1, 1, 1, 1, 1, 1,
  27373. 1, 1, 1, 1, 4554, 1, 3832, 1,
  27374. 1, 1, 3833, 1, 1, 1, 1, 1,
  27375. 1, 1, 1, 1, 1, 1, 1, 1,
  27376. 1, 1, 1, 1, 1, 3832, 4556, 4458,
  27377. 4556, 4556, 4556, 4556, 4556, 3835, 1, 4556,
  27378. 4556, 1, 4556, 4451, 4556, 4556, 4556, 4556,
  27379. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 1,
  27380. 1, 1, 4556, 1, 4556, 1, 4556, 4556,
  27381. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27382. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27383. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27384. 1, 1, 1, 4556, 4556, 4556, 4556, 4556,
  27385. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27386. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27387. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27388. 4556, 4556, 4556, 4556, 1, 1, 1, 1,
  27389. 1, 1, 1, 1, 1, 1, 1, 1,
  27390. 1, 1, 1, 1, 1, 1, 1, 1,
  27391. 1, 1, 1, 1, 1, 1, 1, 1,
  27392. 1, 1, 1, 1, 1, 1, 1, 1,
  27393. 1, 1, 1, 1, 1, 1, 1, 1,
  27394. 1, 1, 1, 1, 1, 1, 1, 1,
  27395. 1, 1, 1, 1, 1, 1, 1, 1,
  27396. 1, 1, 1, 1, 1, 1, 1, 4558,
  27397. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27398. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27399. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27400. 4558, 4558, 4558, 4558, 4558, 4559, 4560, 4560,
  27401. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27402. 4560, 4560, 4561, 4560, 4560, 4562, 4563, 4563,
  27403. 4563, 4564, 1, 4556, 4556, 4556, 4556, 4556,
  27404. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27405. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27406. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27407. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27408. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27409. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27410. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  27411. 4556, 4556, 4556, 1, 4558, 4558, 4558, 4558,
  27412. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27413. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27414. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27415. 4558, 4558, 4558, 4558, 1, 4558, 4558, 4558,
  27416. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27417. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27418. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27419. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27420. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27421. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27422. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27423. 4558, 4558, 4558, 4558, 4558, 1, 4558, 4558,
  27424. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27425. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27426. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  27427. 4558, 4558, 4558, 4558, 4558, 4558, 1, 4560,
  27428. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27429. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27430. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27431. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27432. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27433. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 1,
  27434. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27435. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27436. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27437. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27438. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27439. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27440. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27441. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27442. 1, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27443. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4560,
  27444. 4560, 1, 4566, 1, 1, 1, 4567, 1,
  27445. 1, 1, 1, 1, 1, 1, 1, 1,
  27446. 1, 1, 1, 1, 1, 1, 1, 1,
  27447. 1, 4566, 4568, 4569, 4568, 4568, 4568, 4568,
  27448. 4568, 4570, 1, 4568, 4568, 1, 4568, 4456,
  27449. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27450. 4568, 4568, 4568, 1, 1, 1, 4568, 1,
  27451. 4568, 1, 4568, 4568, 4568, 4568, 4568, 4568,
  27452. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27453. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27454. 4568, 4568, 4568, 4568, 3701, 1, 1, 4568,
  27455. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27456. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27457. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27458. 4568, 4568, 4568, 4568, 4568, 4568, 4568, 4568,
  27459. 1, 1, 1, 1, 1, 1, 1, 1,
  27460. 1, 1, 1, 1, 1, 1, 1, 1,
  27461. 1, 1, 1, 1, 1, 1, 1, 1,
  27462. 1, 1, 1, 1, 1, 1, 1, 1,
  27463. 1, 1, 1, 1, 1, 1, 1, 1,
  27464. 1, 1, 1, 1, 1, 1, 1, 1,
  27465. 1, 1, 1, 1, 1, 1, 1, 1,
  27466. 1, 1, 1, 1, 1, 1, 1, 1,
  27467. 1, 1, 1, 4571, 4571, 4571, 4571, 4571,
  27468. 4571, 4571, 4571, 4571, 4571, 4571, 4571, 4571,
  27469. 4571, 4571, 4571, 4571, 4571, 4571, 4571, 4571,
  27470. 4571, 4571, 4571, 4571, 4571, 4571, 4571, 4571,
  27471. 4571, 4572, 4573, 4573, 4573, 4573, 4573, 4573,
  27472. 4573, 4573, 4573, 4573, 4573, 4573, 4574, 4573,
  27473. 4573, 4575, 4576, 4576, 4576, 4577, 1, 4578,
  27474. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27475. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27476. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27477. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27478. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27479. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27480. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  27481. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 1,
  27482. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27483. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27484. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27485. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27486. 1, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27487. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27488. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27489. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27490. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27491. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27492. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27493. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27494. 4579, 1, 4579, 4579, 4579, 4579, 4579, 4579,
  27495. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27496. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27497. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  27498. 4579, 4579, 1, 4580, 4580, 4580, 4580, 4580,
  27499. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27500. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27501. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27502. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27503. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27504. 4580, 4580, 4580, 1, 4580, 4580, 4580, 4580,
  27505. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27506. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27507. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27508. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27509. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27510. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27511. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27512. 4580, 4580, 4580, 4580, 1, 4580, 4580, 4580,
  27513. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  27514. 4580, 4580, 4580, 4580, 4580, 1, 4525, 4525,
  27515. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27516. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27517. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27518. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27519. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27520. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27521. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27522. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27523. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27524. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27525. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27526. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27527. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27528. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27529. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27530. 4525, 4525, 4525, 4525, 4525, 4525, 1, 1,
  27531. 1, 1, 1, 1, 1, 1, 1, 1,
  27532. 1, 1, 1, 1, 1, 1, 1, 1,
  27533. 1, 1, 1, 1, 1, 1, 1, 1,
  27534. 1, 1, 1, 1, 1, 1, 1, 1,
  27535. 1, 1, 1, 1, 1, 1, 1, 1,
  27536. 1, 1, 1, 1, 1, 1, 1, 1,
  27537. 1, 1, 1, 1, 1, 1, 1, 1,
  27538. 1, 1, 1, 1, 1, 1, 1, 1,
  27539. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27540. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27541. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27542. 4529, 4529, 4529, 4529, 4529, 4529, 4530, 4531,
  27543. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27544. 4531, 4531, 4531, 4532, 4531, 4531, 4533, 4534,
  27545. 4534, 4534, 4535, 1, 4525, 4525, 4525, 4525,
  27546. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27547. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27548. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27549. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27550. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27551. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27552. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27553. 4525, 4525, 4525, 4525, 1, 4529, 4529, 4529,
  27554. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27555. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27556. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27557. 4529, 4529, 4529, 4529, 4529, 1, 4529, 4529,
  27558. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27559. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27560. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27561. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27562. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27563. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27564. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27565. 4529, 4529, 4529, 4529, 4529, 4529, 1, 4529,
  27566. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27567. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27568. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27569. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 1,
  27570. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27571. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27572. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27573. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27574. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27575. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27576. 1, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27577. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27578. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27579. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27580. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27581. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27582. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27583. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27584. 4531, 1, 4531, 4531, 4531, 4531, 4531, 4531,
  27585. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4531,
  27586. 4531, 4531, 1, 4525, 4525, 4525, 4525, 4525,
  27587. 4525, 4525, 4525, 4581, 1, 4525, 4525, 4582,
  27588. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27589. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27590. 4525, 4525, 4581, 4525, 48, 4525, 4525, 4525,
  27591. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27592. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27593. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27594. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27595. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27596. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27597. 4525, 4525, 4525, 4525, 4525, 4525, 4528, 4525,
  27598. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27599. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27600. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27601. 4525, 4525, 4525, 4525, 4525, 4525, 4525, 4525,
  27602. 4525, 4525, 1, 1, 1, 1, 1, 1,
  27603. 1, 1, 1, 1, 1, 1, 1, 1,
  27604. 1, 1, 1, 1, 1, 1, 1, 1,
  27605. 1, 1, 1, 1, 1, 1, 1, 1,
  27606. 1, 1, 1, 1, 1, 1, 1, 1,
  27607. 1, 1, 1, 1, 1, 1, 1, 1,
  27608. 1, 1, 1, 1, 1, 1, 1, 1,
  27609. 1, 1, 1, 1, 1, 1, 1, 1,
  27610. 1, 1, 1, 1, 4529, 4529, 4529, 4529,
  27611. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27612. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27613. 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529,
  27614. 4529, 4529, 4530, 4531, 4531, 4531, 4531, 4531,
  27615. 4531, 4531, 4531, 4531, 4531, 4531, 4531, 4532,
  27616. 4531, 4531, 4533, 4534, 4534, 4534, 4535, 1,
  27617. 4583, 1, 4581, 1, 1, 1, 1, 1,
  27618. 1, 1, 1, 1, 1, 1, 1, 1,
  27619. 1, 1, 1, 1, 1, 1, 1, 1,
  27620. 1, 4581, 1, 4584, 1, 4585, 1, 1,
  27621. 1, 1, 1, 1, 1, 1, 1, 1,
  27622. 1, 1, 1, 1, 1, 1, 1, 1,
  27623. 1, 1, 1, 1, 4585, 1, 4586, 4586,
  27624. 4586, 4586, 4586, 4586, 4586, 4586, 4587, 1,
  27625. 4586, 4586, 4588, 4586, 4586, 4586, 4586, 4586,
  27626. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27627. 4586, 4586, 4586, 4586, 4586, 4587, 4586, 4481,
  27628. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27629. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27630. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27631. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27632. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27633. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27634. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27635. 4586, 4589, 4586, 4586, 4586, 4586, 4586, 4586,
  27636. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27637. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27638. 4586, 4586, 4586, 4586, 4586, 4586, 4586, 4586,
  27639. 4586, 4586, 4586, 4586, 4586, 1, 1, 1,
  27640. 1, 1, 1, 1, 1, 1, 1, 1,
  27641. 1, 1, 1, 1, 1, 1, 1, 1,
  27642. 1, 1, 1, 1, 1, 1, 1, 1,
  27643. 1, 1, 1, 1, 1, 1, 1, 1,
  27644. 1, 1, 1, 1, 1, 1, 1, 1,
  27645. 1, 1, 1, 1, 1, 1, 1, 1,
  27646. 1, 1, 1, 1, 1, 1, 1, 1,
  27647. 1, 1, 1, 1, 1, 1, 1, 4590,
  27648. 4590, 4590, 4590, 4590, 4590, 4590, 4590, 4590,
  27649. 4590, 4590, 4590, 4590, 4590, 4590, 4590, 4590,
  27650. 4590, 4590, 4590, 4590, 4590, 4590, 4590, 4590,
  27651. 4590, 4590, 4590, 4590, 4590, 4591, 4592, 4592,
  27652. 4592, 4592, 4592, 4592, 4592, 4592, 4592, 4592,
  27653. 4592, 4592, 4593, 4592, 4592, 4594, 4595, 4595,
  27654. 4595, 4596, 1, 4597, 4597, 4597, 4597, 4597,
  27655. 4597, 4597, 4597, 4597, 1, 4597, 4597, 4598,
  27656. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27657. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27658. 4597, 4597, 4597, 4597, 4599, 4597, 4597, 4597,
  27659. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27660. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27661. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27662. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27663. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27664. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27665. 4597, 4597, 4597, 4597, 4597, 4597, 4600, 4597,
  27666. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27667. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27668. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27669. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27670. 4597, 4597, 1, 1, 1, 1, 1, 1,
  27671. 1, 1, 1, 1, 1, 1, 1, 1,
  27672. 1, 1, 1, 1, 1, 1, 1, 1,
  27673. 1, 1, 1, 1, 1, 1, 1, 1,
  27674. 1, 1, 1, 1, 1, 1, 1, 1,
  27675. 1, 1, 1, 1, 1, 1, 1, 1,
  27676. 1, 1, 1, 1, 1, 1, 1, 1,
  27677. 1, 1, 1, 1, 1, 1, 1, 1,
  27678. 1, 1, 1, 1, 4601, 4601, 4601, 4601,
  27679. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27680. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27681. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27682. 4601, 4601, 4602, 4603, 4603, 4603, 4603, 4603,
  27683. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4604,
  27684. 4603, 4603, 4605, 4606, 4606, 4606, 4607, 1,
  27685. 4608, 1, 4597, 1, 1, 1, 1, 1,
  27686. 1, 1, 1, 1, 1, 1, 1, 1,
  27687. 1, 1, 1, 1, 1, 1, 1, 1,
  27688. 1, 4597, 1, 4597, 4597, 4597, 4597, 4597,
  27689. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27690. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27691. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27692. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27693. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27694. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27695. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27696. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27697. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27698. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27699. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27700. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27701. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27702. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27703. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27704. 4597, 4597, 4597, 1, 1, 1, 1, 1,
  27705. 1, 1, 1, 1, 1, 1, 1, 1,
  27706. 1, 1, 1, 1, 1, 1, 1, 1,
  27707. 1, 1, 1, 1, 1, 1, 1, 1,
  27708. 1, 1, 1, 1, 1, 1, 1, 1,
  27709. 1, 1, 1, 1, 1, 1, 1, 1,
  27710. 1, 1, 1, 1, 1, 1, 1, 1,
  27711. 1, 1, 1, 1, 1, 1, 1, 1,
  27712. 1, 1, 1, 1, 1, 4601, 4601, 4601,
  27713. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27714. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27715. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27716. 4601, 4601, 4601, 4602, 4603, 4603, 4603, 4603,
  27717. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27718. 4604, 4603, 4603, 4605, 4606, 4606, 4606, 4607,
  27719. 1, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27720. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27721. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27722. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27723. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27724. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27725. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27726. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27727. 4597, 1, 4601, 4601, 4601, 4601, 4601, 4601,
  27728. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27729. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27730. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27731. 4601, 4601, 1, 4601, 4601, 4601, 4601, 4601,
  27732. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27733. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27734. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27735. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27736. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27737. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27738. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27739. 4601, 4601, 4601, 1, 4601, 4601, 4601, 4601,
  27740. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27741. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27742. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27743. 4601, 4601, 4601, 4601, 1, 4603, 4603, 4603,
  27744. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27745. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27746. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27747. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27748. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27749. 4603, 4603, 4603, 4603, 4603, 1, 4603, 4603,
  27750. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27751. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27752. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27753. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27754. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27755. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27756. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27757. 4603, 4603, 4603, 4603, 4603, 4603, 1, 4603,
  27758. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27759. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 1,
  27760. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27761. 4609, 1, 4597, 4597, 4610, 4597, 4597, 4597,
  27762. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27763. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4609,
  27764. 4597, 4492, 4597, 4597, 4597, 4597, 4597, 4597,
  27765. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27766. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27767. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27768. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27769. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27770. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27771. 4597, 4597, 4597, 4600, 4597, 4597, 4597, 4597,
  27772. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27773. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27774. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 4597,
  27775. 4597, 4597, 4597, 4597, 4597, 4597, 4597, 1,
  27776. 1, 1, 1, 1, 1, 1, 1, 1,
  27777. 1, 1, 1, 1, 1, 1, 1, 1,
  27778. 1, 1, 1, 1, 1, 1, 1, 1,
  27779. 1, 1, 1, 1, 1, 1, 1, 1,
  27780. 1, 1, 1, 1, 1, 1, 1, 1,
  27781. 1, 1, 1, 1, 1, 1, 1, 1,
  27782. 1, 1, 1, 1, 1, 1, 1, 1,
  27783. 1, 1, 1, 1, 1, 1, 1, 1,
  27784. 1, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27785. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27786. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4601,
  27787. 4601, 4601, 4601, 4601, 4601, 4601, 4601, 4602,
  27788. 4603, 4603, 4603, 4603, 4603, 4603, 4603, 4603,
  27789. 4603, 4603, 4603, 4603, 4604, 4603, 4603, 4605,
  27790. 4606, 4606, 4606, 4607, 1, 4611, 1, 4609,
  27791. 1, 1, 1, 1, 1, 1, 1, 1,
  27792. 1, 1, 1, 1, 1, 1, 1, 1,
  27793. 1, 1, 1, 1, 1, 1, 4609, 1,
  27794. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27795. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27796. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27797. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27798. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27799. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27800. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27801. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  27802. 1, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27803. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27804. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27805. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27806. 4613, 1, 4613, 4613, 4613, 4613, 4613, 4613,
  27807. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27808. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27809. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27810. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27811. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27812. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27813. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27814. 4613, 4613, 1, 4613, 4613, 4613, 4613, 4613,
  27815. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27816. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27817. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  27818. 4613, 4613, 4613, 1, 4614, 4614, 4614, 4614,
  27819. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27820. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27821. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27822. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27823. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27824. 4614, 4614, 4614, 4614, 1, 4614, 4614, 4614,
  27825. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27826. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27827. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27828. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27829. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27830. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27831. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27832. 4614, 4614, 4614, 4614, 4614, 1, 4614, 4614,
  27833. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  27834. 4614, 4614, 4614, 4614, 4614, 4614, 1, 4615,
  27835. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4616,
  27836. 1, 4615, 4615, 4617, 4615, 4615, 4615, 4615,
  27837. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27838. 4615, 4615, 4615, 4615, 4615, 4615, 4616, 4615,
  27839. 4618, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27840. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27841. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27842. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27843. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27844. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27845. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27846. 4615, 4615, 4619, 4615, 4615, 4615, 4615, 4615,
  27847. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27848. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27849. 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
  27850. 4615, 4615, 4615, 4615, 4615, 4615, 1, 1,
  27851. 1, 1, 1, 1, 1, 1, 1, 1,
  27852. 1, 1, 1, 1, 1, 1, 1, 1,
  27853. 1, 1, 1, 1, 1, 1, 1, 1,
  27854. 1, 1, 1, 1, 1, 1, 1, 1,
  27855. 1, 1, 1, 1, 1, 1, 1, 1,
  27856. 1, 1, 1, 1, 1, 1, 1, 1,
  27857. 1, 1, 1, 1, 1, 1, 1, 1,
  27858. 1, 1, 1, 1, 1, 1, 1, 1,
  27859. 4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620,
  27860. 4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620,
  27861. 4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620,
  27862. 4620, 4620, 4620, 4620, 4620, 4620, 4621, 4622,
  27863. 4622, 4622, 4622, 4622, 4622, 4622, 4622, 4622,
  27864. 4622, 4622, 4622, 4623, 4622, 4622, 4624, 4625,
  27865. 4625, 4625, 4626, 1, 4627, 4627, 4627, 4627,
  27866. 4627, 4627, 4627, 4627, 4627, 1, 4627, 4627,
  27867. 4628, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27868. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27869. 4627, 4627, 4627, 4627, 4627, 4629, 4627, 4627,
  27870. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27871. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27872. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27873. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27874. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27875. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27876. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4630,
  27877. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27878. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27879. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27880. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27881. 4627, 4627, 4627, 1, 1, 1, 1, 1,
  27882. 1, 1, 1, 1, 1, 1, 1, 1,
  27883. 1, 1, 1, 1, 1, 1, 1, 1,
  27884. 1, 1, 1, 1, 1, 1, 1, 1,
  27885. 1, 1, 1, 1, 1, 1, 1, 1,
  27886. 1, 1, 1, 1, 1, 1, 1, 1,
  27887. 1, 1, 1, 1, 1, 1, 1, 1,
  27888. 1, 1, 1, 1, 1, 1, 1, 1,
  27889. 1, 1, 1, 1, 1, 4631, 4631, 4631,
  27890. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27891. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27892. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27893. 4631, 4631, 4631, 4632, 4633, 4633, 4633, 4633,
  27894. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27895. 4634, 4633, 4633, 4635, 4636, 4636, 4636, 4637,
  27896. 1, 4638, 1, 4627, 1, 1, 1, 1,
  27897. 1, 1, 1, 1, 1, 1, 1, 1,
  27898. 1, 1, 1, 1, 1, 1, 1, 1,
  27899. 1, 1, 4627, 1, 4639, 1, 4640, 1,
  27900. 1, 1, 1, 1, 1, 1, 1, 1,
  27901. 1, 1, 1, 1, 1, 1, 1, 1,
  27902. 1, 1, 1, 1, 1, 4640, 1, 4627,
  27903. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27904. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27905. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27906. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27907. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27908. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27909. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27910. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27911. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27912. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27913. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27914. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27915. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27916. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27917. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27918. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 1,
  27919. 1, 1, 1, 1, 1, 1, 1, 1,
  27920. 1, 1, 1, 1, 1, 1, 1, 1,
  27921. 1, 1, 1, 1, 1, 1, 1, 1,
  27922. 1, 1, 1, 1, 1, 1, 1, 1,
  27923. 1, 1, 1, 1, 1, 1, 1, 1,
  27924. 1, 1, 1, 1, 1, 1, 1, 1,
  27925. 1, 1, 1, 1, 1, 1, 1, 1,
  27926. 1, 1, 1, 1, 1, 1, 1, 1,
  27927. 1, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27928. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27929. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27930. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4632,
  27931. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27932. 4633, 4633, 4633, 4633, 4634, 4633, 4633, 4635,
  27933. 4636, 4636, 4636, 4637, 1, 4627, 4627, 4627,
  27934. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27935. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27936. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27937. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27938. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27939. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27940. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27941. 4627, 4627, 4627, 4627, 4627, 1, 4631, 4631,
  27942. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27943. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27944. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27945. 4631, 4631, 4631, 4631, 4631, 4631, 1, 4631,
  27946. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27947. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27948. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27949. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27950. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27951. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27952. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27953. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 1,
  27954. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27955. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27956. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27957. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  27958. 1, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27959. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27960. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27961. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27962. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27963. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27964. 4633, 1, 4633, 4633, 4633, 4633, 4633, 4633,
  27965. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27966. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27967. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27968. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27969. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27970. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27971. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27972. 4633, 4633, 1, 4633, 4633, 4633, 4633, 4633,
  27973. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  27974. 4633, 4633, 4633, 1, 4627, 4627, 4627, 4627,
  27975. 4627, 4627, 4627, 4627, 4641, 1, 4627, 4627,
  27976. 4642, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27977. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27978. 4627, 4627, 4627, 4641, 4627, 4643, 4627, 4627,
  27979. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27980. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27981. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27982. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27983. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27984. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27985. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4630,
  27986. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27987. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27988. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27989. 4627, 4627, 4627, 4627, 4627, 4627, 4627, 4627,
  27990. 4627, 4627, 4627, 1, 1, 1, 1, 1,
  27991. 1, 1, 1, 1, 1, 1, 1, 1,
  27992. 1, 1, 1, 1, 1, 1, 1, 1,
  27993. 1, 1, 1, 1, 1, 1, 1, 1,
  27994. 1, 1, 1, 1, 1, 1, 1, 1,
  27995. 1, 1, 1, 1, 1, 1, 1, 1,
  27996. 1, 1, 1, 1, 1, 1, 1, 1,
  27997. 1, 1, 1, 1, 1, 1, 1, 1,
  27998. 1, 1, 1, 1, 1, 4631, 4631, 4631,
  27999. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  28000. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  28001. 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
  28002. 4631, 4631, 4631, 4632, 4633, 4633, 4633, 4633,
  28003. 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
  28004. 4634, 4633, 4633, 4635, 4636, 4636, 4636, 4637,
  28005. 1, 4644, 1, 4641, 1, 1, 1, 1,
  28006. 1, 1, 1, 1, 1, 1, 1, 1,
  28007. 1, 1, 1, 1, 1, 1, 1, 1,
  28008. 1, 1, 4641, 1, 4645, 1, 4646, 1,
  28009. 1, 1, 1, 1, 1, 1, 1, 1,
  28010. 1, 1, 1, 1, 1, 1, 1, 1,
  28011. 1, 1, 1, 1, 1, 4646, 1, 4647,
  28012. 1, 1, 1, 4648, 1, 1, 1, 1,
  28013. 1, 1, 1, 1, 1, 1, 1, 1,
  28014. 1, 1, 1, 1, 1, 1, 4647, 4649,
  28015. 4650, 4649, 4649, 4649, 4649, 4649, 4651, 1,
  28016. 4649, 4649, 1, 4649, 4652, 4649, 4649, 4649,
  28017. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28018. 1, 1, 83, 4649, 1, 4649, 1, 4649,
  28019. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28020. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28021. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28022. 4649, 1, 1, 1, 4649, 4649, 4649, 4649,
  28023. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28024. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28025. 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
  28026. 4649, 4649, 4649, 4649, 4649, 1, 1, 1,
  28027. 1, 1, 1, 1, 1, 1, 1, 1,
  28028. 1, 1, 1, 1, 1, 1, 1, 1,
  28029. 1, 1, 1, 1, 1, 1, 1, 1,
  28030. 1, 1, 1, 1, 1, 1, 1, 1,
  28031. 1, 1, 1, 1, 1, 1, 1, 1,
  28032. 1, 1, 1, 1, 1, 1, 1, 1,
  28033. 1, 1, 1, 1, 1, 1, 1, 1,
  28034. 1, 1, 1, 1, 1, 1, 1, 1,
  28035. 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
  28036. 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
  28037. 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
  28038. 4653, 4653, 4653, 4653, 4653, 4653, 4654, 4655,
  28039. 4655, 4655, 4655, 4655, 4655, 4655, 4655, 4655,
  28040. 4655, 4655, 4655, 4656, 4655, 4655, 4657, 4658,
  28041. 4658, 4658, 4659, 1, 4660, 1, 1, 1,
  28042. 4661, 1, 1, 1, 1, 1, 1, 1,
  28043. 1, 1, 1, 1, 1, 1, 1, 1,
  28044. 1, 1, 1, 4660, 3, 4, 3, 3,
  28045. 3, 3, 3, 5, 1, 3, 3, 1,
  28046. 3, 7, 3, 3, 3, 3, 3, 3,
  28047. 3, 3, 3, 3, 3, 1, 1, 8,
  28048. 3, 1, 3, 1, 3, 3, 3, 3,
  28049. 3, 3, 3, 3, 3, 3, 3, 3,
  28050. 3, 3, 3, 3, 3, 3, 3, 3,
  28051. 3, 3, 3, 3, 3, 3, 1, 1,
  28052. 1, 3, 3, 3, 3, 3, 3, 3,
  28053. 3, 3, 3, 3, 3, 3, 3, 3,
  28054. 3, 3, 3, 3, 3, 3, 3, 3,
  28055. 3, 3, 3, 3, 3, 3, 3, 3,
  28056. 3, 3, 1, 1, 1, 1, 1, 1,
  28057. 1, 1, 1, 1, 1, 1, 1, 1,
  28058. 1, 1, 1, 1, 1, 1, 1, 1,
  28059. 1, 1, 1, 1, 1, 1, 1, 1,
  28060. 1, 1, 1, 1, 1, 1, 1, 1,
  28061. 1, 1, 1, 1, 1, 1, 1, 1,
  28062. 1, 1, 1, 1, 1, 1, 1, 1,
  28063. 1, 1, 1, 1, 1, 1, 1, 1,
  28064. 1, 1, 1, 1, 1, 9, 9, 9,
  28065. 9, 9, 9, 9, 9, 9, 9, 9,
  28066. 9, 9, 9, 9, 9, 9, 9, 9,
  28067. 9, 9, 9, 9, 9, 9, 9, 9,
  28068. 9, 9, 9, 10, 11, 11, 11, 11,
  28069. 11, 11, 11, 11, 11, 11, 11, 11,
  28070. 12, 11, 11, 13, 14, 14, 14, 15,
  28071. 1, 4662, 1, 4660, 1, 1, 1, 1,
  28072. 1, 1, 1, 1, 1, 1, 1, 1,
  28073. 1, 1, 1, 1, 1, 1, 1, 1,
  28074. 1, 1, 4660, 1, 4663, 4664, 4663, 4663,
  28075. 4663, 4663, 4663, 1, 1, 4663, 4663, 1,
  28076. 4663, 4665, 4663, 4663, 4663, 4663, 4663, 4663,
  28077. 4663, 4663, 4663, 4663, 4663, 1, 1, 1,
  28078. 4663, 1, 4663, 1, 4663, 4663, 4663, 4663,
  28079. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28080. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28081. 4663, 4663, 4663, 4663, 4663, 4663, 1, 1,
  28082. 1, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28083. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28084. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28085. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28086. 4663, 4663, 1, 1, 1, 1, 1, 1,
  28087. 1, 1, 1, 1, 1, 1, 1, 1,
  28088. 1, 1, 1, 1, 1, 1, 1, 1,
  28089. 1, 1, 1, 1, 1, 1, 1, 1,
  28090. 1, 1, 1, 1, 1, 1, 1, 1,
  28091. 1, 1, 1, 1, 1, 1, 1, 1,
  28092. 1, 1, 1, 1, 1, 1, 1, 1,
  28093. 1, 1, 1, 1, 1, 1, 1, 1,
  28094. 1, 1, 1, 1, 1, 4666, 4666, 4666,
  28095. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28096. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28097. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28098. 4666, 4666, 4666, 4667, 4668, 4668, 4668, 4668,
  28099. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28100. 4669, 4668, 4668, 4670, 4671, 4671, 4671, 4672,
  28101. 1, 4673, 1, 4674, 1, 1, 1, 1,
  28102. 1, 1, 1, 1, 1, 1, 1, 1,
  28103. 1, 1, 1, 1, 1, 1, 1, 1,
  28104. 1, 1, 4674, 1, 4675, 4675, 4675, 4675,
  28105. 4675, 4675, 4675, 4675, 4664, 1, 4675, 4675,
  28106. 4676, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28107. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28108. 4675, 4675, 4675, 4664, 4675, 1, 4675, 4675,
  28109. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28110. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28111. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28112. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28113. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28114. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28115. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4677,
  28116. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28117. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28118. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28119. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28120. 4675, 4675, 4675, 1, 1, 1, 1, 1,
  28121. 1, 1, 1, 1, 1, 1, 1, 1,
  28122. 1, 1, 1, 1, 1, 1, 1, 1,
  28123. 1, 1, 1, 1, 1, 1, 1, 1,
  28124. 1, 1, 1, 1, 1, 1, 1, 1,
  28125. 1, 1, 1, 1, 1, 1, 1, 1,
  28126. 1, 1, 1, 1, 1, 1, 1, 1,
  28127. 1, 1, 1, 1, 1, 1, 1, 1,
  28128. 1, 1, 1, 1, 1, 4678, 4678, 4678,
  28129. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28130. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28131. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28132. 4678, 4678, 4678, 4679, 4680, 4680, 4680, 4680,
  28133. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28134. 4681, 4680, 4680, 4682, 4683, 4683, 4683, 4684,
  28135. 1, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28136. 4675, 4675, 1, 4675, 4675, 4685, 4675, 4675,
  28137. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28138. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28139. 4675, 4675, 4663, 4675, 4675, 4675, 4675, 4675,
  28140. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28141. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28142. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28143. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28144. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28145. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28146. 4675, 4675, 4675, 4675, 4677, 4675, 4675, 4675,
  28147. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28148. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28149. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28150. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28151. 1, 1, 1, 1, 1, 1, 1, 1,
  28152. 1, 1, 1, 1, 1, 1, 1, 1,
  28153. 1, 1, 1, 1, 1, 1, 1, 1,
  28154. 1, 1, 1, 1, 1, 1, 1, 1,
  28155. 1, 1, 1, 1, 1, 1, 1, 1,
  28156. 1, 1, 1, 1, 1, 1, 1, 1,
  28157. 1, 1, 1, 1, 1, 1, 1, 1,
  28158. 1, 1, 1, 1, 1, 1, 1, 1,
  28159. 1, 1, 4678, 4678, 4678, 4678, 4678, 4678,
  28160. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28161. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28162. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28163. 4679, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28164. 4680, 4680, 4680, 4680, 4680, 4681, 4680, 4680,
  28165. 4682, 4683, 4683, 4683, 4684, 1, 4686, 1,
  28166. 4675, 1, 1, 1, 1, 1, 1, 1,
  28167. 1, 1, 1, 1, 1, 1, 1, 1,
  28168. 1, 1, 1, 1, 1, 1, 1, 4675,
  28169. 1, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28170. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28171. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28172. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28173. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28174. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28175. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28176. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28177. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28178. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28179. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28180. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28181. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28182. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28183. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28184. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28185. 4675, 1, 1, 1, 1, 1, 1, 1,
  28186. 1, 1, 1, 1, 1, 1, 1, 1,
  28187. 1, 1, 1, 1, 1, 1, 1, 1,
  28188. 1, 1, 1, 1, 1, 1, 1, 1,
  28189. 1, 1, 1, 1, 1, 1, 1, 1,
  28190. 1, 1, 1, 1, 1, 1, 1, 1,
  28191. 1, 1, 1, 1, 1, 1, 1, 1,
  28192. 1, 1, 1, 1, 1, 1, 1, 1,
  28193. 1, 1, 1, 4678, 4678, 4678, 4678, 4678,
  28194. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28195. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28196. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28197. 4678, 4679, 4680, 4680, 4680, 4680, 4680, 4680,
  28198. 4680, 4680, 4680, 4680, 4680, 4680, 4681, 4680,
  28199. 4680, 4682, 4683, 4683, 4683, 4684, 1, 4675,
  28200. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28201. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28202. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28203. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28204. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28205. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28206. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
  28207. 4675, 4675, 4675, 4675, 4675, 4675, 4675, 1,
  28208. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28209. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28210. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28211. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28212. 1, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28213. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28214. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28215. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28216. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28217. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28218. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28219. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28220. 4678, 1, 4678, 4678, 4678, 4678, 4678, 4678,
  28221. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28222. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28223. 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
  28224. 4678, 4678, 1, 4680, 4680, 4680, 4680, 4680,
  28225. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28226. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28227. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28228. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28229. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28230. 4680, 4680, 4680, 1, 4680, 4680, 4680, 4680,
  28231. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28232. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28233. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28234. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28235. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28236. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28237. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28238. 4680, 4680, 4680, 4680, 1, 4680, 4680, 4680,
  28239. 4680, 4680, 4680, 4680, 4680, 4680, 4680, 4680,
  28240. 4680, 4680, 4680, 4680, 4680, 1, 4687, 1,
  28241. 4664, 1, 1, 1, 1, 1, 1, 1,
  28242. 1, 1, 1, 1, 1, 1, 1, 1,
  28243. 1, 1, 1, 1, 1, 1, 1, 4664,
  28244. 1, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28245. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28246. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28247. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28248. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28249. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28250. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28251. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  28252. 4663, 1, 4666, 4666, 4666, 4666, 4666, 4666,
  28253. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28254. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28255. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28256. 4666, 4666, 1, 4666, 4666, 4666, 4666, 4666,
  28257. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28258. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28259. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28260. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28261. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28262. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28263. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28264. 4666, 4666, 4666, 1, 4666, 4666, 4666, 4666,
  28265. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28266. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28267. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  28268. 4666, 4666, 4666, 4666, 1, 4668, 4668, 4668,
  28269. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28270. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28271. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28272. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28273. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28274. 4668, 4668, 4668, 4668, 4668, 1, 4668, 4668,
  28275. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28276. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28277. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28278. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28279. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28280. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28281. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28282. 4668, 4668, 4668, 4668, 4668, 4668, 1, 4668,
  28283. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  28284. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 1,
  28285. 73, 1, 1, 1, 74, 1, 1, 1,
  28286. 1, 1, 1, 1, 1, 1, 1, 1,
  28287. 1, 1, 1, 1, 1, 1, 1, 73,
  28288. 4578, 4688, 4578, 4578, 4578, 4578, 4578, 75,
  28289. 1, 4578, 4578, 1, 4578, 4689, 4578, 4578,
  28290. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28291. 4578, 25, 1, 26, 4578, 1, 4578, 24,
  28292. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28293. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28294. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28295. 4578, 4578, 1, 1, 1, 4578, 4578, 4578,
  28296. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28297. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28298. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  28299. 4578, 4578, 4578, 4578, 4578, 4578, 1, 1,
  28300. 1, 1, 1, 1, 1, 1, 1, 1,
  28301. 1, 1, 1, 1, 1, 1, 1, 1,
  28302. 1, 1, 1, 1, 1, 1, 1, 1,
  28303. 1, 1, 1, 1, 1, 1, 1, 1,
  28304. 1, 1, 1, 1, 1, 1, 1, 1,
  28305. 1, 1, 1, 1, 1, 1, 1, 1,
  28306. 1, 1, 1, 1, 1, 1, 1, 1,
  28307. 1, 1, 1, 1, 1, 1, 1, 1,
  28308. 1, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  28309. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  28310. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  28311. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4690,
  28312. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  28313. 4580, 4580, 4580, 4580, 4691, 4580, 4580, 4692,
  28314. 4693, 4693, 4693, 4694, 1, 4695, 4695, 4695,
  28315. 4695, 4695, 4695, 4695, 4695, 4695, 1, 4695,
  28316. 4695, 4696, 4695, 4695, 4695, 4695, 4695, 4695,
  28317. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28318. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28319. 4695, 4695, 4695, 4695, 4697, 4698, 4695, 4695,
  28320. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28321. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28322. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28323. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28324. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28325. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28326. 4699, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28327. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28328. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28329. 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
  28330. 4695, 4695, 4695, 4695, 1, 1, 1, 1,
  28331. 1, 1, 1, 1, 1, 1, 1, 1,
  28332. 1, 1, 1, 1, 1, 1, 1, 1,
  28333. 1, 1, 1, 1, 1, 1, 1, 1,
  28334. 1, 1, 1, 1, 1, 1, 1, 1,
  28335. 1, 1, 1, 1, 1, 1, 1, 1,
  28336. 1, 1, 1, 1, 1, 1, 1, 1,
  28337. 1, 1, 1, 1, 1, 1, 1, 1,
  28338. 1, 1, 1, 1, 1, 1, 4700, 4700,
  28339. 4700, 4700, 4700, 4700, 4700, 4700, 4700, 4700,
  28340. 4700, 4700, 4700, 4700, 4700, 4700, 4700, 4700,
  28341. 4700, 4700, 4700, 4700, 4700, 4700, 4700, 4700,
  28342. 4700, 4700, 4700, 4700, 4701, 4702, 4702, 4702,
  28343. 4702, 4702, 4702, 4702, 4702, 4702, 4702, 4702,
  28344. 4702, 4703, 4702, 4702, 4704, 4705, 4705, 4705,
  28345. 4706, 1, 4707, 4707, 4707, 4707, 4707, 4707,
  28346. 4707, 4707, 4707, 1, 4707, 4707, 4708, 4707,
  28347. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28348. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28349. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28350. 4707, 4709, 4710, 4707, 4707, 4707, 4707, 4707,
  28351. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28352. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28353. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28354. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28355. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28356. 4707, 4707, 4707, 4707, 4707, 4711, 4707, 4707,
  28357. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28358. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28359. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28360. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28361. 4707, 1, 1, 1, 1, 1, 1, 1,
  28362. 1, 1, 1, 1, 1, 1, 1, 1,
  28363. 1, 1, 1, 1, 1, 1, 1, 1,
  28364. 1, 1, 1, 1, 1, 1, 1, 1,
  28365. 1, 1, 1, 1, 1, 1, 1, 1,
  28366. 1, 1, 1, 1, 1, 1, 1, 1,
  28367. 1, 1, 1, 1, 1, 1, 1, 1,
  28368. 1, 1, 1, 1, 1, 1, 1, 1,
  28369. 1, 1, 1, 4712, 4712, 4712, 4712, 4712,
  28370. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28371. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28372. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28373. 4712, 4713, 4714, 4714, 4714, 4714, 4714, 4714,
  28374. 4714, 4714, 4714, 4714, 4714, 4714, 4715, 4714,
  28375. 4714, 4716, 4717, 4717, 4717, 4718, 1, 4719,
  28376. 1, 4707, 1, 1, 1, 1, 1, 1,
  28377. 1, 1, 1, 1, 1, 1, 1, 1,
  28378. 1, 1, 1, 1, 1, 1, 1, 1,
  28379. 4707, 1, 4707, 4707, 4707, 4707, 4707, 4707,
  28380. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28381. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28382. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28383. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28384. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28385. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28386. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28387. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28388. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28389. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28390. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28391. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28392. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28393. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28394. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28395. 4707, 4707, 1, 1, 1, 1, 1, 1,
  28396. 1, 1, 1, 1, 1, 1, 1, 1,
  28397. 1, 1, 1, 1, 1, 1, 1, 1,
  28398. 1, 1, 1, 1, 1, 1, 1, 1,
  28399. 1, 1, 1, 1, 1, 1, 1, 1,
  28400. 1, 1, 1, 1, 1, 1, 1, 1,
  28401. 1, 1, 1, 1, 1, 1, 1, 1,
  28402. 1, 1, 1, 1, 1, 1, 1, 1,
  28403. 1, 1, 1, 1, 4712, 4712, 4712, 4712,
  28404. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28405. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28406. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28407. 4712, 4712, 4713, 4714, 4714, 4714, 4714, 4714,
  28408. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4715,
  28409. 4714, 4714, 4716, 4717, 4717, 4717, 4718, 1,
  28410. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28411. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28412. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28413. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28414. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28415. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28416. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28417. 4707, 4707, 4707, 4707, 4707, 4707, 4707, 4707,
  28418. 1, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28419. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28420. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28421. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28422. 4712, 1, 4712, 4712, 4712, 4712, 4712, 4712,
  28423. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28424. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28425. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28426. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28427. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28428. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28429. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28430. 4712, 4712, 1, 4712, 4712, 4712, 4712, 4712,
  28431. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28432. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28433. 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
  28434. 4712, 4712, 4712, 1, 4714, 4714, 4714, 4714,
  28435. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28436. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28437. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28438. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28439. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28440. 4714, 4714, 4714, 4714, 1, 4714, 4714, 4714,
  28441. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28442. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28443. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28444. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28445. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28446. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28447. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28448. 4714, 4714, 4714, 4714, 4714, 1, 4714, 4714,
  28449. 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
  28450. 4714, 4714, 4714, 4714, 4714, 4714, 1, 4720,
  28451. 1, 1, 1, 4721, 1, 1, 1, 1,
  28452. 1, 1, 1, 1, 1, 1, 1, 1,
  28453. 1, 1, 1, 1, 1, 1, 4720, 4722,
  28454. 4723, 4722, 4722, 4722, 4722, 4722, 4724, 1,
  28455. 4722, 4722, 6, 4722, 4725, 4722, 4722, 4722,
  28456. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28457. 1, 6, 4726, 4722, 1, 4722, 4727, 4722,
  28458. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28459. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28460. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28461. 4722, 1, 1, 1, 4722, 4722, 4722, 4722,
  28462. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28463. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28464. 4722, 4722, 4722, 4722, 4722, 4722, 4722, 4722,
  28465. 4722, 4722, 4722, 4722, 4722, 1, 1, 1,
  28466. 1, 1, 1, 1, 1, 1, 1, 1,
  28467. 1, 1, 1, 1, 1, 1, 1, 1,
  28468. 1, 1, 1, 1, 1, 1, 1, 1,
  28469. 1, 1, 1, 1, 1, 1, 1, 1,
  28470. 1, 1, 1, 1, 1, 1, 1, 1,
  28471. 1, 1, 1, 1, 1, 1, 1, 1,
  28472. 1, 1, 1, 1, 1, 1, 1, 1,
  28473. 1, 1, 1, 1, 1, 1, 1, 1,
  28474. 4728, 4728, 4728, 4728, 4728, 4728, 4728, 4728,
  28475. 4728, 4728, 4728, 4728, 4728, 4728, 4728, 4728,
  28476. 4728, 4728, 4728, 4728, 4728, 4728, 4728, 4728,
  28477. 4728, 4728, 4728, 4728, 4728, 4728, 4729, 4730,
  28478. 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
  28479. 4730, 4730, 4730, 4731, 4730, 4730, 4732, 4733,
  28480. 4733, 4733, 4734, 1, 4735, 1, 1, 1,
  28481. 4736, 1, 1, 1, 1, 1, 1, 1,
  28482. 1, 1, 1, 1, 1, 1, 1, 1,
  28483. 1, 1, 1, 4735, 4612, 4688, 4612, 4612,
  28484. 4612, 4612, 4612, 4737, 1, 4612, 4612, 4738,
  28485. 4612, 4739, 4612, 4612, 4612, 4612, 4612, 4612,
  28486. 4612, 4612, 4612, 4612, 4612, 25, 4738, 26,
  28487. 4612, 1, 4612, 4740, 4612, 4612, 4612, 4612,
  28488. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28489. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28490. 4612, 4612, 4612, 4612, 4612, 4612, 1, 1,
  28491. 1, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28492. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28493. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28494. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  28495. 4612, 4612, 1, 1, 1, 1, 1, 1,
  28496. 1, 1, 1, 1, 1, 1, 1, 1,
  28497. 1, 1, 1, 1, 1, 1, 1, 1,
  28498. 1, 1, 1, 1, 1, 1, 1, 1,
  28499. 1, 1, 1, 1, 1, 1, 1, 1,
  28500. 1, 1, 1, 1, 1, 1, 1, 1,
  28501. 1, 1, 1, 1, 1, 1, 1, 1,
  28502. 1, 1, 1, 1, 1, 1, 1, 1,
  28503. 1, 1, 1, 1, 1, 4613, 4613, 4613,
  28504. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  28505. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  28506. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  28507. 4613, 4613, 4613, 4741, 4614, 4614, 4614, 4614,
  28508. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  28509. 4742, 4614, 4614, 4743, 4744, 4744, 4744, 4745,
  28510. 1, 4746, 1, 1, 1, 4747, 1, 1,
  28511. 1, 1, 1, 1, 1, 1, 1, 1,
  28512. 1, 1, 1, 1, 1, 1, 1, 1,
  28513. 4746, 21, 22, 21, 21, 21, 21, 21,
  28514. 4748, 1, 21, 21, 4749, 21, 4750, 21,
  28515. 21, 21, 21, 21, 21, 21, 21, 21,
  28516. 21, 21, 25, 4749, 26, 21, 1, 21,
  28517. 4751, 21, 21, 21, 21, 21, 21, 21,
  28518. 21, 21, 21, 21, 21, 21, 21, 21,
  28519. 21, 21, 21, 21, 21, 21, 21, 21,
  28520. 21, 21, 21, 1, 1, 1, 21, 21,
  28521. 21, 21, 21, 21, 21, 21, 21, 21,
  28522. 21, 21, 21, 21, 21, 21, 21, 21,
  28523. 21, 21, 21, 21, 21, 21, 21, 21,
  28524. 21, 21, 21, 21, 21, 21, 21, 1,
  28525. 1, 1, 1, 1, 1, 1, 1, 1,
  28526. 1, 1, 1, 1, 1, 1, 1, 1,
  28527. 1, 1, 1, 1, 1, 1, 1, 1,
  28528. 1, 1, 1, 1, 1, 1, 1, 1,
  28529. 1, 1, 1, 1, 1, 1, 1, 1,
  28530. 1, 1, 1, 1, 1, 1, 1, 1,
  28531. 1, 1, 1, 1, 1, 1, 1, 1,
  28532. 1, 1, 1, 1, 1, 1, 1, 1,
  28533. 1, 1, 27, 27, 27, 27, 27, 27,
  28534. 27, 27, 27, 27, 27, 27, 27, 27,
  28535. 27, 27, 27, 27, 27, 27, 27, 27,
  28536. 27, 27, 27, 27, 27, 27, 27, 27,
  28537. 28, 29, 29, 29, 29, 29, 29, 29,
  28538. 29, 29, 29, 29, 29, 30, 29, 29,
  28539. 31, 32, 32, 32, 33, 1, 4752, 1,
  28540. 1, 1, 4753, 1, 1, 1, 1, 1,
  28541. 1, 1, 1, 1, 1, 1, 1, 1,
  28542. 1, 1, 1, 1, 1, 4752, 1, 1,
  28543. 1, 1, 1, 1, 1, 4754, 1, 1,
  28544. 1, 4755, 1, 1, 1, 1, 1, 1,
  28545. 1, 1, 1, 1, 1, 1, 1, 1,
  28546. 4755, 1, 4756, 1, 1, 1, 4757, 1,
  28547. 1, 1, 1, 1, 1, 1, 1, 1,
  28548. 1, 1, 1, 1, 1, 1, 1, 1,
  28549. 1, 4756, 1, 1, 1, 1, 1, 1,
  28550. 1, 4758, 1, 1, 1, 4759, 1, 1,
  28551. 1, 1, 1, 1, 1, 1, 1, 1,
  28552. 1, 1, 1, 1, 4759, 1, 4760, 1,
  28553. 1, 1, 4761, 1, 1, 1, 1, 1,
  28554. 1, 1, 1, 1, 1, 1, 1, 1,
  28555. 1, 1, 1, 1, 1, 4760, 4762, 4763,
  28556. 4762, 4762, 4762, 4762, 4762, 4764, 1, 4762,
  28557. 4762, 6, 4762, 4765, 4762, 4762, 4762, 4762,
  28558. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 1,
  28559. 6, 4726, 4762, 1, 4762, 4727, 4762, 4762,
  28560. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28561. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28562. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28563. 1, 1, 1, 4762, 4762, 4762, 4762, 4762,
  28564. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28565. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28566. 4762, 4762, 4762, 4762, 4762, 4762, 4762, 4762,
  28567. 4762, 4762, 4762, 4762, 1, 1, 1, 1,
  28568. 1, 1, 1, 1, 1, 1, 1, 1,
  28569. 1, 1, 1, 1, 1, 1, 1, 1,
  28570. 1, 1, 1, 1, 1, 1, 1, 1,
  28571. 1, 1, 1, 1, 1, 1, 1, 1,
  28572. 1, 1, 1, 1, 1, 1, 1, 1,
  28573. 1, 1, 1, 1, 1, 1, 1, 1,
  28574. 1, 1, 1, 1, 1, 1, 1, 1,
  28575. 1, 1, 1, 1, 1, 1, 1, 4766,
  28576. 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
  28577. 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
  28578. 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
  28579. 4766, 4766, 4766, 4766, 4766, 4767, 4768, 4768,
  28580. 4768, 4768, 4768, 4768, 4768, 4768, 4768, 4768,
  28581. 4768, 4768, 4769, 4768, 4768, 4770, 4771, 4771,
  28582. 4771, 4772, 1, 4773, 1, 1, 1, 4774,
  28583. 1, 1, 1, 1, 1, 1, 1, 1,
  28584. 1, 1, 1, 1, 1, 1, 1, 1,
  28585. 1, 1, 4773, 3901, 3988, 3901, 3901, 3901,
  28586. 3901, 3901, 4775, 1, 3901, 3901, 4738, 3901,
  28587. 4776, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28588. 3901, 3901, 3901, 3901, 25, 4738, 26, 3901,
  28589. 1, 3901, 4777, 3901, 3901, 3901, 3901, 3901,
  28590. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28591. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28592. 3901, 3901, 3901, 3901, 3901, 1, 1, 1,
  28593. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28594. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28595. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28596. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  28597. 3901, 1, 1, 1, 1, 1, 1, 1,
  28598. 1, 1, 1, 1, 1, 1, 1, 1,
  28599. 1, 1, 1, 1, 1, 1, 1, 1,
  28600. 1, 1, 1, 1, 1, 1, 1, 1,
  28601. 1, 1, 1, 1, 1, 1, 1, 1,
  28602. 1, 1, 1, 1, 1, 1, 1, 1,
  28603. 1, 1, 1, 1, 1, 1, 1, 1,
  28604. 1, 1, 1, 1, 1, 1, 1, 1,
  28605. 1, 1, 1, 1, 3902, 3902, 3902, 3902,
  28606. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  28607. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  28608. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  28609. 3902, 3902, 4778, 3903, 3903, 3903, 3903, 3903,
  28610. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 4779,
  28611. 3903, 3903, 4780, 4781, 4781, 4781, 4782, 1,
  28612. 4783, 1, 1, 1, 4784, 1, 1, 1,
  28613. 1, 1, 1, 1, 1, 1, 1, 1,
  28614. 1, 1, 1, 1, 1, 1, 1, 4783,
  28615. 21, 22, 21, 21, 21, 21, 21, 4785,
  28616. 1, 21, 21, 4749, 21, 4786, 21, 21,
  28617. 21, 21, 21, 21, 21, 21, 21, 21,
  28618. 21, 25, 4749, 26, 21, 1, 21, 4787,
  28619. 21, 21, 21, 21, 21, 21, 21, 21,
  28620. 21, 21, 21, 21, 21, 21, 21, 21,
  28621. 21, 21, 21, 21, 21, 21, 21, 21,
  28622. 21, 21, 1, 1, 1, 21, 21, 21,
  28623. 21, 21, 21, 21, 21, 21, 21, 21,
  28624. 21, 21, 21, 21, 21, 21, 21, 21,
  28625. 21, 21, 21, 21, 21, 21, 21, 21,
  28626. 21, 21, 21, 21, 21, 21, 1, 1,
  28627. 1, 1, 1, 1, 1, 1, 1, 1,
  28628. 1, 1, 1, 1, 1, 1, 1, 1,
  28629. 1, 1, 1, 1, 1, 1, 1, 1,
  28630. 1, 1, 1, 1, 1, 1, 1, 1,
  28631. 1, 1, 1, 1, 1, 1, 1, 1,
  28632. 1, 1, 1, 1, 1, 1, 1, 1,
  28633. 1, 1, 1, 1, 1, 1, 1, 1,
  28634. 1, 1, 1, 1, 1, 1, 1, 1,
  28635. 1, 27, 27, 27, 27, 27, 27, 27,
  28636. 27, 27, 27, 27, 27, 27, 27, 27,
  28637. 27, 27, 27, 27, 27, 27, 27, 27,
  28638. 27, 27, 27, 27, 27, 27, 27, 28,
  28639. 29, 29, 29, 29, 29, 29, 29, 29,
  28640. 29, 29, 29, 29, 30, 29, 29, 31,
  28641. 32, 32, 32, 33, 1, 4788, 1, 1,
  28642. 1, 4789, 1, 1, 1, 1, 1, 1,
  28643. 1, 1, 1, 1, 1, 1, 1, 1,
  28644. 1, 1, 1, 1, 4788, 60, 61, 60,
  28645. 60, 60, 60, 60, 4790, 1, 60, 60,
  28646. 4791, 60, 4792, 60, 60, 60, 60, 60,
  28647. 60, 60, 60, 60, 60, 60, 64, 4791,
  28648. 65, 60, 1, 60, 4793, 60, 60, 60,
  28649. 60, 60, 60, 60, 60, 60, 60, 60,
  28650. 60, 60, 60, 60, 60, 60, 60, 60,
  28651. 60, 60, 60, 60, 60, 60, 60, 1,
  28652. 1, 1, 60, 60, 60, 60, 60, 60,
  28653. 60, 60, 60, 60, 60, 60, 60, 60,
  28654. 60, 60, 60, 60, 60, 60, 60, 60,
  28655. 60, 60, 60, 60, 60, 60, 60, 60,
  28656. 60, 60, 60, 1, 1, 1, 1, 1,
  28657. 1, 1, 1, 1, 1, 1, 1, 1,
  28658. 1, 1, 1, 1, 1, 1, 1, 1,
  28659. 1, 1, 1, 1, 1, 1, 1, 1,
  28660. 1, 1, 1, 1, 1, 1, 1, 1,
  28661. 1, 1, 1, 1, 1, 1, 1, 1,
  28662. 1, 1, 1, 1, 1, 1, 1, 1,
  28663. 1, 1, 1, 1, 1, 1, 1, 1,
  28664. 1, 1, 1, 1, 1, 1, 66, 66,
  28665. 66, 66, 66, 66, 66, 66, 66, 66,
  28666. 66, 66, 66, 66, 66, 66, 66, 66,
  28667. 66, 66, 66, 66, 66, 66, 66, 66,
  28668. 66, 66, 66, 66, 67, 68, 68, 68,
  28669. 68, 68, 68, 68, 68, 68, 68, 68,
  28670. 68, 69, 68, 68, 70, 71, 71, 71,
  28671. 72, 1, 4794, 1, 1, 1, 4795, 1,
  28672. 1, 1, 1, 1, 1, 1, 1, 1,
  28673. 1, 1, 1, 1, 1, 1, 1, 1,
  28674. 1, 4794, 160, 22, 160, 160, 160, 160,
  28675. 160, 4796, 1, 160, 160, 4755, 160, 4786,
  28676. 160, 160, 160, 160, 160, 160, 160, 160,
  28677. 160, 160, 160, 25, 4755, 26, 160, 1,
  28678. 160, 4797, 160, 160, 160, 160, 160, 160,
  28679. 160, 160, 160, 160, 160, 160, 160, 160,
  28680. 160, 160, 160, 160, 160, 160, 160, 160,
  28681. 160, 160, 160, 160, 1, 1, 1, 160,
  28682. 160, 160, 160, 160, 160, 160, 160, 160,
  28683. 160, 160, 160, 160, 160, 160, 160, 160,
  28684. 160, 160, 160, 160, 160, 160, 160, 160,
  28685. 160, 160, 160, 160, 160, 160, 160, 160,
  28686. 1, 1, 1, 1, 1, 1, 1, 1,
  28687. 1, 1, 1, 1, 1, 1, 1, 1,
  28688. 1, 1, 1, 1, 1, 1, 1, 1,
  28689. 1, 1, 1, 1, 1, 1, 1, 1,
  28690. 1, 1, 1, 1, 1, 1, 1, 1,
  28691. 1, 1, 1, 1, 1, 1, 1, 1,
  28692. 1, 1, 1, 1, 1, 1, 1, 1,
  28693. 1, 1, 1, 1, 1, 1, 1, 1,
  28694. 1, 1, 1, 163, 163, 163, 163, 163,
  28695. 163, 163, 163, 163, 163, 163, 163, 163,
  28696. 163, 163, 163, 163, 163, 163, 163, 163,
  28697. 163, 163, 163, 163, 163, 163, 163, 163,
  28698. 163, 164, 165, 165, 165, 165, 165, 165,
  28699. 165, 165, 165, 165, 165, 165, 166, 165,
  28700. 165, 167, 168, 168, 168, 169, 1, 4794,
  28701. 1, 1, 1, 4795, 1, 1, 1, 1,
  28702. 1, 1, 1, 1, 1, 1, 1, 1,
  28703. 1, 1, 1, 1, 1, 1, 4794, 21,
  28704. 22, 21, 21, 21, 21, 21, 4796, 1,
  28705. 21, 21, 4755, 21, 4786, 21, 21, 21,
  28706. 21, 21, 21, 21, 21, 21, 21, 21,
  28707. 25, 4755, 26, 21, 1, 21, 4797, 21,
  28708. 21, 21, 21, 21, 21, 21, 21, 21,
  28709. 21, 21, 21, 21, 21, 21, 21, 21,
  28710. 21, 21, 21, 21, 21, 21, 21, 21,
  28711. 21, 1, 1, 1, 21, 21, 21, 21,
  28712. 21, 21, 21, 21, 21, 21, 21, 21,
  28713. 21, 21, 21, 21, 21, 21, 21, 21,
  28714. 21, 21, 21, 21, 21, 21, 21, 21,
  28715. 21, 21, 21, 21, 21, 1, 1, 1,
  28716. 1, 1, 1, 1, 1, 1, 1, 1,
  28717. 1, 1, 1, 1, 1, 1, 1, 1,
  28718. 1, 1, 1, 1, 1, 1, 1, 1,
  28719. 1, 1, 1, 1, 1, 1, 1, 1,
  28720. 1, 1, 1, 1, 1, 1, 1, 1,
  28721. 1, 1, 1, 1, 1, 1, 1, 1,
  28722. 1, 1, 1, 1, 1, 1, 1, 1,
  28723. 1, 1, 1, 1, 1, 1, 1, 1,
  28724. 27, 27, 27, 27, 27, 27, 27, 27,
  28725. 27, 27, 27, 27, 27, 27, 27, 27,
  28726. 27, 27, 27, 27, 27, 27, 27, 27,
  28727. 27, 27, 27, 27, 27, 27, 28, 29,
  28728. 29, 29, 29, 29, 29, 29, 29, 29,
  28729. 29, 29, 29, 30, 29, 29, 31, 32,
  28730. 32, 32, 33, 1, 4798, 1, 1, 1,
  28731. 4799, 1, 1, 1, 1, 1, 1, 1,
  28732. 1, 1, 1, 1, 1, 1, 1, 1,
  28733. 1, 1, 1, 4798, 60, 61, 60, 60,
  28734. 60, 60, 60, 4800, 1, 60, 60, 4759,
  28735. 60, 4792, 60, 60, 60, 60, 60, 60,
  28736. 60, 60, 60, 60, 60, 64, 4759, 65,
  28737. 60, 1, 60, 4801, 60, 60, 60, 60,
  28738. 60, 60, 60, 60, 60, 60, 60, 60,
  28739. 60, 60, 60, 60, 60, 60, 60, 60,
  28740. 60, 60, 60, 60, 60, 60, 1, 1,
  28741. 1, 60, 60, 60, 60, 60, 60, 60,
  28742. 60, 60, 60, 60, 60, 60, 60, 60,
  28743. 60, 60, 60, 60, 60, 60, 60, 60,
  28744. 60, 60, 60, 60, 60, 60, 60, 60,
  28745. 60, 60, 1, 1, 1, 1, 1, 1,
  28746. 1, 1, 1, 1, 1, 1, 1, 1,
  28747. 1, 1, 1, 1, 1, 1, 1, 1,
  28748. 1, 1, 1, 1, 1, 1, 1, 1,
  28749. 1, 1, 1, 1, 1, 1, 1, 1,
  28750. 1, 1, 1, 1, 1, 1, 1, 1,
  28751. 1, 1, 1, 1, 1, 1, 1, 1,
  28752. 1, 1, 1, 1, 1, 1, 1, 1,
  28753. 1, 1, 1, 1, 1, 66, 66, 66,
  28754. 66, 66, 66, 66, 66, 66, 66, 66,
  28755. 66, 66, 66, 66, 66, 66, 66, 66,
  28756. 66, 66, 66, 66, 66, 66, 66, 66,
  28757. 66, 66, 66, 67, 68, 68, 68, 68,
  28758. 68, 68, 68, 68, 68, 68, 68, 68,
  28759. 69, 68, 68, 70, 71, 71, 71, 72,
  28760. 1, 4802, 1, 1, 1, 4803, 1, 1,
  28761. 1, 1, 1, 1, 1, 1, 1, 1,
  28762. 1, 1, 1, 1, 1, 1, 1, 1,
  28763. 4802, 630, 631, 630, 630, 630, 630, 630,
  28764. 4804, 1, 630, 630, 6, 630, 633, 630,
  28765. 630, 630, 630, 630, 630, 630, 630, 630,
  28766. 630, 630, 1, 6, 634, 630, 1, 630,
  28767. 635, 630, 630, 630, 630, 630, 630, 630,
  28768. 630, 630, 630, 630, 630, 630, 630, 630,
  28769. 630, 630, 630, 630, 630, 630, 630, 630,
  28770. 630, 630, 630, 1, 1, 1, 630, 630,
  28771. 630, 630, 630, 630, 630, 630, 630, 630,
  28772. 630, 630, 630, 630, 630, 630, 630, 630,
  28773. 630, 630, 630, 630, 630, 630, 630, 630,
  28774. 630, 630, 630, 630, 630, 630, 630, 1,
  28775. 1, 1, 1, 1, 1, 1, 1, 1,
  28776. 1, 1, 1, 1, 1, 1, 1, 1,
  28777. 1, 1, 1, 1, 1, 1, 1, 1,
  28778. 1, 1, 1, 1, 1, 1, 1, 1,
  28779. 1, 1, 1, 1, 1, 1, 1, 1,
  28780. 1, 1, 1, 1, 1, 1, 1, 1,
  28781. 1, 1, 1, 1, 1, 1, 1, 1,
  28782. 1, 1, 1, 1, 1, 1, 1, 1,
  28783. 1, 1, 636, 636, 636, 636, 636, 636,
  28784. 636, 636, 636, 636, 636, 636, 636, 636,
  28785. 636, 636, 636, 636, 636, 636, 636, 636,
  28786. 636, 636, 636, 636, 636, 636, 636, 636,
  28787. 637, 638, 638, 638, 638, 638, 638, 638,
  28788. 638, 638, 638, 638, 638, 639, 638, 638,
  28789. 640, 641, 641, 641, 642, 1, 463, 1,
  28790. 1, 1, 4805, 1, 1, 1, 1, 1,
  28791. 1, 1, 1, 1, 1, 1, 1, 1,
  28792. 1, 1, 1, 1, 1, 463, 645, 646,
  28793. 645, 645, 645, 645, 645, 4806, 1, 645,
  28794. 645, 6, 645, 648, 645, 645, 645, 645,
  28795. 645, 645, 645, 645, 645, 645, 645, 1,
  28796. 6, 545, 645, 1, 645, 1, 645, 645,
  28797. 645, 645, 645, 645, 645, 645, 645, 645,
  28798. 645, 645, 645, 645, 645, 645, 645, 645,
  28799. 645, 645, 645, 645, 645, 645, 645, 645,
  28800. 1, 1, 1, 645, 645, 645, 645, 645,
  28801. 645, 645, 645, 645, 645, 645, 645, 645,
  28802. 645, 645, 645, 645, 645, 645, 645, 645,
  28803. 645, 645, 645, 645, 645, 645, 645, 645,
  28804. 645, 645, 645, 645, 1, 1, 1, 1,
  28805. 1, 1, 1, 1, 1, 1, 1, 1,
  28806. 1, 1, 1, 1, 1, 1, 1, 1,
  28807. 1, 1, 1, 1, 1, 1, 1, 1,
  28808. 1, 1, 1, 1, 1, 1, 1, 1,
  28809. 1, 1, 1, 1, 1, 1, 1, 1,
  28810. 1, 1, 1, 1, 1, 1, 1, 1,
  28811. 1, 1, 1, 1, 1, 1, 1, 1,
  28812. 1, 1, 1, 1, 1, 1, 1, 649,
  28813. 649, 649, 649, 649, 649, 649, 649, 649,
  28814. 649, 649, 649, 649, 649, 649, 649, 649,
  28815. 649, 649, 649, 649, 649, 649, 649, 649,
  28816. 649, 649, 649, 649, 649, 650, 651, 651,
  28817. 651, 651, 651, 651, 651, 651, 651, 651,
  28818. 651, 651, 652, 651, 651, 653, 654, 654,
  28819. 654, 655, 1, 4807, 1, 1, 1, 4808,
  28820. 1, 1, 1, 1, 1, 1, 1, 1,
  28821. 1, 1, 1, 1, 1, 1, 1, 1,
  28822. 1, 1, 4807, 1115, 1116, 1115, 1115, 1115,
  28823. 1115, 1115, 4809, 1, 1115, 1115, 4810, 1115,
  28824. 1118, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28825. 1115, 1115, 1115, 1115, 1, 4810, 550, 1115,
  28826. 1, 1115, 1, 1115, 1115, 1115, 1115, 1115,
  28827. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28828. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28829. 1115, 1115, 1115, 1115, 1115, 1, 1, 1,
  28830. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28831. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28832. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28833. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  28834. 1115, 1, 1, 1, 1, 1, 1, 1,
  28835. 1, 1, 1, 1, 1, 1, 1, 1,
  28836. 1, 1, 1, 1, 1, 1, 1, 1,
  28837. 1, 1, 1, 1, 1, 1, 1, 1,
  28838. 1, 1, 1, 1, 1, 1, 1, 1,
  28839. 1, 1, 1, 1, 1, 1, 1, 1,
  28840. 1, 1, 1, 1, 1, 1, 1, 1,
  28841. 1, 1, 1, 1, 1, 1, 1, 1,
  28842. 1, 1, 1, 1, 1119, 1119, 1119, 1119,
  28843. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  28844. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  28845. 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119,
  28846. 1119, 1119, 1120, 1121, 1121, 1121, 1121, 1121,
  28847. 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1122,
  28848. 1121, 1121, 1123, 1124, 1124, 1124, 1125, 1,
  28849. 183, 1, 1, 1, 4811, 1, 1, 1,
  28850. 1, 1, 1, 1, 1, 1, 1, 1,
  28851. 1, 1, 1, 1, 1, 1, 1, 183,
  28852. 1, 1, 1, 1, 1, 1, 1, 4812,
  28853. 1, 1, 1, 6, 1, 1, 1, 1,
  28854. 1, 1, 1, 1, 1, 1, 1, 1,
  28855. 1, 1, 6, 1, 1975, 1, 1, 1,
  28856. 4813, 1, 1, 1, 1, 1, 1, 1,
  28857. 1, 1, 1, 1, 1, 1, 1, 1,
  28858. 1, 1, 1, 1975, 1, 1, 1, 1,
  28859. 1, 1, 1, 4814, 1, 1, 1, 4810,
  28860. 1, 1, 1, 1, 1, 1, 1, 1,
  28861. 1, 1, 1, 1, 1, 1, 4810, 1,
  28862. 4815, 1, 1, 1, 4816, 1, 1, 1,
  28863. 1, 1, 1, 1, 1, 1, 1, 1,
  28864. 1, 1, 1, 1, 1, 1, 1, 4815,
  28865. 3617, 3618, 3617, 3617, 3617, 3617, 3617, 4817,
  28866. 1, 3617, 3617, 4818, 3617, 4819, 3617, 3617,
  28867. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28868. 3617, 25, 4818, 26, 3617, 1, 3617, 24,
  28869. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28870. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28871. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28872. 3617, 3617, 1, 1, 1, 3617, 3617, 3617,
  28873. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28874. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28875. 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
  28876. 3617, 3617, 3617, 3617, 3617, 3617, 1, 1,
  28877. 1, 1, 1, 1, 1, 1, 1, 1,
  28878. 1, 1, 1, 1, 1, 1, 1, 1,
  28879. 1, 1, 1, 1, 1, 1, 1, 1,
  28880. 1, 1, 1, 1, 1, 1, 1, 1,
  28881. 1, 1, 1, 1, 1, 1, 1, 1,
  28882. 1, 1, 1, 1, 1, 1, 1, 1,
  28883. 1, 1, 1, 1, 1, 1, 1, 1,
  28884. 1, 1, 1, 1, 1, 1, 1, 1,
  28885. 1, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  28886. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  28887. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
  28888. 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3623,
  28889. 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
  28890. 3624, 3624, 3624, 3624, 3625, 3624, 3624, 3626,
  28891. 3627, 3627, 3627, 3628, 1, 4815, 1, 1,
  28892. 1, 4816, 1, 1, 1, 1, 1, 1,
  28893. 1, 1, 1, 1, 1, 1, 1, 1,
  28894. 1, 1, 1, 1, 4815, 21, 22, 21,
  28895. 21, 21, 21, 21, 4817, 1, 21, 21,
  28896. 4818, 21, 4820, 21, 21, 21, 21, 21,
  28897. 21, 21, 21, 21, 21, 21, 25, 4818,
  28898. 26, 21, 1, 21, 24, 21, 21, 21,
  28899. 21, 21, 21, 21, 21, 21, 21, 21,
  28900. 21, 21, 21, 21, 21, 21, 21, 21,
  28901. 21, 21, 21, 21, 21, 21, 21, 1,
  28902. 1, 1, 21, 21, 21, 21, 21, 21,
  28903. 21, 21, 21, 21, 21, 21, 21, 21,
  28904. 21, 21, 21, 21, 21, 21, 21, 21,
  28905. 21, 21, 21, 21, 21, 21, 21, 21,
  28906. 21, 21, 21, 1, 1, 1, 1, 1,
  28907. 1, 1, 1, 1, 1, 1, 1, 1,
  28908. 1, 1, 1, 1, 1, 1, 1, 1,
  28909. 1, 1, 1, 1, 1, 1, 1, 1,
  28910. 1, 1, 1, 1, 1, 1, 1, 1,
  28911. 1, 1, 1, 1, 1, 1, 1, 1,
  28912. 1, 1, 1, 1, 1, 1, 1, 1,
  28913. 1, 1, 1, 1, 1, 1, 1, 1,
  28914. 1, 1, 1, 1, 1, 1, 27, 27,
  28915. 27, 27, 27, 27, 27, 27, 27, 27,
  28916. 27, 27, 27, 27, 27, 27, 27, 27,
  28917. 27, 27, 27, 27, 27, 27, 27, 27,
  28918. 27, 27, 27, 27, 28, 29, 29, 29,
  28919. 29, 29, 29, 29, 29, 29, 29, 29,
  28920. 29, 30, 29, 29, 31, 32, 32, 32,
  28921. 33, 1, 4821, 1, 1, 1, 4822, 1,
  28922. 1, 1, 1, 1, 1, 1, 1, 1,
  28923. 1, 1, 1, 1, 1, 1, 1, 1,
  28924. 1, 4821, 60, 61, 60, 60, 60, 60,
  28925. 60, 4823, 1, 60, 60, 4824, 60, 4825,
  28926. 60, 60, 60, 60, 60, 60, 60, 60,
  28927. 60, 60, 60, 64, 4824, 65, 60, 1,
  28928. 60, 63, 60, 60, 60, 60, 60, 60,
  28929. 60, 60, 60, 60, 60, 60, 60, 60,
  28930. 60, 60, 60, 60, 60, 60, 60, 60,
  28931. 60, 60, 60, 60, 1, 1, 1, 60,
  28932. 60, 60, 60, 60, 60, 60, 60, 60,
  28933. 60, 60, 60, 60, 60, 60, 60, 60,
  28934. 60, 60, 60, 60, 60, 60, 60, 60,
  28935. 60, 60, 60, 60, 60, 60, 60, 60,
  28936. 1, 1, 1, 1, 1, 1, 1, 1,
  28937. 1, 1, 1, 1, 1, 1, 1, 1,
  28938. 1, 1, 1, 1, 1, 1, 1, 1,
  28939. 1, 1, 1, 1, 1, 1, 1, 1,
  28940. 1, 1, 1, 1, 1, 1, 1, 1,
  28941. 1, 1, 1, 1, 1, 1, 1, 1,
  28942. 1, 1, 1, 1, 1, 1, 1, 1,
  28943. 1, 1, 1, 1, 1, 1, 1, 1,
  28944. 1, 1, 1, 66, 66, 66, 66, 66,
  28945. 66, 66, 66, 66, 66, 66, 66, 66,
  28946. 66, 66, 66, 66, 66, 66, 66, 66,
  28947. 66, 66, 66, 66, 66, 66, 66, 66,
  28948. 66, 67, 68, 68, 68, 68, 68, 68,
  28949. 68, 68, 68, 68, 68, 68, 69, 68,
  28950. 68, 70, 71, 71, 71, 72, 1, 4815,
  28951. 1, 1, 1, 4816, 1, 1, 1, 1,
  28952. 1, 1, 1, 1, 1, 1, 1, 1,
  28953. 1, 1, 1, 1, 1, 1, 4815, 3634,
  28954. 22, 3634, 3634, 3634, 3634, 3634, 4817, 1,
  28955. 3634, 3634, 4818, 3634, 4820, 3634, 3634, 3634,
  28956. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28957. 25, 4818, 26, 3634, 1, 3634, 24, 3634,
  28958. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28959. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28960. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28961. 3634, 1, 1, 1, 3634, 3634, 3634, 3634,
  28962. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28963. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28964. 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634,
  28965. 3634, 3634, 3634, 3634, 3634, 1, 1, 1,
  28966. 1, 1, 1, 1, 1, 1, 1, 1,
  28967. 1, 1, 1, 1, 1, 1, 1, 1,
  28968. 1, 1, 1, 1, 1, 1, 1, 1,
  28969. 1, 1, 1, 1, 1, 1, 1, 1,
  28970. 1, 1, 1, 1, 1, 1, 1, 1,
  28971. 1, 1, 1, 1, 1, 1, 1, 1,
  28972. 1, 1, 1, 1, 1, 1, 1, 1,
  28973. 1, 1, 1, 1, 1, 1, 1, 1,
  28974. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  28975. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  28976. 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
  28977. 3636, 3636, 3636, 3636, 3636, 3636, 3637, 3638,
  28978. 3638, 3638, 3638, 3638, 3638, 3638, 3638, 3638,
  28979. 3638, 3638, 3638, 3639, 3638, 3638, 3640, 3641,
  28980. 3641, 3641, 3642, 1, 4826, 1, 1, 1,
  28981. 4827, 1, 1, 1, 1, 1, 1, 1,
  28982. 1, 1, 1, 1, 1, 1, 1, 1,
  28983. 1, 1, 1, 4826, 3683, 3618, 3683, 3683,
  28984. 3683, 3683, 3683, 4828, 1, 3683, 3683, 4818,
  28985. 3683, 3684, 3683, 3683, 3683, 3683, 3683, 3683,
  28986. 3683, 3683, 3683, 3683, 3683, 25, 4818, 26,
  28987. 3683, 1, 3683, 24, 3683, 3683, 3683, 3683,
  28988. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28989. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28990. 3683, 3683, 3683, 3683, 3683, 3683, 1, 1,
  28991. 1, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28992. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28993. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28994. 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
  28995. 3683, 3683, 1, 1, 1, 1, 1, 1,
  28996. 1, 1, 1, 1, 1, 1, 1, 1,
  28997. 1, 1, 1, 1, 1, 1, 1, 1,
  28998. 1, 1, 1, 1, 1, 1, 1, 1,
  28999. 1, 1, 1, 1, 1, 1, 1, 1,
  29000. 1, 1, 1, 1, 1, 1, 1, 1,
  29001. 1, 1, 1, 1, 1, 1, 1, 1,
  29002. 1, 1, 1, 1, 1, 1, 1, 1,
  29003. 1, 1, 1, 1, 1, 3685, 3685, 3685,
  29004. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  29005. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  29006. 3685, 3685, 3685, 3685, 3685, 3685, 3685, 3685,
  29007. 3685, 3685, 3685, 3686, 3687, 3687, 3687, 3687,
  29008. 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687,
  29009. 3688, 3687, 3687, 3689, 3690, 3690, 3690, 3691,
  29010. 1, 4826, 1, 1, 1, 4827, 1, 1,
  29011. 1, 1, 1, 1, 1, 1, 1, 1,
  29012. 1, 1, 1, 1, 1, 1, 1, 1,
  29013. 4826, 21, 22, 21, 21, 21, 21, 21,
  29014. 4828, 1, 21, 21, 4818, 21, 24, 21,
  29015. 21, 21, 21, 21, 21, 21, 21, 21,
  29016. 21, 21, 25, 4818, 26, 21, 1, 21,
  29017. 24, 21, 21, 21, 21, 21, 21, 21,
  29018. 21, 21, 21, 21, 21, 21, 21, 21,
  29019. 21, 21, 21, 21, 21, 21, 21, 21,
  29020. 21, 21, 21, 1, 1, 1, 21, 21,
  29021. 21, 21, 21, 21, 21, 21, 21, 21,
  29022. 21, 21, 21, 21, 21, 21, 21, 21,
  29023. 21, 21, 21, 21, 21, 21, 21, 21,
  29024. 21, 21, 21, 21, 21, 21, 21, 1,
  29025. 1, 1, 1, 1, 1, 1, 1, 1,
  29026. 1, 1, 1, 1, 1, 1, 1, 1,
  29027. 1, 1, 1, 1, 1, 1, 1, 1,
  29028. 1, 1, 1, 1, 1, 1, 1, 1,
  29029. 1, 1, 1, 1, 1, 1, 1, 1,
  29030. 1, 1, 1, 1, 1, 1, 1, 1,
  29031. 1, 1, 1, 1, 1, 1, 1, 1,
  29032. 1, 1, 1, 1, 1, 1, 1, 1,
  29033. 1, 1, 27, 27, 27, 27, 27, 27,
  29034. 27, 27, 27, 27, 27, 27, 27, 27,
  29035. 27, 27, 27, 27, 27, 27, 27, 27,
  29036. 27, 27, 27, 27, 27, 27, 27, 27,
  29037. 28, 29, 29, 29, 29, 29, 29, 29,
  29038. 29, 29, 29, 29, 29, 30, 29, 29,
  29039. 31, 32, 32, 32, 33, 1, 4829, 1,
  29040. 1, 1, 4830, 1, 1, 1, 1, 1,
  29041. 1, 1, 1, 1, 1, 1, 1, 1,
  29042. 1, 1, 1, 1, 1, 4829, 60, 61,
  29043. 60, 60, 60, 60, 60, 4831, 1, 60,
  29044. 60, 4824, 60, 63, 60, 60, 60, 60,
  29045. 60, 60, 60, 60, 60, 60, 60, 64,
  29046. 4824, 65, 60, 1, 60, 63, 60, 60,
  29047. 60, 60, 60, 60, 60, 60, 60, 60,
  29048. 60, 60, 60, 60, 60, 60, 60, 60,
  29049. 60, 60, 60, 60, 60, 60, 60, 60,
  29050. 1, 1, 1, 60, 60, 60, 60, 60,
  29051. 60, 60, 60, 60, 60, 60, 60, 60,
  29052. 60, 60, 60, 60, 60, 60, 60, 60,
  29053. 60, 60, 60, 60, 60, 60, 60, 60,
  29054. 60, 60, 60, 60, 1, 1, 1, 1,
  29055. 1, 1, 1, 1, 1, 1, 1, 1,
  29056. 1, 1, 1, 1, 1, 1, 1, 1,
  29057. 1, 1, 1, 1, 1, 1, 1, 1,
  29058. 1, 1, 1, 1, 1, 1, 1, 1,
  29059. 1, 1, 1, 1, 1, 1, 1, 1,
  29060. 1, 1, 1, 1, 1, 1, 1, 1,
  29061. 1, 1, 1, 1, 1, 1, 1, 1,
  29062. 1, 1, 1, 1, 1, 1, 1, 66,
  29063. 66, 66, 66, 66, 66, 66, 66, 66,
  29064. 66, 66, 66, 66, 66, 66, 66, 66,
  29065. 66, 66, 66, 66, 66, 66, 66, 66,
  29066. 66, 66, 66, 66, 66, 67, 68, 68,
  29067. 68, 68, 68, 68, 68, 68, 68, 68,
  29068. 68, 68, 69, 68, 68, 70, 71, 71,
  29069. 71, 72, 1, 4832, 1, 1, 1, 4833,
  29070. 1, 1, 1, 1, 1, 1, 1, 1,
  29071. 1, 1, 1, 1, 1, 1, 1, 1,
  29072. 1, 1, 4832, 3709, 3710, 3709, 3709, 3709,
  29073. 3709, 3709, 4834, 1, 3709, 3709, 4818, 3709,
  29074. 3620, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29075. 3709, 3709, 3709, 3709, 1, 4818, 1, 3709,
  29076. 1, 3709, 1, 3709, 3709, 3709, 3709, 3709,
  29077. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29078. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29079. 3709, 3709, 3709, 3709, 3709, 1, 1, 1,
  29080. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29081. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29082. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29083. 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
  29084. 3709, 1, 1, 1, 1, 1, 1, 1,
  29085. 1, 1, 1, 1, 1, 1, 1, 1,
  29086. 1, 1, 1, 1, 1, 1, 1, 1,
  29087. 1, 1, 1, 1, 1, 1, 1, 1,
  29088. 1, 1, 1, 1, 1, 1, 1, 1,
  29089. 1, 1, 1, 1, 1, 1, 1, 1,
  29090. 1, 1, 1, 1, 1, 1, 1, 1,
  29091. 1, 1, 1, 1, 1, 1, 1, 1,
  29092. 1, 1, 1, 1, 3711, 3711, 3711, 3711,
  29093. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  29094. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  29095. 3711, 3711, 3711, 3711, 3711, 3711, 3711, 3711,
  29096. 3711, 3711, 3712, 3713, 3713, 3713, 3713, 3713,
  29097. 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3714,
  29098. 3713, 3713, 3715, 3716, 3716, 3716, 3717, 1,
  29099. 4832, 1, 1, 1, 4833, 1, 1, 1,
  29100. 1, 1, 1, 1, 1, 1, 1, 1,
  29101. 1, 1, 1, 1, 1, 1, 1, 4832,
  29102. 1, 1, 1, 1, 1, 1, 1, 4834,
  29103. 1, 1, 1, 4818, 1, 1, 1, 1,
  29104. 1, 1, 1, 1, 1, 1, 1, 1,
  29105. 1, 1, 4818, 1, 4835, 1, 1, 1,
  29106. 4836, 1, 1, 1, 1, 1, 1, 1,
  29107. 1, 1, 1, 1, 1, 1, 1, 1,
  29108. 1, 1, 1, 4835, 1, 1, 1, 1,
  29109. 1, 1, 1, 4837, 1, 1, 1, 4824,
  29110. 1, 1, 1, 1, 1, 1, 1, 1,
  29111. 1, 1, 1, 1, 1, 1, 4824, 1,
  29112. 4838, 1, 1, 1, 4839, 1, 1, 1,
  29113. 1, 1, 1, 1, 1, 1, 1, 1,
  29114. 1, 1, 1, 1, 1, 1, 1, 4838,
  29115. 3867, 3988, 3867, 3867, 3867, 3867, 3867, 4840,
  29116. 1, 3867, 3867, 4738, 3867, 4841, 3867, 3867,
  29117. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29118. 3867, 25, 4738, 26, 3867, 1, 3867, 4777,
  29119. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29120. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29121. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29122. 3867, 3867, 1, 1, 1, 3867, 3867, 3867,
  29123. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29124. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29125. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29126. 3867, 3867, 3867, 3867, 3867, 3867, 1, 1,
  29127. 1, 1, 1, 1, 1, 1, 1, 1,
  29128. 1, 1, 1, 1, 1, 1, 1, 1,
  29129. 1, 1, 1, 1, 1, 1, 1, 1,
  29130. 1, 1, 1, 1, 1, 1, 1, 1,
  29131. 1, 1, 1, 1, 1, 1, 1, 1,
  29132. 1, 1, 1, 1, 1, 1, 1, 1,
  29133. 1, 1, 1, 1, 1, 1, 1, 1,
  29134. 1, 1, 1, 1, 1, 1, 1, 1,
  29135. 1, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29136. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29137. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29138. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3990,
  29139. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  29140. 3869, 3869, 3869, 3869, 3991, 3869, 3869, 3992,
  29141. 3993, 3993, 3993, 3994, 1, 4842, 1, 1,
  29142. 1, 4843, 1, 1, 1, 1, 1, 1,
  29143. 1, 1, 1, 1, 1, 1, 1, 1,
  29144. 1, 1, 1, 1, 4842, 21, 22, 21,
  29145. 21, 21, 21, 21, 4844, 1, 21, 21,
  29146. 4749, 21, 24, 21, 21, 21, 21, 21,
  29147. 21, 21, 21, 21, 21, 21, 25, 4749,
  29148. 26, 21, 1, 21, 4787, 21, 21, 21,
  29149. 21, 21, 21, 21, 21, 21, 21, 21,
  29150. 21, 21, 21, 21, 21, 21, 21, 21,
  29151. 21, 21, 21, 21, 21, 21, 21, 1,
  29152. 1, 1, 21, 21, 21, 21, 21, 21,
  29153. 21, 21, 21, 21, 21, 21, 21, 21,
  29154. 21, 21, 21, 21, 21, 21, 21, 21,
  29155. 21, 21, 21, 21, 21, 21, 21, 21,
  29156. 21, 21, 21, 1, 1, 1, 1, 1,
  29157. 1, 1, 1, 1, 1, 1, 1, 1,
  29158. 1, 1, 1, 1, 1, 1, 1, 1,
  29159. 1, 1, 1, 1, 1, 1, 1, 1,
  29160. 1, 1, 1, 1, 1, 1, 1, 1,
  29161. 1, 1, 1, 1, 1, 1, 1, 1,
  29162. 1, 1, 1, 1, 1, 1, 1, 1,
  29163. 1, 1, 1, 1, 1, 1, 1, 1,
  29164. 1, 1, 1, 1, 1, 1, 27, 27,
  29165. 27, 27, 27, 27, 27, 27, 27, 27,
  29166. 27, 27, 27, 27, 27, 27, 27, 27,
  29167. 27, 27, 27, 27, 27, 27, 27, 27,
  29168. 27, 27, 27, 27, 28, 29, 29, 29,
  29169. 29, 29, 29, 29, 29, 29, 29, 29,
  29170. 29, 30, 29, 29, 31, 32, 32, 32,
  29171. 33, 1, 4845, 1, 1, 1, 4846, 1,
  29172. 1, 1, 1, 1, 1, 1, 1, 1,
  29173. 1, 1, 1, 1, 1, 1, 1, 1,
  29174. 1, 4845, 60, 61, 60, 60, 60, 60,
  29175. 60, 4847, 1, 60, 60, 4791, 60, 63,
  29176. 60, 60, 60, 60, 60, 60, 60, 60,
  29177. 60, 60, 60, 64, 4791, 65, 60, 1,
  29178. 60, 4793, 60, 60, 60, 60, 60, 60,
  29179. 60, 60, 60, 60, 60, 60, 60, 60,
  29180. 60, 60, 60, 60, 60, 60, 60, 60,
  29181. 60, 60, 60, 60, 1, 1, 1, 60,
  29182. 60, 60, 60, 60, 60, 60, 60, 60,
  29183. 60, 60, 60, 60, 60, 60, 60, 60,
  29184. 60, 60, 60, 60, 60, 60, 60, 60,
  29185. 60, 60, 60, 60, 60, 60, 60, 60,
  29186. 1, 1, 1, 1, 1, 1, 1, 1,
  29187. 1, 1, 1, 1, 1, 1, 1, 1,
  29188. 1, 1, 1, 1, 1, 1, 1, 1,
  29189. 1, 1, 1, 1, 1, 1, 1, 1,
  29190. 1, 1, 1, 1, 1, 1, 1, 1,
  29191. 1, 1, 1, 1, 1, 1, 1, 1,
  29192. 1, 1, 1, 1, 1, 1, 1, 1,
  29193. 1, 1, 1, 1, 1, 1, 1, 1,
  29194. 1, 1, 1, 66, 66, 66, 66, 66,
  29195. 66, 66, 66, 66, 66, 66, 66, 66,
  29196. 66, 66, 66, 66, 66, 66, 66, 66,
  29197. 66, 66, 66, 66, 66, 66, 66, 66,
  29198. 66, 67, 68, 68, 68, 68, 68, 68,
  29199. 68, 68, 68, 68, 68, 68, 69, 68,
  29200. 68, 70, 71, 71, 71, 72, 1, 4848,
  29201. 1, 1, 1, 4849, 1, 1, 1, 1,
  29202. 1, 1, 1, 1, 1, 1, 1, 1,
  29203. 1, 1, 1, 1, 1, 1, 4848, 3867,
  29204. 3988, 3867, 3867, 3867, 3867, 3867, 4850, 1,
  29205. 3867, 3867, 4738, 3867, 4841, 3867, 3867, 3867,
  29206. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29207. 25, 4738, 26, 3867, 1, 3867, 4777, 3867,
  29208. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29209. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29210. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29211. 3867, 1, 1, 1, 3867, 3867, 3867, 3867,
  29212. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29213. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29214. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29215. 3867, 3867, 3867, 3867, 3867, 1, 1, 1,
  29216. 1, 1, 1, 1, 1, 1, 1, 1,
  29217. 1, 1, 1, 1, 1, 1, 1, 1,
  29218. 1, 1, 1, 1, 1, 1, 1, 1,
  29219. 1, 1, 1, 1, 1, 1, 1, 1,
  29220. 1, 1, 1, 1, 1, 1, 1, 1,
  29221. 1, 1, 1, 1, 1, 1, 1, 1,
  29222. 1, 1, 1, 1, 1, 1, 1, 1,
  29223. 1, 1, 1, 1, 1, 1, 1, 1,
  29224. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29225. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29226. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29227. 3868, 3868, 3868, 3868, 3868, 3868, 3990, 3869,
  29228. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  29229. 3869, 3869, 3869, 3991, 3869, 3869, 3992, 3993,
  29230. 3993, 3993, 3994, 1, 4851, 1, 1, 1,
  29231. 4852, 1, 1, 1, 1, 1, 1, 1,
  29232. 1, 1, 1, 1, 1, 1, 1, 1,
  29233. 1, 1, 1, 4851, 21, 22, 21, 21,
  29234. 21, 21, 21, 4853, 1, 21, 21, 4749,
  29235. 21, 1, 21, 21, 21, 21, 21, 21,
  29236. 21, 21, 21, 21, 21, 1, 4749, 8,
  29237. 21, 1, 21, 4854, 21, 21, 21, 21,
  29238. 21, 21, 21, 21, 21, 21, 21, 21,
  29239. 21, 21, 21, 21, 21, 21, 21, 21,
  29240. 21, 21, 21, 21, 21, 21, 1, 1,
  29241. 1, 21, 21, 21, 21, 21, 21, 21,
  29242. 21, 21, 21, 21, 21, 21, 21, 21,
  29243. 21, 21, 21, 21, 21, 21, 21, 21,
  29244. 21, 21, 21, 21, 21, 21, 21, 21,
  29245. 21, 21, 1, 1, 1, 1, 1, 1,
  29246. 1, 1, 1, 1, 1, 1, 1, 1,
  29247. 1, 1, 1, 1, 1, 1, 1, 1,
  29248. 1, 1, 1, 1, 1, 1, 1, 1,
  29249. 1, 1, 1, 1, 1, 1, 1, 1,
  29250. 1, 1, 1, 1, 1, 1, 1, 1,
  29251. 1, 1, 1, 1, 1, 1, 1, 1,
  29252. 1, 1, 1, 1, 1, 1, 1, 1,
  29253. 1, 1, 1, 1, 1, 27, 27, 27,
  29254. 27, 27, 27, 27, 27, 27, 27, 27,
  29255. 27, 27, 27, 27, 27, 27, 27, 27,
  29256. 27, 27, 27, 27, 27, 27, 27, 27,
  29257. 27, 27, 27, 28, 29, 29, 29, 29,
  29258. 29, 29, 29, 29, 29, 29, 29, 29,
  29259. 30, 29, 29, 31, 32, 32, 32, 33,
  29260. 1, 4855, 1, 1, 1, 4856, 1, 1,
  29261. 1, 1, 1, 1, 1, 1, 1, 1,
  29262. 1, 1, 1, 1, 1, 1, 1, 1,
  29263. 4855, 60, 61, 60, 60, 60, 60, 60,
  29264. 4857, 1, 60, 60, 4791, 60, 1, 60,
  29265. 60, 60, 60, 60, 60, 60, 60, 60,
  29266. 60, 60, 1, 4791, 83, 60, 1, 60,
  29267. 4858, 60, 60, 60, 60, 60, 60, 60,
  29268. 60, 60, 60, 60, 60, 60, 60, 60,
  29269. 60, 60, 60, 60, 60, 60, 60, 60,
  29270. 60, 60, 60, 1, 1, 1, 60, 60,
  29271. 60, 60, 60, 60, 60, 60, 60, 60,
  29272. 60, 60, 60, 60, 60, 60, 60, 60,
  29273. 60, 60, 60, 60, 60, 60, 60, 60,
  29274. 60, 60, 60, 60, 60, 60, 60, 1,
  29275. 1, 1, 1, 1, 1, 1, 1, 1,
  29276. 1, 1, 1, 1, 1, 1, 1, 1,
  29277. 1, 1, 1, 1, 1, 1, 1, 1,
  29278. 1, 1, 1, 1, 1, 1, 1, 1,
  29279. 1, 1, 1, 1, 1, 1, 1, 1,
  29280. 1, 1, 1, 1, 1, 1, 1, 1,
  29281. 1, 1, 1, 1, 1, 1, 1, 1,
  29282. 1, 1, 1, 1, 1, 1, 1, 1,
  29283. 1, 1, 66, 66, 66, 66, 66, 66,
  29284. 66, 66, 66, 66, 66, 66, 66, 66,
  29285. 66, 66, 66, 66, 66, 66, 66, 66,
  29286. 66, 66, 66, 66, 66, 66, 66, 66,
  29287. 67, 68, 68, 68, 68, 68, 68, 68,
  29288. 68, 68, 68, 68, 68, 69, 68, 68,
  29289. 70, 71, 71, 71, 72, 1, 4859, 1,
  29290. 1, 1, 4860, 1, 1, 1, 1, 1,
  29291. 1, 1, 1, 1, 1, 1, 1, 1,
  29292. 1, 1, 1, 1, 1, 4859, 3820, 3710,
  29293. 3820, 3820, 3820, 3820, 3820, 4861, 1, 3820,
  29294. 3820, 4818, 3820, 4862, 3820, 3820, 3820, 3820,
  29295. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 1,
  29296. 4818, 1, 3820, 1, 3820, 1, 3820, 3820,
  29297. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29298. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29299. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29300. 1, 1, 1, 3820, 3820, 3820, 3820, 3820,
  29301. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29302. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29303. 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820,
  29304. 3820, 3820, 3820, 3820, 1, 1, 1, 1,
  29305. 1, 1, 1, 1, 1, 1, 1, 1,
  29306. 1, 1, 1, 1, 1, 1, 1, 1,
  29307. 1, 1, 1, 1, 1, 1, 1, 1,
  29308. 1, 1, 1, 1, 1, 1, 1, 1,
  29309. 1, 1, 1, 1, 1, 1, 1, 1,
  29310. 1, 1, 1, 1, 1, 1, 1, 1,
  29311. 1, 1, 1, 1, 1, 1, 1, 1,
  29312. 1, 1, 1, 1, 1, 1, 1, 3822,
  29313. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  29314. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  29315. 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
  29316. 3822, 3822, 3822, 3822, 3822, 3823, 3824, 3824,
  29317. 3824, 3824, 3824, 3824, 3824, 3824, 3824, 3824,
  29318. 3824, 3824, 3825, 3824, 3824, 3826, 3827, 3827,
  29319. 3827, 3828, 1, 4859, 1, 1, 1, 4860,
  29320. 1, 1, 1, 1, 1, 1, 1, 1,
  29321. 1, 1, 1, 1, 1, 1, 1, 1,
  29322. 1, 1, 4859, 1, 1, 1, 1, 1,
  29323. 1, 1, 4861, 1, 1, 1, 4818, 1,
  29324. 3832, 1, 1, 1, 1, 1, 1, 1,
  29325. 1, 1, 1, 1, 1, 4818, 1, 4863,
  29326. 1, 1, 1, 4864, 1, 1, 1, 1,
  29327. 1, 1, 1, 1, 1, 1, 1, 1,
  29328. 1, 1, 1, 1, 1, 1, 4863, 1,
  29329. 1, 1, 1, 1, 1, 1, 4865, 1,
  29330. 1, 1, 4824, 1, 3844, 1, 1, 1,
  29331. 1, 1, 1, 1, 1, 1, 1, 1,
  29332. 1, 4824, 1, 4859, 1, 1, 1, 4860,
  29333. 1, 1, 1, 1, 1, 1, 1, 1,
  29334. 1, 1, 1, 1, 1, 1, 1, 1,
  29335. 1, 1, 4859, 3834, 1, 3834, 3834, 3834,
  29336. 3834, 3834, 4861, 1, 3834, 3834, 4818, 3834,
  29337. 3832, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29338. 3834, 3834, 3834, 3834, 1, 4818, 1, 3834,
  29339. 1, 3834, 1, 3834, 3834, 3834, 3834, 3834,
  29340. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29341. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29342. 3834, 3834, 3834, 3834, 3834, 1, 1, 1,
  29343. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29344. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29345. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29346. 3834, 3834, 3834, 3834, 3834, 3834, 3834, 3834,
  29347. 3834, 1, 1, 1, 1, 1, 1, 1,
  29348. 1, 1, 1, 1, 1, 1, 1, 1,
  29349. 1, 1, 1, 1, 1, 1, 1, 1,
  29350. 1, 1, 1, 1, 1, 1, 1, 1,
  29351. 1, 1, 1, 1, 1, 1, 1, 1,
  29352. 1, 1, 1, 1, 1, 1, 1, 1,
  29353. 1, 1, 1, 1, 1, 1, 1, 1,
  29354. 1, 1, 1, 1, 1, 1, 1, 1,
  29355. 1, 1, 1, 1, 3836, 3836, 3836, 3836,
  29356. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  29357. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  29358. 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
  29359. 3836, 3836, 3837, 3838, 3838, 3838, 3838, 3838,
  29360. 3838, 3838, 3838, 3838, 3838, 3838, 3838, 3839,
  29361. 3838, 3838, 3840, 3841, 3841, 3841, 3842, 1,
  29362. 4866, 1, 1, 1, 4867, 1, 1, 1,
  29363. 1, 1, 1, 1, 1, 1, 1, 1,
  29364. 1, 1, 1, 1, 1, 1, 1, 4866,
  29365. 3901, 4868, 3901, 3901, 3901, 3901, 3901, 4869,
  29366. 1, 3901, 3901, 4738, 3901, 4841, 3901, 3901,
  29367. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29368. 3901, 25, 4738, 26, 3901, 1, 3901, 4777,
  29369. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29370. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29371. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29372. 3901, 3901, 1, 1, 1, 3901, 3901, 3901,
  29373. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29374. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29375. 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
  29376. 3901, 3901, 3901, 3901, 3901, 3901, 1, 1,
  29377. 1, 1, 1, 1, 1, 1, 1, 1,
  29378. 1, 1, 1, 1, 1, 1, 1, 1,
  29379. 1, 1, 1, 1, 1, 1, 1, 1,
  29380. 1, 1, 1, 1, 1, 1, 1, 1,
  29381. 1, 1, 1, 1, 1, 1, 1, 1,
  29382. 1, 1, 1, 1, 1, 1, 1, 1,
  29383. 1, 1, 1, 1, 1, 1, 1, 1,
  29384. 1, 1, 1, 1, 1, 1, 1, 1,
  29385. 1, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  29386. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  29387. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
  29388. 3902, 3902, 3902, 3902, 3902, 3902, 3902, 4778,
  29389. 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903,
  29390. 3903, 3903, 3903, 3903, 4779, 3903, 3903, 4780,
  29391. 4781, 4781, 4781, 4782, 1, 4870, 1, 1,
  29392. 1, 4871, 1, 1, 1, 1, 1, 1,
  29393. 1, 1, 1, 1, 1, 1, 1, 1,
  29394. 1, 1, 1, 1, 4870, 160, 161, 160,
  29395. 160, 160, 160, 160, 4872, 1, 160, 160,
  29396. 4749, 160, 1, 160, 160, 160, 160, 160,
  29397. 160, 160, 160, 160, 160, 160, 1, 4749,
  29398. 8, 160, 1, 160, 4854, 160, 160, 160,
  29399. 160, 160, 160, 160, 160, 160, 160, 160,
  29400. 160, 160, 160, 160, 160, 160, 160, 160,
  29401. 160, 160, 160, 160, 160, 160, 160, 1,
  29402. 1, 1, 160, 160, 160, 160, 160, 160,
  29403. 160, 160, 160, 160, 160, 160, 160, 160,
  29404. 160, 160, 160, 160, 160, 160, 160, 160,
  29405. 160, 160, 160, 160, 160, 160, 160, 160,
  29406. 160, 160, 160, 1, 1, 1, 1, 1,
  29407. 1, 1, 1, 1, 1, 1, 1, 1,
  29408. 1, 1, 1, 1, 1, 1, 1, 1,
  29409. 1, 1, 1, 1, 1, 1, 1, 1,
  29410. 1, 1, 1, 1, 1, 1, 1, 1,
  29411. 1, 1, 1, 1, 1, 1, 1, 1,
  29412. 1, 1, 1, 1, 1, 1, 1, 1,
  29413. 1, 1, 1, 1, 1, 1, 1, 1,
  29414. 1, 1, 1, 1, 1, 1, 163, 163,
  29415. 163, 163, 163, 163, 163, 163, 163, 163,
  29416. 163, 163, 163, 163, 163, 163, 163, 163,
  29417. 163, 163, 163, 163, 163, 163, 163, 163,
  29418. 163, 163, 163, 163, 164, 165, 165, 165,
  29419. 165, 165, 165, 165, 165, 165, 165, 165,
  29420. 165, 166, 165, 165, 167, 168, 168, 168,
  29421. 169, 1, 4873, 1, 1, 1, 4874, 1,
  29422. 1, 1, 1, 1, 1, 1, 1, 1,
  29423. 1, 1, 1, 1, 1, 1, 1, 1,
  29424. 1, 4873, 3768, 3769, 3768, 3768, 3768, 3768,
  29425. 3768, 4875, 1, 3768, 3768, 4791, 3768, 1,
  29426. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29427. 3768, 3768, 3768, 1, 4791, 83, 3768, 1,
  29428. 3768, 4858, 3768, 3768, 3768, 3768, 3768, 3768,
  29429. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29430. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29431. 3768, 3768, 3768, 3768, 1, 1, 1, 3768,
  29432. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29433. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29434. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29435. 3768, 3768, 3768, 3768, 3768, 3768, 3768, 3768,
  29436. 1, 1, 1, 1, 1, 1, 1, 1,
  29437. 1, 1, 1, 1, 1, 1, 1, 1,
  29438. 1, 1, 1, 1, 1, 1, 1, 1,
  29439. 1, 1, 1, 1, 1, 1, 1, 1,
  29440. 1, 1, 1, 1, 1, 1, 1, 1,
  29441. 1, 1, 1, 1, 1, 1, 1, 1,
  29442. 1, 1, 1, 1, 1, 1, 1, 1,
  29443. 1, 1, 1, 1, 1, 1, 1, 1,
  29444. 1, 1, 1, 3771, 3771, 3771, 3771, 3771,
  29445. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  29446. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  29447. 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771,
  29448. 3771, 3772, 3773, 3773, 3773, 3773, 3773, 3773,
  29449. 3773, 3773, 3773, 3773, 3773, 3773, 3774, 3773,
  29450. 3773, 3775, 3776, 3776, 3776, 3777, 1, 4773,
  29451. 1, 1, 1, 4774, 1, 1, 1, 1,
  29452. 1, 1, 1, 1, 1, 1, 1, 1,
  29453. 1, 1, 1, 1, 1, 1, 4773, 3867,
  29454. 3988, 3867, 3867, 3867, 3867, 3867, 4775, 1,
  29455. 3867, 3867, 4738, 3867, 4776, 3867, 3867, 3867,
  29456. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29457. 25, 4738, 26, 3867, 1, 3867, 4777, 3867,
  29458. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29459. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29460. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29461. 3867, 1, 1, 1, 3867, 3867, 3867, 3867,
  29462. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29463. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29464. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29465. 3867, 3867, 3867, 3867, 3867, 1, 1, 1,
  29466. 1, 1, 1, 1, 1, 1, 1, 1,
  29467. 1, 1, 1, 1, 1, 1, 1, 1,
  29468. 1, 1, 1, 1, 1, 1, 1, 1,
  29469. 1, 1, 1, 1, 1, 1, 1, 1,
  29470. 1, 1, 1, 1, 1, 1, 1, 1,
  29471. 1, 1, 1, 1, 1, 1, 1, 1,
  29472. 1, 1, 1, 1, 1, 1, 1, 1,
  29473. 1, 1, 1, 1, 1, 1, 1, 1,
  29474. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29475. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29476. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29477. 3868, 3868, 3868, 3868, 3868, 3868, 3990, 3869,
  29478. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  29479. 3869, 3869, 3869, 3991, 3869, 3869, 3992, 3993,
  29480. 3993, 3993, 3994, 1, 4876, 1, 1, 1,
  29481. 4877, 1, 1, 1, 1, 1, 1, 1,
  29482. 1, 1, 1, 1, 1, 1, 1, 1,
  29483. 1, 1, 1, 4876, 3867, 3988, 3867, 3867,
  29484. 3867, 3867, 3867, 4878, 1, 3867, 3867, 4879,
  29485. 3867, 4776, 3867, 3867, 3867, 3867, 3867, 3867,
  29486. 3867, 3867, 3867, 3867, 3867, 25, 4879, 26,
  29487. 3867, 1, 3867, 4880, 3867, 3867, 3867, 3867,
  29488. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29489. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29490. 3867, 3867, 3867, 3867, 3867, 3867, 1, 1,
  29491. 1, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29492. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29493. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29494. 3867, 3867, 3867, 3867, 3867, 3867, 3867, 3867,
  29495. 3867, 3867, 1, 1, 1, 1, 1, 1,
  29496. 1, 1, 1, 1, 1, 1, 1, 1,
  29497. 1, 1, 1, 1, 1, 1, 1, 1,
  29498. 1, 1, 1, 1, 1, 1, 1, 1,
  29499. 1, 1, 1, 1, 1, 1, 1, 1,
  29500. 1, 1, 1, 1, 1, 1, 1, 1,
  29501. 1, 1, 1, 1, 1, 1, 1, 1,
  29502. 1, 1, 1, 1, 1, 1, 1, 1,
  29503. 1, 1, 1, 1, 1, 3868, 3868, 3868,
  29504. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29505. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29506. 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3868,
  29507. 3868, 3868, 3868, 3990, 3869, 3869, 3869, 3869,
  29508. 3869, 3869, 3869, 3869, 3869, 3869, 3869, 3869,
  29509. 3991, 3869, 3869, 3992, 3993, 3993, 3993, 3994,
  29510. 1, 4881, 1, 1, 1, 4882, 1, 1,
  29511. 1, 1, 1, 1, 1, 1, 1, 1,
  29512. 1, 1, 1, 1, 1, 1, 1, 1,
  29513. 4881, 21, 22, 21, 21, 21, 21, 21,
  29514. 4883, 1, 21, 21, 4884, 21, 4786, 21,
  29515. 21, 21, 21, 21, 21, 21, 21, 21,
  29516. 21, 21, 25, 4884, 26, 21, 1, 21,
  29517. 4885, 21, 21, 21, 21, 21, 21, 21,
  29518. 21, 21, 21, 21, 21, 21, 21, 21,
  29519. 21, 21, 21, 21, 21, 21, 21, 21,
  29520. 21, 21, 21, 1, 1, 1, 21, 21,
  29521. 21, 21, 21, 21, 21, 21, 21, 21,
  29522. 21, 21, 21, 21, 21, 21, 21, 21,
  29523. 21, 21, 21, 21, 21, 21, 21, 21,
  29524. 21, 21, 21, 21, 21, 21, 21, 1,
  29525. 1, 1, 1, 1, 1, 1, 1, 1,
  29526. 1, 1, 1, 1, 1, 1, 1, 1,
  29527. 1, 1, 1, 1, 1, 1, 1, 1,
  29528. 1, 1, 1, 1, 1, 1, 1, 1,
  29529. 1, 1, 1, 1, 1, 1, 1, 1,
  29530. 1, 1, 1, 1, 1, 1, 1, 1,
  29531. 1, 1, 1, 1, 1, 1, 1, 1,
  29532. 1, 1, 1, 1, 1, 1, 1, 1,
  29533. 1, 1, 27, 27, 27, 27, 27, 27,
  29534. 27, 27, 27, 27, 27, 27, 27, 27,
  29535. 27, 27, 27, 27, 27, 27, 27, 27,
  29536. 27, 27, 27, 27, 27, 27, 27, 27,
  29537. 28, 29, 29, 29, 29, 29, 29, 29,
  29538. 29, 29, 29, 29, 29, 30, 29, 29,
  29539. 31, 32, 32, 32, 33, 1, 4886, 1,
  29540. 1, 1, 4887, 1, 1, 1, 1, 1,
  29541. 1, 1, 1, 1, 1, 1, 1, 1,
  29542. 1, 1, 1, 1, 1, 4886, 60, 61,
  29543. 60, 60, 60, 60, 60, 4888, 1, 60,
  29544. 60, 4889, 60, 4792, 60, 60, 60, 60,
  29545. 60, 60, 60, 60, 60, 60, 60, 64,
  29546. 4889, 65, 60, 1, 60, 4890, 60, 60,
  29547. 60, 60, 60, 60, 60, 60, 60, 60,
  29548. 60, 60, 60, 60, 60, 60, 60, 60,
  29549. 60, 60, 60, 60, 60, 60, 60, 60,
  29550. 1, 1, 1, 60, 60, 60, 60, 60,
  29551. 60, 60, 60, 60, 60, 60, 60, 60,
  29552. 60, 60, 60, 60, 60, 60, 60, 60,
  29553. 60, 60, 60, 60, 60, 60, 60, 60,
  29554. 60, 60, 60, 60, 1, 1, 1, 1,
  29555. 1, 1, 1, 1, 1, 1, 1, 1,
  29556. 1, 1, 1, 1, 1, 1, 1, 1,
  29557. 1, 1, 1, 1, 1, 1, 1, 1,
  29558. 1, 1, 1, 1, 1, 1, 1, 1,
  29559. 1, 1, 1, 1, 1, 1, 1, 1,
  29560. 1, 1, 1, 1, 1, 1, 1, 1,
  29561. 1, 1, 1, 1, 1, 1, 1, 1,
  29562. 1, 1, 1, 1, 1, 1, 1, 66,
  29563. 66, 66, 66, 66, 66, 66, 66, 66,
  29564. 66, 66, 66, 66, 66, 66, 66, 66,
  29565. 66, 66, 66, 66, 66, 66, 66, 66,
  29566. 66, 66, 66, 66, 66, 67, 68, 68,
  29567. 68, 68, 68, 68, 68, 68, 68, 68,
  29568. 68, 68, 69, 68, 68, 70, 71, 71,
  29569. 71, 72, 1, 4891, 1, 1, 1, 4892,
  29570. 1, 1, 1, 1, 1, 1, 1, 1,
  29571. 1, 1, 1, 1, 1, 1, 1, 1,
  29572. 1, 1, 4891, 21, 22, 21, 21, 21,
  29573. 21, 21, 4893, 1, 21, 21, 4894, 21,
  29574. 4786, 21, 21, 21, 21, 21, 21, 21,
  29575. 21, 21, 21, 21, 25, 4894, 26, 21,
  29576. 1, 21, 4895, 21, 21, 21, 21, 21,
  29577. 21, 21, 21, 21, 21, 21, 21, 21,
  29578. 21, 21, 21, 21, 21, 21, 21, 21,
  29579. 21, 21, 21, 21, 21, 1, 1, 1,
  29580. 21, 21, 21, 21, 21, 21, 21, 21,
  29581. 21, 21, 21, 21, 21, 21, 21, 21,
  29582. 21, 21, 21, 21, 21, 21, 21, 21,
  29583. 21, 21, 21, 21, 21, 21, 21, 21,
  29584. 21, 1, 1, 1, 1, 1, 1, 1,
  29585. 1, 1, 1, 1, 1, 1, 1, 1,
  29586. 1, 1, 1, 1, 1, 1, 1, 1,
  29587. 1, 1, 1, 1, 1, 1, 1, 1,
  29588. 1, 1, 1, 1, 1, 1, 1, 1,
  29589. 1, 1, 1, 1, 1, 1, 1, 1,
  29590. 1, 1, 1, 1, 1, 1, 1, 1,
  29591. 1, 1, 1, 1, 1, 1, 1, 1,
  29592. 1, 1, 1, 1, 27, 27, 27, 27,
  29593. 27, 27, 27, 27, 27, 27, 27, 27,
  29594. 27, 27, 27, 27, 27, 27, 27, 27,
  29595. 27, 27, 27, 27, 27, 27, 27, 27,
  29596. 27, 27, 28, 29, 29, 29, 29, 29,
  29597. 29, 29, 29, 29, 29, 29, 29, 30,
  29598. 29, 29, 31, 32, 32, 32, 33, 1,
  29599. 4896, 1, 1, 1, 4897, 1, 1, 1,
  29600. 1, 1, 1, 1, 1, 1, 1, 1,
  29601. 1, 1, 1, 1, 1, 1, 1, 4896,
  29602. 60, 61, 60, 60, 60, 60, 60, 4898,
  29603. 1, 60, 60, 4899, 60, 4792, 60, 60,
  29604. 60, 60, 60, 60, 60, 60, 60, 60,
  29605. 60, 64, 4899, 65, 60, 1, 60, 4900,
  29606. 60, 60, 60, 60, 60, 60, 60, 60,
  29607. 60, 60, 60, 60, 60, 60, 60, 60,
  29608. 60, 60, 60, 60, 60, 60, 60, 60,
  29609. 60, 60, 1, 1, 1, 60, 60, 60,
  29610. 60, 60, 60, 60, 60, 60, 60, 60,
  29611. 60, 60, 60, 60, 60, 60, 60, 60,
  29612. 60, 60, 60, 60, 60, 60, 60, 60,
  29613. 60, 60, 60, 60, 60, 60, 1, 1,
  29614. 1, 1, 1, 1, 1, 1, 1, 1,
  29615. 1, 1, 1, 1, 1, 1, 1, 1,
  29616. 1, 1, 1, 1, 1, 1, 1, 1,
  29617. 1, 1, 1, 1, 1, 1, 1, 1,
  29618. 1, 1, 1, 1, 1, 1, 1, 1,
  29619. 1, 1, 1, 1, 1, 1, 1, 1,
  29620. 1, 1, 1, 1, 1, 1, 1, 1,
  29621. 1, 1, 1, 1, 1, 1, 1, 1,
  29622. 1, 66, 66, 66, 66, 66, 66, 66,
  29623. 66, 66, 66, 66, 66, 66, 66, 66,
  29624. 66, 66, 66, 66, 66, 66, 66, 66,
  29625. 66, 66, 66, 66, 66, 66, 66, 67,
  29626. 68, 68, 68, 68, 68, 68, 68, 68,
  29627. 68, 68, 68, 68, 69, 68, 68, 70,
  29628. 71, 71, 71, 72, 1, 4901, 1, 1,
  29629. 1, 4902, 1, 1, 1, 1, 1, 1,
  29630. 1, 1, 1, 1, 1, 1, 1, 1,
  29631. 1, 1, 1, 1, 4901, 3963, 3964, 3963,
  29632. 3963, 3963, 3963, 3963, 4903, 1, 3963, 3963,
  29633. 4738, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29634. 3963, 3963, 3963, 3963, 3963, 3963, 1, 4738,
  29635. 1, 3963, 1, 3963, 4904, 3963, 3963, 3963,
  29636. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29637. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29638. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 1,
  29639. 1, 1, 3963, 3963, 3963, 3963, 3963, 3963,
  29640. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29641. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29642. 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963,
  29643. 3963, 3963, 3963, 1, 1, 1, 1, 1,
  29644. 1, 1, 1, 1, 1, 1, 1, 1,
  29645. 1, 1, 1, 1, 1, 1, 1, 1,
  29646. 1, 1, 1, 1, 1, 1, 1, 1,
  29647. 1, 1, 1, 1, 1, 1, 1, 1,
  29648. 1, 1, 1, 1, 1, 1, 1, 1,
  29649. 1, 1, 1, 1, 1, 1, 1, 1,
  29650. 1, 1, 1, 1, 1, 1, 1, 1,
  29651. 1, 1, 1, 1, 1, 1, 3966, 3966,
  29652. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  29653. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  29654. 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
  29655. 3966, 3966, 3966, 3966, 3967, 3968, 3968, 3968,
  29656. 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
  29657. 3968, 3969, 3968, 3968, 3970, 3971, 3971, 3971,
  29658. 3972, 1, 4905, 1, 1, 1, 4906, 1,
  29659. 1, 1, 1, 1, 1, 1, 1, 1,
  29660. 1, 1, 1, 1, 1, 1, 1, 1,
  29661. 1, 4905, 1, 1, 1, 1, 1, 1,
  29662. 1, 4907, 1, 1, 1, 4749, 1, 1,
  29663. 1, 1, 1, 1, 1, 1, 1, 1,
  29664. 1, 1, 1, 1, 4749, 1, 1, 1,
  29665. 1, 4854, 1, 4908, 1, 1, 1, 4909,
  29666. 1, 1, 1, 1, 1, 1, 1, 1,
  29667. 1, 1, 1, 1, 1, 1, 1, 1,
  29668. 1, 1, 4908, 1, 1, 1, 1, 1,
  29669. 1, 1, 4910, 1, 1, 1, 4791, 1,
  29670. 1, 1, 1, 1, 1, 1, 1, 1,
  29671. 1, 1, 1, 1, 1, 4791, 1, 1,
  29672. 1, 1, 4858, 1, 4911, 1, 1, 1,
  29673. 4912, 1, 1, 1, 1, 1, 1, 1,
  29674. 1, 1, 1, 1, 1, 1, 1, 1,
  29675. 1, 1, 1, 4911, 60, 61, 60, 60,
  29676. 60, 60, 60, 4913, 1, 60, 60, 4791,
  29677. 60, 4914, 60, 60, 60, 60, 60, 60,
  29678. 60, 60, 60, 60, 60, 64, 4791, 65,
  29679. 60, 1, 60, 4915, 60, 60, 60, 60,
  29680. 60, 60, 60, 60, 60, 60, 60, 60,
  29681. 60, 60, 60, 60, 60, 60, 60, 60,
  29682. 60, 60, 60, 60, 60, 60, 1, 1,
  29683. 1, 60, 60, 60, 60, 60, 60, 60,
  29684. 60, 60, 60, 60, 60, 60, 60, 60,
  29685. 60, 60, 60, 60, 60, 60, 60, 60,
  29686. 60, 60, 60, 60, 60, 60, 60, 60,
  29687. 60, 60, 1, 1, 1, 1, 1, 1,
  29688. 1, 1, 1, 1, 1, 1, 1, 1,
  29689. 1, 1, 1, 1, 1, 1, 1, 1,
  29690. 1, 1, 1, 1, 1, 1, 1, 1,
  29691. 1, 1, 1, 1, 1, 1, 1, 1,
  29692. 1, 1, 1, 1, 1, 1, 1, 1,
  29693. 1, 1, 1, 1, 1, 1, 1, 1,
  29694. 1, 1, 1, 1, 1, 1, 1, 1,
  29695. 1, 1, 1, 1, 1, 66, 66, 66,
  29696. 66, 66, 66, 66, 66, 66, 66, 66,
  29697. 66, 66, 66, 66, 66, 66, 66, 66,
  29698. 66, 66, 66, 66, 66, 66, 66, 66,
  29699. 66, 66, 66, 67, 68, 68, 68, 68,
  29700. 68, 68, 68, 68, 68, 68, 68, 68,
  29701. 69, 68, 68, 70, 71, 71, 71, 72,
  29702. 1, 4916, 1, 1, 1, 4917, 1, 1,
  29703. 1, 1, 1, 1, 1, 1, 1, 1,
  29704. 1, 1, 1, 1, 1, 1, 1, 1,
  29705. 4916, 4429, 22, 4429, 4429, 4429, 4429, 4429,
  29706. 4918, 1, 4429, 4429, 4755, 4429, 4750, 4429,
  29707. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29708. 4429, 4429, 25, 4755, 26, 4429, 1, 4429,
  29709. 4919, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29710. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29711. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29712. 4429, 4429, 4429, 1, 1, 1, 4429, 4429,
  29713. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29714. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29715. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  29716. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 1,
  29717. 1, 1, 1, 1, 1, 1, 1, 1,
  29718. 1, 1, 1, 1, 1, 1, 1, 1,
  29719. 1, 1, 1, 1, 1, 1, 1, 1,
  29720. 1, 1, 1, 1, 1, 1, 1, 1,
  29721. 1, 1, 1, 1, 1, 1, 1, 1,
  29722. 1, 1, 1, 1, 1, 1, 1, 1,
  29723. 1, 1, 1, 1, 1, 1, 1, 1,
  29724. 1, 1, 1, 1, 1, 1, 1, 1,
  29725. 1, 1, 4432, 4432, 4432, 4432, 4432, 4432,
  29726. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  29727. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  29728. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  29729. 4433, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  29730. 4434, 4434, 4434, 4434, 4434, 4435, 4434, 4434,
  29731. 4436, 4437, 4437, 4437, 4438, 1, 4916, 1,
  29732. 1, 1, 4917, 1, 1, 1, 1, 1,
  29733. 1, 1, 1, 1, 1, 1, 1, 1,
  29734. 1, 1, 1, 1, 1, 4916, 21, 22,
  29735. 21, 21, 21, 21, 21, 4918, 1, 21,
  29736. 21, 4755, 21, 4750, 21, 21, 21, 21,
  29737. 21, 21, 21, 21, 21, 21, 21, 25,
  29738. 4755, 26, 21, 1, 21, 4919, 21, 21,
  29739. 21, 21, 21, 21, 21, 21, 21, 21,
  29740. 21, 21, 21, 21, 21, 21, 21, 21,
  29741. 21, 21, 21, 21, 21, 21, 21, 21,
  29742. 1, 1, 1, 21, 21, 21, 21, 21,
  29743. 21, 21, 21, 21, 21, 21, 21, 21,
  29744. 21, 21, 21, 21, 21, 21, 21, 21,
  29745. 21, 21, 21, 21, 21, 21, 21, 21,
  29746. 21, 21, 21, 21, 1, 1, 1, 1,
  29747. 1, 1, 1, 1, 1, 1, 1, 1,
  29748. 1, 1, 1, 1, 1, 1, 1, 1,
  29749. 1, 1, 1, 1, 1, 1, 1, 1,
  29750. 1, 1, 1, 1, 1, 1, 1, 1,
  29751. 1, 1, 1, 1, 1, 1, 1, 1,
  29752. 1, 1, 1, 1, 1, 1, 1, 1,
  29753. 1, 1, 1, 1, 1, 1, 1, 1,
  29754. 1, 1, 1, 1, 1, 1, 1, 27,
  29755. 27, 27, 27, 27, 27, 27, 27, 27,
  29756. 27, 27, 27, 27, 27, 27, 27, 27,
  29757. 27, 27, 27, 27, 27, 27, 27, 27,
  29758. 27, 27, 27, 27, 27, 28, 29, 29,
  29759. 29, 29, 29, 29, 29, 29, 29, 29,
  29760. 29, 29, 30, 29, 29, 31, 32, 32,
  29761. 32, 33, 1, 4920, 1, 1, 1, 4921,
  29762. 1, 1, 1, 1, 1, 1, 1, 1,
  29763. 1, 1, 1, 1, 1, 1, 1, 1,
  29764. 1, 1, 4920, 60, 61, 60, 60, 60,
  29765. 60, 60, 4922, 1, 60, 60, 4759, 60,
  29766. 4914, 60, 60, 60, 60, 60, 60, 60,
  29767. 60, 60, 60, 60, 64, 4759, 65, 60,
  29768. 1, 60, 4923, 60, 60, 60, 60, 60,
  29769. 60, 60, 60, 60, 60, 60, 60, 60,
  29770. 60, 60, 60, 60, 60, 60, 60, 60,
  29771. 60, 60, 60, 60, 60, 1, 1, 1,
  29772. 60, 60, 60, 60, 60, 60, 60, 60,
  29773. 60, 60, 60, 60, 60, 60, 60, 60,
  29774. 60, 60, 60, 60, 60, 60, 60, 60,
  29775. 60, 60, 60, 60, 60, 60, 60, 60,
  29776. 60, 1, 1, 1, 1, 1, 1, 1,
  29777. 1, 1, 1, 1, 1, 1, 1, 1,
  29778. 1, 1, 1, 1, 1, 1, 1, 1,
  29779. 1, 1, 1, 1, 1, 1, 1, 1,
  29780. 1, 1, 1, 1, 1, 1, 1, 1,
  29781. 1, 1, 1, 1, 1, 1, 1, 1,
  29782. 1, 1, 1, 1, 1, 1, 1, 1,
  29783. 1, 1, 1, 1, 1, 1, 1, 1,
  29784. 1, 1, 1, 1, 66, 66, 66, 66,
  29785. 66, 66, 66, 66, 66, 66, 66, 66,
  29786. 66, 66, 66, 66, 66, 66, 66, 66,
  29787. 66, 66, 66, 66, 66, 66, 66, 66,
  29788. 66, 66, 67, 68, 68, 68, 68, 68,
  29789. 68, 68, 68, 68, 68, 68, 68, 69,
  29790. 68, 68, 70, 71, 71, 71, 72, 1,
  29791. 3719, 1, 1, 1, 4924, 1, 1, 1,
  29792. 1, 1, 1, 1, 1, 1, 1, 1,
  29793. 1, 1, 1, 1, 1, 1, 1, 3719,
  29794. 4457, 4458, 4457, 4457, 4457, 4457, 4457, 4834,
  29795. 1, 4457, 4457, 4818, 4457, 4451, 4457, 4457,
  29796. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29797. 4457, 1, 4818, 1, 4457, 1, 4457, 1,
  29798. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29799. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29800. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29801. 4457, 4457, 1, 1, 1, 4457, 4457, 4457,
  29802. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29803. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29804. 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
  29805. 4457, 4457, 4457, 4457, 4457, 4457, 1, 1,
  29806. 1, 1, 1, 1, 1, 1, 1, 1,
  29807. 1, 1, 1, 1, 1, 1, 1, 1,
  29808. 1, 1, 1, 1, 1, 1, 1, 1,
  29809. 1, 1, 1, 1, 1, 1, 1, 1,
  29810. 1, 1, 1, 1, 1, 1, 1, 1,
  29811. 1, 1, 1, 1, 1, 1, 1, 1,
  29812. 1, 1, 1, 1, 1, 1, 1, 1,
  29813. 1, 1, 1, 1, 1, 1, 1, 1,
  29814. 1, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  29815. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  29816. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4459,
  29817. 4459, 4459, 4459, 4459, 4459, 4459, 4459, 4460,
  29818. 4461, 4461, 4461, 4461, 4461, 4461, 4461, 4461,
  29819. 4461, 4461, 4461, 4461, 4462, 4461, 4461, 4463,
  29820. 4464, 4464, 4464, 4465, 1, 4925, 1, 1,
  29821. 1, 4926, 1, 1, 1, 1, 1, 1,
  29822. 1, 1, 1, 1, 1, 1, 1, 1,
  29823. 1, 1, 1, 1, 4925, 4578, 4688, 4578,
  29824. 4578, 4578, 4578, 4578, 4927, 1, 4578, 4578,
  29825. 4738, 4578, 4928, 4578, 4578, 4578, 4578, 4578,
  29826. 4578, 4578, 4578, 4578, 4578, 4578, 25, 4738,
  29827. 26, 4578, 1, 4578, 4740, 4578, 4578, 4578,
  29828. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29829. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29830. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 1,
  29831. 1, 1, 4578, 4578, 4578, 4578, 4578, 4578,
  29832. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29833. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29834. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29835. 4578, 4578, 4578, 1, 1, 1, 1, 1,
  29836. 1, 1, 1, 1, 1, 1, 1, 1,
  29837. 1, 1, 1, 1, 1, 1, 1, 1,
  29838. 1, 1, 1, 1, 1, 1, 1, 1,
  29839. 1, 1, 1, 1, 1, 1, 1, 1,
  29840. 1, 1, 1, 1, 1, 1, 1, 1,
  29841. 1, 1, 1, 1, 1, 1, 1, 1,
  29842. 1, 1, 1, 1, 1, 1, 1, 1,
  29843. 1, 1, 1, 1, 1, 1, 4579, 4579,
  29844. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29845. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29846. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29847. 4579, 4579, 4579, 4579, 4690, 4580, 4580, 4580,
  29848. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  29849. 4580, 4691, 4580, 4580, 4692, 4693, 4693, 4693,
  29850. 4694, 1, 4929, 1, 1, 1, 4930, 1,
  29851. 1, 1, 1, 1, 1, 1, 1, 1,
  29852. 1, 1, 1, 1, 1, 1, 1, 1,
  29853. 1, 4929, 21, 22, 21, 21, 21, 21,
  29854. 21, 4931, 1, 21, 21, 4749, 21, 24,
  29855. 21, 21, 21, 21, 21, 21, 21, 21,
  29856. 21, 21, 21, 25, 4749, 26, 21, 1,
  29857. 21, 4751, 21, 21, 21, 21, 21, 21,
  29858. 21, 21, 21, 21, 21, 21, 21, 21,
  29859. 21, 21, 21, 21, 21, 21, 21, 21,
  29860. 21, 21, 21, 21, 1, 1, 1, 21,
  29861. 21, 21, 21, 21, 21, 21, 21, 21,
  29862. 21, 21, 21, 21, 21, 21, 21, 21,
  29863. 21, 21, 21, 21, 21, 21, 21, 21,
  29864. 21, 21, 21, 21, 21, 21, 21, 21,
  29865. 1, 1, 1, 1, 1, 1, 1, 1,
  29866. 1, 1, 1, 1, 1, 1, 1, 1,
  29867. 1, 1, 1, 1, 1, 1, 1, 1,
  29868. 1, 1, 1, 1, 1, 1, 1, 1,
  29869. 1, 1, 1, 1, 1, 1, 1, 1,
  29870. 1, 1, 1, 1, 1, 1, 1, 1,
  29871. 1, 1, 1, 1, 1, 1, 1, 1,
  29872. 1, 1, 1, 1, 1, 1, 1, 1,
  29873. 1, 1, 1, 27, 27, 27, 27, 27,
  29874. 27, 27, 27, 27, 27, 27, 27, 27,
  29875. 27, 27, 27, 27, 27, 27, 27, 27,
  29876. 27, 27, 27, 27, 27, 27, 27, 27,
  29877. 27, 28, 29, 29, 29, 29, 29, 29,
  29878. 29, 29, 29, 29, 29, 29, 30, 29,
  29879. 29, 31, 32, 32, 32, 33, 1, 4932,
  29880. 1, 1, 1, 4933, 1, 1, 1, 1,
  29881. 1, 1, 1, 1, 1, 1, 1, 1,
  29882. 1, 1, 1, 1, 1, 1, 4932, 60,
  29883. 61, 60, 60, 60, 60, 60, 4934, 1,
  29884. 60, 60, 4791, 60, 63, 60, 60, 60,
  29885. 60, 60, 60, 60, 60, 60, 60, 60,
  29886. 64, 4791, 65, 60, 1, 60, 4915, 60,
  29887. 60, 60, 60, 60, 60, 60, 60, 60,
  29888. 60, 60, 60, 60, 60, 60, 60, 60,
  29889. 60, 60, 60, 60, 60, 60, 60, 60,
  29890. 60, 1, 1, 1, 60, 60, 60, 60,
  29891. 60, 60, 60, 60, 60, 60, 60, 60,
  29892. 60, 60, 60, 60, 60, 60, 60, 60,
  29893. 60, 60, 60, 60, 60, 60, 60, 60,
  29894. 60, 60, 60, 60, 60, 1, 1, 1,
  29895. 1, 1, 1, 1, 1, 1, 1, 1,
  29896. 1, 1, 1, 1, 1, 1, 1, 1,
  29897. 1, 1, 1, 1, 1, 1, 1, 1,
  29898. 1, 1, 1, 1, 1, 1, 1, 1,
  29899. 1, 1, 1, 1, 1, 1, 1, 1,
  29900. 1, 1, 1, 1, 1, 1, 1, 1,
  29901. 1, 1, 1, 1, 1, 1, 1, 1,
  29902. 1, 1, 1, 1, 1, 1, 1, 1,
  29903. 66, 66, 66, 66, 66, 66, 66, 66,
  29904. 66, 66, 66, 66, 66, 66, 66, 66,
  29905. 66, 66, 66, 66, 66, 66, 66, 66,
  29906. 66, 66, 66, 66, 66, 66, 67, 68,
  29907. 68, 68, 68, 68, 68, 68, 68, 68,
  29908. 68, 68, 68, 69, 68, 68, 70, 71,
  29909. 71, 71, 72, 1, 4935, 1, 1, 1,
  29910. 4936, 1, 1, 1, 1, 1, 1, 1,
  29911. 1, 1, 1, 1, 1, 1, 1, 1,
  29912. 1, 1, 1, 4935, 4578, 4688, 4578, 4578,
  29913. 4578, 4578, 4578, 4937, 1, 4578, 4578, 4738,
  29914. 4578, 4928, 4578, 4578, 4578, 4578, 4578, 4578,
  29915. 4578, 4578, 4578, 4578, 4578, 25, 4738, 26,
  29916. 4578, 1, 4578, 4740, 4578, 4578, 4578, 4578,
  29917. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29918. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29919. 4578, 4578, 4578, 4578, 4578, 4578, 1, 1,
  29920. 1, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29921. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29922. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29923. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  29924. 4578, 4578, 1, 1, 1, 1, 1, 1,
  29925. 1, 1, 1, 1, 1, 1, 1, 1,
  29926. 1, 1, 1, 1, 1, 1, 1, 1,
  29927. 1, 1, 1, 1, 1, 1, 1, 1,
  29928. 1, 1, 1, 1, 1, 1, 1, 1,
  29929. 1, 1, 1, 1, 1, 1, 1, 1,
  29930. 1, 1, 1, 1, 1, 1, 1, 1,
  29931. 1, 1, 1, 1, 1, 1, 1, 1,
  29932. 1, 1, 1, 1, 1, 4579, 4579, 4579,
  29933. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29934. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29935. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  29936. 4579, 4579, 4579, 4690, 4580, 4580, 4580, 4580,
  29937. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  29938. 4691, 4580, 4580, 4692, 4693, 4693, 4693, 4694,
  29939. 1, 4938, 1, 1, 1, 4939, 1, 1,
  29940. 1, 1, 1, 1, 1, 1, 1, 1,
  29941. 1, 1, 1, 1, 1, 1, 1, 1,
  29942. 4938, 21, 22, 21, 21, 21, 21, 21,
  29943. 4940, 1, 21, 21, 4749, 21, 1, 21,
  29944. 21, 21, 21, 21, 21, 21, 21, 21,
  29945. 21, 21, 1, 4749, 8, 21, 1, 21,
  29946. 4941, 21, 21, 21, 21, 21, 21, 21,
  29947. 21, 21, 21, 21, 21, 21, 21, 21,
  29948. 21, 21, 21, 21, 21, 21, 21, 21,
  29949. 21, 21, 21, 1, 1, 1, 21, 21,
  29950. 21, 21, 21, 21, 21, 21, 21, 21,
  29951. 21, 21, 21, 21, 21, 21, 21, 21,
  29952. 21, 21, 21, 21, 21, 21, 21, 21,
  29953. 21, 21, 21, 21, 21, 21, 21, 1,
  29954. 1, 1, 1, 1, 1, 1, 1, 1,
  29955. 1, 1, 1, 1, 1, 1, 1, 1,
  29956. 1, 1, 1, 1, 1, 1, 1, 1,
  29957. 1, 1, 1, 1, 1, 1, 1, 1,
  29958. 1, 1, 1, 1, 1, 1, 1, 1,
  29959. 1, 1, 1, 1, 1, 1, 1, 1,
  29960. 1, 1, 1, 1, 1, 1, 1, 1,
  29961. 1, 1, 1, 1, 1, 1, 1, 1,
  29962. 1, 1, 27, 27, 27, 27, 27, 27,
  29963. 27, 27, 27, 27, 27, 27, 27, 27,
  29964. 27, 27, 27, 27, 27, 27, 27, 27,
  29965. 27, 27, 27, 27, 27, 27, 27, 27,
  29966. 28, 29, 29, 29, 29, 29, 29, 29,
  29967. 29, 29, 29, 29, 29, 30, 29, 29,
  29968. 31, 32, 32, 32, 33, 1, 4942, 1,
  29969. 1, 1, 4943, 1, 1, 1, 1, 1,
  29970. 1, 1, 1, 1, 1, 1, 1, 1,
  29971. 1, 1, 1, 1, 1, 4942, 60, 61,
  29972. 60, 60, 60, 60, 60, 4944, 1, 60,
  29973. 60, 4791, 60, 1, 60, 60, 60, 60,
  29974. 60, 60, 60, 60, 60, 60, 60, 1,
  29975. 4791, 83, 60, 1, 60, 4945, 60, 60,
  29976. 60, 60, 60, 60, 60, 60, 60, 60,
  29977. 60, 60, 60, 60, 60, 60, 60, 60,
  29978. 60, 60, 60, 60, 60, 60, 60, 60,
  29979. 1, 1, 1, 60, 60, 60, 60, 60,
  29980. 60, 60, 60, 60, 60, 60, 60, 60,
  29981. 60, 60, 60, 60, 60, 60, 60, 60,
  29982. 60, 60, 60, 60, 60, 60, 60, 60,
  29983. 60, 60, 60, 60, 1, 1, 1, 1,
  29984. 1, 1, 1, 1, 1, 1, 1, 1,
  29985. 1, 1, 1, 1, 1, 1, 1, 1,
  29986. 1, 1, 1, 1, 1, 1, 1, 1,
  29987. 1, 1, 1, 1, 1, 1, 1, 1,
  29988. 1, 1, 1, 1, 1, 1, 1, 1,
  29989. 1, 1, 1, 1, 1, 1, 1, 1,
  29990. 1, 1, 1, 1, 1, 1, 1, 1,
  29991. 1, 1, 1, 1, 1, 1, 1, 66,
  29992. 66, 66, 66, 66, 66, 66, 66, 66,
  29993. 66, 66, 66, 66, 66, 66, 66, 66,
  29994. 66, 66, 66, 66, 66, 66, 66, 66,
  29995. 66, 66, 66, 66, 66, 67, 68, 68,
  29996. 68, 68, 68, 68, 68, 68, 68, 68,
  29997. 68, 68, 69, 68, 68, 70, 71, 71,
  29998. 71, 72, 1, 3831, 1, 1, 1, 4946,
  29999. 1, 1, 1, 1, 1, 1, 1, 1,
  30000. 1, 1, 1, 1, 1, 1, 1, 1,
  30001. 1, 1, 3831, 4556, 4458, 4556, 4556, 4556,
  30002. 4556, 4556, 4861, 1, 4556, 4556, 4818, 4556,
  30003. 4947, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30004. 4556, 4556, 4556, 4556, 1, 4818, 1, 4556,
  30005. 1, 4556, 1, 4556, 4556, 4556, 4556, 4556,
  30006. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30007. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30008. 4556, 4556, 4556, 4556, 4556, 1, 1, 1,
  30009. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30010. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30011. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30012. 4556, 4556, 4556, 4556, 4556, 4556, 4556, 4556,
  30013. 4556, 1, 1, 1, 1, 1, 1, 1,
  30014. 1, 1, 1, 1, 1, 1, 1, 1,
  30015. 1, 1, 1, 1, 1, 1, 1, 1,
  30016. 1, 1, 1, 1, 1, 1, 1, 1,
  30017. 1, 1, 1, 1, 1, 1, 1, 1,
  30018. 1, 1, 1, 1, 1, 1, 1, 1,
  30019. 1, 1, 1, 1, 1, 1, 1, 1,
  30020. 1, 1, 1, 1, 1, 1, 1, 1,
  30021. 1, 1, 1, 1, 4558, 4558, 4558, 4558,
  30022. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  30023. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  30024. 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
  30025. 4558, 4558, 4559, 4560, 4560, 4560, 4560, 4560,
  30026. 4560, 4560, 4560, 4560, 4560, 4560, 4560, 4561,
  30027. 4560, 4560, 4562, 4563, 4563, 4563, 4564, 1,
  30028. 4948, 1, 1, 1, 4949, 1, 1, 1,
  30029. 1, 1, 1, 1, 1, 1, 1, 1,
  30030. 1, 1, 1, 1, 1, 1, 1, 4948,
  30031. 4612, 4950, 4612, 4612, 4612, 4612, 4612, 4951,
  30032. 1, 4612, 4612, 4738, 4612, 4928, 4612, 4612,
  30033. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30034. 4612, 25, 4738, 26, 4612, 1, 4612, 4740,
  30035. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30036. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30037. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30038. 4612, 4612, 1, 1, 1, 4612, 4612, 4612,
  30039. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30040. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30041. 4612, 4612, 4612, 4612, 4612, 4612, 4612, 4612,
  30042. 4612, 4612, 4612, 4612, 4612, 4612, 1, 1,
  30043. 1, 1, 1, 1, 1, 1, 1, 1,
  30044. 1, 1, 1, 1, 1, 1, 1, 1,
  30045. 1, 1, 1, 1, 1, 1, 1, 1,
  30046. 1, 1, 1, 1, 1, 1, 1, 1,
  30047. 1, 1, 1, 1, 1, 1, 1, 1,
  30048. 1, 1, 1, 1, 1, 1, 1, 1,
  30049. 1, 1, 1, 1, 1, 1, 1, 1,
  30050. 1, 1, 1, 1, 1, 1, 1, 1,
  30051. 1, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  30052. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  30053. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4613,
  30054. 4613, 4613, 4613, 4613, 4613, 4613, 4613, 4741,
  30055. 4614, 4614, 4614, 4614, 4614, 4614, 4614, 4614,
  30056. 4614, 4614, 4614, 4614, 4742, 4614, 4614, 4743,
  30057. 4744, 4744, 4744, 4745, 1, 4952, 1, 1,
  30058. 1, 4953, 1, 1, 1, 1, 1, 1,
  30059. 1, 1, 1, 1, 1, 1, 1, 1,
  30060. 1, 1, 1, 1, 4952, 4429, 4430, 4429,
  30061. 4429, 4429, 4429, 4429, 4954, 1, 4429, 4429,
  30062. 4749, 4429, 1, 4429, 4429, 4429, 4429, 4429,
  30063. 4429, 4429, 4429, 4429, 4429, 4429, 1, 4749,
  30064. 8, 4429, 1, 4429, 4941, 4429, 4429, 4429,
  30065. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  30066. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  30067. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 1,
  30068. 1, 1, 4429, 4429, 4429, 4429, 4429, 4429,
  30069. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  30070. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  30071. 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
  30072. 4429, 4429, 4429, 1, 1, 1, 1, 1,
  30073. 1, 1, 1, 1, 1, 1, 1, 1,
  30074. 1, 1, 1, 1, 1, 1, 1, 1,
  30075. 1, 1, 1, 1, 1, 1, 1, 1,
  30076. 1, 1, 1, 1, 1, 1, 1, 1,
  30077. 1, 1, 1, 1, 1, 1, 1, 1,
  30078. 1, 1, 1, 1, 1, 1, 1, 1,
  30079. 1, 1, 1, 1, 1, 1, 1, 1,
  30080. 1, 1, 1, 1, 1, 1, 4432, 4432,
  30081. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  30082. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  30083. 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
  30084. 4432, 4432, 4432, 4432, 4433, 4434, 4434, 4434,
  30085. 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
  30086. 4434, 4435, 4434, 4434, 4436, 4437, 4437, 4437,
  30087. 4438, 1, 4955, 1, 1, 1, 4956, 1,
  30088. 1, 1, 1, 1, 1, 1, 1, 1,
  30089. 1, 1, 1, 1, 1, 1, 1, 1,
  30090. 1, 4955, 4504, 4505, 4504, 4504, 4504, 4504,
  30091. 4504, 4957, 1, 4504, 4504, 4791, 4504, 1,
  30092. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30093. 4504, 4504, 4504, 1, 4791, 83, 4504, 1,
  30094. 4504, 4945, 4504, 4504, 4504, 4504, 4504, 4504,
  30095. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30096. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30097. 4504, 4504, 4504, 4504, 1, 1, 1, 4504,
  30098. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30099. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30100. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30101. 4504, 4504, 4504, 4504, 4504, 4504, 4504, 4504,
  30102. 1, 1, 1, 1, 1, 1, 1, 1,
  30103. 1, 1, 1, 1, 1, 1, 1, 1,
  30104. 1, 1, 1, 1, 1, 1, 1, 1,
  30105. 1, 1, 1, 1, 1, 1, 1, 1,
  30106. 1, 1, 1, 1, 1, 1, 1, 1,
  30107. 1, 1, 1, 1, 1, 1, 1, 1,
  30108. 1, 1, 1, 1, 1, 1, 1, 1,
  30109. 1, 1, 1, 1, 1, 1, 1, 1,
  30110. 1, 1, 1, 4507, 4507, 4507, 4507, 4507,
  30111. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  30112. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  30113. 4507, 4507, 4507, 4507, 4507, 4507, 4507, 4507,
  30114. 4507, 4508, 4509, 4509, 4509, 4509, 4509, 4509,
  30115. 4509, 4509, 4509, 4509, 4509, 4509, 4510, 4509,
  30116. 4509, 4511, 4512, 4512, 4512, 4513, 1, 4735,
  30117. 1, 1, 1, 4736, 1, 1, 1, 1,
  30118. 1, 1, 1, 1, 1, 1, 1, 1,
  30119. 1, 1, 1, 1, 1, 1, 4735, 4578,
  30120. 4688, 4578, 4578, 4578, 4578, 4578, 4737, 1,
  30121. 4578, 4578, 4738, 4578, 4739, 4578, 4578, 4578,
  30122. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30123. 25, 4738, 26, 4578, 1, 4578, 4740, 4578,
  30124. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30125. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30126. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30127. 4578, 1, 1, 1, 4578, 4578, 4578, 4578,
  30128. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30129. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30130. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30131. 4578, 4578, 4578, 4578, 4578, 1, 1, 1,
  30132. 1, 1, 1, 1, 1, 1, 1, 1,
  30133. 1, 1, 1, 1, 1, 1, 1, 1,
  30134. 1, 1, 1, 1, 1, 1, 1, 1,
  30135. 1, 1, 1, 1, 1, 1, 1, 1,
  30136. 1, 1, 1, 1, 1, 1, 1, 1,
  30137. 1, 1, 1, 1, 1, 1, 1, 1,
  30138. 1, 1, 1, 1, 1, 1, 1, 1,
  30139. 1, 1, 1, 1, 1, 1, 1, 1,
  30140. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30141. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30142. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30143. 4579, 4579, 4579, 4579, 4579, 4579, 4690, 4580,
  30144. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  30145. 4580, 4580, 4580, 4691, 4580, 4580, 4692, 4693,
  30146. 4693, 4693, 4694, 1, 4958, 1, 1, 1,
  30147. 4959, 1, 1, 1, 1, 1, 1, 1,
  30148. 1, 1, 1, 1, 1, 1, 1, 1,
  30149. 1, 1, 1, 4958, 4578, 4688, 4578, 4578,
  30150. 4578, 4578, 4578, 4960, 1, 4578, 4578, 4879,
  30151. 4578, 4739, 4578, 4578, 4578, 4578, 4578, 4578,
  30152. 4578, 4578, 4578, 4578, 4578, 25, 4879, 26,
  30153. 4578, 1, 4578, 4961, 4578, 4578, 4578, 4578,
  30154. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30155. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30156. 4578, 4578, 4578, 4578, 4578, 4578, 1, 1,
  30157. 1, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30158. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30159. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30160. 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
  30161. 4578, 4578, 1, 1, 1, 1, 1, 1,
  30162. 1, 1, 1, 1, 1, 1, 1, 1,
  30163. 1, 1, 1, 1, 1, 1, 1, 1,
  30164. 1, 1, 1, 1, 1, 1, 1, 1,
  30165. 1, 1, 1, 1, 1, 1, 1, 1,
  30166. 1, 1, 1, 1, 1, 1, 1, 1,
  30167. 1, 1, 1, 1, 1, 1, 1, 1,
  30168. 1, 1, 1, 1, 1, 1, 1, 1,
  30169. 1, 1, 1, 1, 1, 4579, 4579, 4579,
  30170. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30171. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30172. 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
  30173. 4579, 4579, 4579, 4690, 4580, 4580, 4580, 4580,
  30174. 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
  30175. 4691, 4580, 4580, 4692, 4693, 4693, 4693, 4694,
  30176. 1, 4962, 1, 1, 1, 4963, 1, 1,
  30177. 1, 1, 1, 1, 1, 1, 1, 1,
  30178. 1, 1, 1, 1, 1, 1, 1, 1,
  30179. 4962, 21, 22, 21, 21, 21, 21, 21,
  30180. 4964, 1, 21, 21, 4884, 21, 4750, 21,
  30181. 21, 21, 21, 21, 21, 21, 21, 21,
  30182. 21, 21, 25, 4884, 26, 21, 1, 21,
  30183. 4965, 21, 21, 21, 21, 21, 21, 21,
  30184. 21, 21, 21, 21, 21, 21, 21, 21,
  30185. 21, 21, 21, 21, 21, 21, 21, 21,
  30186. 21, 21, 21, 1, 1, 1, 21, 21,
  30187. 21, 21, 21, 21, 21, 21, 21, 21,
  30188. 21, 21, 21, 21, 21, 21, 21, 21,
  30189. 21, 21, 21, 21, 21, 21, 21, 21,
  30190. 21, 21, 21, 21, 21, 21, 21, 1,
  30191. 1, 1, 1, 1, 1, 1, 1, 1,
  30192. 1, 1, 1, 1, 1, 1, 1, 1,
  30193. 1, 1, 1, 1, 1, 1, 1, 1,
  30194. 1, 1, 1, 1, 1, 1, 1, 1,
  30195. 1, 1, 1, 1, 1, 1, 1, 1,
  30196. 1, 1, 1, 1, 1, 1, 1, 1,
  30197. 1, 1, 1, 1, 1, 1, 1, 1,
  30198. 1, 1, 1, 1, 1, 1, 1, 1,
  30199. 1, 1, 27, 27, 27, 27, 27, 27,
  30200. 27, 27, 27, 27, 27, 27, 27, 27,
  30201. 27, 27, 27, 27, 27, 27, 27, 27,
  30202. 27, 27, 27, 27, 27, 27, 27, 27,
  30203. 28, 29, 29, 29, 29, 29, 29, 29,
  30204. 29, 29, 29, 29, 29, 30, 29, 29,
  30205. 31, 32, 32, 32, 33, 1, 4966, 1,
  30206. 1, 1, 4967, 1, 1, 1, 1, 1,
  30207. 1, 1, 1, 1, 1, 1, 1, 1,
  30208. 1, 1, 1, 1, 1, 4966, 60, 61,
  30209. 60, 60, 60, 60, 60, 4968, 1, 60,
  30210. 60, 4889, 60, 4914, 60, 60, 60, 60,
  30211. 60, 60, 60, 60, 60, 60, 60, 64,
  30212. 4889, 65, 60, 1, 60, 4969, 60, 60,
  30213. 60, 60, 60, 60, 60, 60, 60, 60,
  30214. 60, 60, 60, 60, 60, 60, 60, 60,
  30215. 60, 60, 60, 60, 60, 60, 60, 60,
  30216. 1, 1, 1, 60, 60, 60, 60, 60,
  30217. 60, 60, 60, 60, 60, 60, 60, 60,
  30218. 60, 60, 60, 60, 60, 60, 60, 60,
  30219. 60, 60, 60, 60, 60, 60, 60, 60,
  30220. 60, 60, 60, 60, 1, 1, 1, 1,
  30221. 1, 1, 1, 1, 1, 1, 1, 1,
  30222. 1, 1, 1, 1, 1, 1, 1, 1,
  30223. 1, 1, 1, 1, 1, 1, 1, 1,
  30224. 1, 1, 1, 1, 1, 1, 1, 1,
  30225. 1, 1, 1, 1, 1, 1, 1, 1,
  30226. 1, 1, 1, 1, 1, 1, 1, 1,
  30227. 1, 1, 1, 1, 1, 1, 1, 1,
  30228. 1, 1, 1, 1, 1, 1, 1, 66,
  30229. 66, 66, 66, 66, 66, 66, 66, 66,
  30230. 66, 66, 66, 66, 66, 66, 66, 66,
  30231. 66, 66, 66, 66, 66, 66, 66, 66,
  30232. 66, 66, 66, 66, 66, 67, 68, 68,
  30233. 68, 68, 68, 68, 68, 68, 68, 68,
  30234. 68, 68, 69, 68, 68, 70, 71, 71,
  30235. 71, 72, 1, 4970, 1, 1, 1, 4971,
  30236. 1, 1, 1, 1, 1, 1, 1, 1,
  30237. 1, 1, 1, 1, 1, 1, 1, 1,
  30238. 1, 1, 4970, 21, 22, 21, 21, 21,
  30239. 21, 21, 4972, 1, 21, 21, 4894, 21,
  30240. 4750, 21, 21, 21, 21, 21, 21, 21,
  30241. 21, 21, 21, 21, 25, 4894, 26, 21,
  30242. 1, 21, 4973, 21, 21, 21, 21, 21,
  30243. 21, 21, 21, 21, 21, 21, 21, 21,
  30244. 21, 21, 21, 21, 21, 21, 21, 21,
  30245. 21, 21, 21, 21, 21, 1, 1, 1,
  30246. 21, 21, 21, 21, 21, 21, 21, 21,
  30247. 21, 21, 21, 21, 21, 21, 21, 21,
  30248. 21, 21, 21, 21, 21, 21, 21, 21,
  30249. 21, 21, 21, 21, 21, 21, 21, 21,
  30250. 21, 1, 1, 1, 1, 1, 1, 1,
  30251. 1, 1, 1, 1, 1, 1, 1, 1,
  30252. 1, 1, 1, 1, 1, 1, 1, 1,
  30253. 1, 1, 1, 1, 1, 1, 1, 1,
  30254. 1, 1, 1, 1, 1, 1, 1, 1,
  30255. 1, 1, 1, 1, 1, 1, 1, 1,
  30256. 1, 1, 1, 1, 1, 1, 1, 1,
  30257. 1, 1, 1, 1, 1, 1, 1, 1,
  30258. 1, 1, 1, 1, 27, 27, 27, 27,
  30259. 27, 27, 27, 27, 27, 27, 27, 27,
  30260. 27, 27, 27, 27, 27, 27, 27, 27,
  30261. 27, 27, 27, 27, 27, 27, 27, 27,
  30262. 27, 27, 28, 29, 29, 29, 29, 29,
  30263. 29, 29, 29, 29, 29, 29, 29, 30,
  30264. 29, 29, 31, 32, 32, 32, 33, 1,
  30265. 4974, 1, 1, 1, 4975, 1, 1, 1,
  30266. 1, 1, 1, 1, 1, 1, 1, 1,
  30267. 1, 1, 1, 1, 1, 1, 1, 4974,
  30268. 60, 61, 60, 60, 60, 60, 60, 4976,
  30269. 1, 60, 60, 4899, 60, 4914, 60, 60,
  30270. 60, 60, 60, 60, 60, 60, 60, 60,
  30271. 60, 64, 4899, 65, 60, 1, 60, 4977,
  30272. 60, 60, 60, 60, 60, 60, 60, 60,
  30273. 60, 60, 60, 60, 60, 60, 60, 60,
  30274. 60, 60, 60, 60, 60, 60, 60, 60,
  30275. 60, 60, 1, 1, 1, 60, 60, 60,
  30276. 60, 60, 60, 60, 60, 60, 60, 60,
  30277. 60, 60, 60, 60, 60, 60, 60, 60,
  30278. 60, 60, 60, 60, 60, 60, 60, 60,
  30279. 60, 60, 60, 60, 60, 60, 1, 1,
  30280. 1, 1, 1, 1, 1, 1, 1, 1,
  30281. 1, 1, 1, 1, 1, 1, 1, 1,
  30282. 1, 1, 1, 1, 1, 1, 1, 1,
  30283. 1, 1, 1, 1, 1, 1, 1, 1,
  30284. 1, 1, 1, 1, 1, 1, 1, 1,
  30285. 1, 1, 1, 1, 1, 1, 1, 1,
  30286. 1, 1, 1, 1, 1, 1, 1, 1,
  30287. 1, 1, 1, 1, 1, 1, 1, 1,
  30288. 1, 66, 66, 66, 66, 66, 66, 66,
  30289. 66, 66, 66, 66, 66, 66, 66, 66,
  30290. 66, 66, 66, 66, 66, 66, 66, 66,
  30291. 66, 66, 66, 66, 66, 66, 66, 67,
  30292. 68, 68, 68, 68, 68, 68, 68, 68,
  30293. 68, 68, 68, 68, 69, 68, 68, 70,
  30294. 71, 71, 71, 72, 1, 4978, 1, 1,
  30295. 1, 4979, 1, 1, 1, 1, 1, 1,
  30296. 1, 1, 1, 1, 1, 1, 1, 1,
  30297. 1, 1, 1, 1, 4978, 4663, 4664, 4663,
  30298. 4663, 4663, 4663, 4663, 4980, 1, 4663, 4663,
  30299. 4738, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30300. 4663, 4663, 4663, 4663, 4663, 4663, 1, 4738,
  30301. 1, 4663, 1, 4663, 4981, 4663, 4663, 4663,
  30302. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30303. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30304. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 1,
  30305. 1, 1, 4663, 4663, 4663, 4663, 4663, 4663,
  30306. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30307. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30308. 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
  30309. 4663, 4663, 4663, 1, 1, 1, 1, 1,
  30310. 1, 1, 1, 1, 1, 1, 1, 1,
  30311. 1, 1, 1, 1, 1, 1, 1, 1,
  30312. 1, 1, 1, 1, 1, 1, 1, 1,
  30313. 1, 1, 1, 1, 1, 1, 1, 1,
  30314. 1, 1, 1, 1, 1, 1, 1, 1,
  30315. 1, 1, 1, 1, 1, 1, 1, 1,
  30316. 1, 1, 1, 1, 1, 1, 1, 1,
  30317. 1, 1, 1, 1, 1, 1, 4666, 4666,
  30318. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  30319. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  30320. 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
  30321. 4666, 4666, 4666, 4666, 4667, 4668, 4668, 4668,
  30322. 4668, 4668, 4668, 4668, 4668, 4668, 4668, 4668,
  30323. 4668, 4669, 4668, 4668, 4670, 4671, 4671, 4671,
  30324. 4672, 1, 4982, 1, 1, 1, 4983, 1,
  30325. 1, 1, 1, 1, 1, 1, 1, 1,
  30326. 1, 1, 1, 1, 1, 1, 1, 1,
  30327. 1, 4982, 1, 1, 1, 1, 1, 1,
  30328. 1, 4984, 1, 1, 1, 4749, 1, 1,
  30329. 1, 1, 1, 1, 1, 1, 1, 1,
  30330. 1, 1, 1, 1, 4749, 1, 1, 1,
  30331. 1, 4941, 1, 4985, 1, 1, 1, 4986,
  30332. 1, 1, 1, 1, 1, 1, 1, 1,
  30333. 1, 1, 1, 1, 1, 1, 1, 1,
  30334. 1, 1, 4985, 1, 1, 1, 1, 1,
  30335. 1, 1, 4987, 1, 1, 1, 4791, 1,
  30336. 1, 1, 1, 1, 1, 1, 1, 1,
  30337. 1, 1, 1, 1, 1, 4791, 1, 1,
  30338. 1, 1, 4945, 1, 1, 0,
  30339. ]
  30340. 1 class << self
  30341. 1 attr_accessor :_trans_targs
  30342. 1 private :_trans_targs, :_trans_targs=
  30343. end
  30344. 1 self._trans_targs = [
  30345. 1, 0, 2, 2462, 2401, 2420, 2466, 2424,
  30346. 27, 2394, 2395, 2396, 2397, 2398, 2399, 2400,
  30347. 3, 5, 2463, 6, 7, 6, 9, 21,
  30348. 22, 56, 27, 1816, 1817, 1818, 1819, 1820,
  30349. 1821, 1822, 8, 10, 11, 6, 13, 14,
  30350. 15, 16, 17, 18, 19, 20, 10, 11,
  30351. 6, 13, 14, 15, 16, 17, 18, 19,
  30352. 20, 12, 6, 7, 6, 9, 21, 22,
  30353. 56, 27, 1816, 1817, 1818, 1819, 1820, 1821,
  30354. 1822, 23, 24, 26, 23, 24, 26, 25,
  30355. 23, 24, 26, 27, 28, 29, 31, 2178,
  30356. 2202, 2203, 2225, 2207, 2171, 2172, 2173, 2174,
  30357. 2175, 2176, 2177, 28, 29, 2202, 2203, 2207,
  30358. 30, 32, 33, 31, 2124, 35, 2150, 2464,
  30359. 2036, 2171, 2172, 2173, 2174, 2175, 2176, 2177,
  30360. 32, 33, 35, 36, 2464, 2036, 34, 32,
  30361. 33, 35, 36, 2464, 2036, 37, 39, 2111,
  30362. 2123, 2104, 2105, 2106, 2107, 2108, 2109, 2110,
  30363. 38, 40, 41, 43, 2036, 42, 40, 41,
  30364. 43, 2036, 45, 47, 49, 2468, 51, 52,
  30365. 2470, 1899, 1911, 1892, 1893, 1894, 1895, 1896,
  30366. 1897, 1898, 51, 52, 1911, 53, 55, 2471,
  30367. 57, 58, 60, 110, 1792, 1793, 1542, 2476,
  30368. 85, 80, 914, 915, 916, 917, 918, 919,
  30369. 920, 57, 58, 60, 110, 1792, 1515, 85,
  30370. 914, 915, 916, 917, 918, 919, 920, 59,
  30371. 61, 62, 60, 835, 902, 106, 892, 2473,
  30372. 85, 706, 914, 915, 916, 917, 918, 919,
  30373. 920, 61, 62, 64, 67, 902, 106, 119,
  30374. 2473, 706, 728, 729, 730, 731, 732, 733,
  30375. 734, 63, 61, 64, 65, 79, 80, 66,
  30376. 68, 69, 64, 71, 72, 73, 74, 75,
  30377. 76, 77, 78, 68, 69, 64, 71, 72,
  30378. 73, 74, 75, 76, 77, 78, 70, 64,
  30379. 65, 64, 67, 79, 80, 85, 728, 729,
  30380. 730, 731, 732, 733, 734, 81, 82, 84,
  30381. 81, 82, 84, 83, 81, 82, 84, 85,
  30382. 86, 87, 89, 1685, 1709, 1710, 1732, 1714,
  30383. 1678, 1679, 1680, 1681, 1682, 1683, 1684, 86,
  30384. 87, 1709, 1710, 1714, 88, 90, 91, 89,
  30385. 1631, 93, 1657, 102, 1543, 1678, 1679, 1680,
  30386. 1681, 1682, 1683, 1684, 90, 91, 93, 94,
  30387. 102, 1543, 92, 90, 91, 93, 94, 102,
  30388. 1543, 95, 97, 1618, 1630, 1611, 1612, 1613,
  30389. 1614, 1615, 1616, 1617, 96, 98, 99, 101,
  30390. 1543, 100, 98, 99, 101, 1543, 103, 105,
  30391. 106, 2473, 104, 103, 105, 106, 2473, 107,
  30392. 108, 936, 937, 107, 108, 936, 109, 111,
  30393. 929, 930, 932, 921, 922, 923, 924, 925,
  30394. 926, 927, 928, 111, 112, 114, 921, 922,
  30395. 923, 924, 925, 926, 927, 928, 113, 115,
  30396. 116, 830, 118, 106, 2473, 706, 885, 886,
  30397. 887, 888, 889, 890, 891, 115, 116, 118,
  30398. 106, 2473, 706, 117, 115, 115, 116, 118,
  30399. 106, 119, 2473, 706, 120, 121, 123, 817,
  30400. 829, 810, 811, 812, 813, 814, 815, 816,
  30401. 120, 121, 829, 122, 124, 125, 127, 706,
  30402. 126, 124, 124, 125, 127, 706, 129, 2474,
  30403. 131, 132, 130, 327, 394, 176, 384, 155,
  30404. 198, 406, 407, 408, 409, 410, 411, 412,
  30405. 131, 132, 134, 137, 394, 176, 189, 198,
  30406. 220, 221, 222, 223, 224, 225, 226, 133,
  30407. 131, 134, 135, 149, 150, 136, 138, 139,
  30408. 134, 141, 142, 143, 144, 145, 146, 147,
  30409. 148, 138, 139, 134, 141, 142, 143, 144,
  30410. 145, 146, 147, 148, 140, 134, 135, 134,
  30411. 137, 149, 150, 155, 220, 221, 222, 223,
  30412. 224, 225, 226, 151, 152, 154, 151, 152,
  30413. 154, 155, 153, 151, 152, 154, 155, 156,
  30414. 157, 159, 599, 623, 624, 646, 628, 592,
  30415. 593, 594, 595, 596, 597, 598, 156, 157,
  30416. 623, 624, 628, 158, 160, 161, 159, 545,
  30417. 163, 571, 172, 457, 592, 593, 594, 595,
  30418. 596, 597, 598, 160, 161, 163, 164, 172,
  30419. 457, 162, 160, 161, 163, 164, 172, 457,
  30420. 165, 167, 532, 544, 525, 526, 527, 528,
  30421. 529, 530, 531, 166, 168, 169, 171, 457,
  30422. 170, 168, 169, 171, 457, 173, 175, 176,
  30423. 174, 173, 175, 176, 177, 178, 130, 180,
  30424. 428, 456, 155, 150, 406, 407, 408, 409,
  30425. 410, 411, 412, 177, 178, 130, 180, 428,
  30426. 429, 406, 407, 408, 409, 410, 411, 412,
  30427. 179, 181, 421, 422, 424, 413, 414, 415,
  30428. 416, 417, 418, 419, 420, 181, 182, 184,
  30429. 413, 414, 415, 416, 417, 418, 419, 420,
  30430. 183, 185, 186, 322, 188, 176, 198, 377,
  30431. 378, 379, 380, 381, 382, 383, 185, 186,
  30432. 188, 176, 198, 187, 185, 185, 186, 188,
  30433. 176, 189, 198, 190, 191, 193, 309, 321,
  30434. 302, 303, 304, 305, 306, 307, 308, 190,
  30435. 191, 321, 192, 194, 195, 197, 198, 196,
  30436. 194, 194, 195, 197, 198, 199, 200, 202,
  30437. 227, 263, 236, 291, 256, 257, 258, 259,
  30438. 260, 261, 262, 199, 200, 202, 227, 263,
  30439. 264, 291, 256, 257, 258, 259, 260, 261,
  30440. 262, 201, 203, 204, 206, 176, 255, 2473,
  30441. 207, 205, 203, 203, 204, 206, 176, 207,
  30442. 2473, 208, 209, 211, 219, 212, 213, 214,
  30443. 215, 216, 217, 218, 208, 209, 219, 210,
  30444. 208, 209, 211, 219, 212, 213, 214, 215,
  30445. 216, 217, 218, 228, 252, 253, 244, 245,
  30446. 246, 247, 248, 249, 250, 251, 228, 229,
  30447. 231, 244, 245, 246, 247, 248, 249, 250,
  30448. 251, 230, 232, 233, 231, 235, 236, 237,
  30449. 238, 239, 240, 241, 242, 243, 234, 232,
  30450. 232, 233, 235, 252, 253, 254, 199, 200,
  30451. 202, 227, 263, 264, 291, 256, 257, 258,
  30452. 259, 260, 261, 262, 265, 270, 284, 285,
  30453. 286, 287, 288, 289, 290, 266, 267, 269,
  30454. 268, 266, 267, 269, 271, 282, 274, 275,
  30455. 276, 277, 278, 279, 280, 281, 272, 273,
  30456. 283, 292, 294, 295, 296, 297, 298, 299,
  30457. 300, 301, 293, 310, 311, 194, 313, 314,
  30458. 315, 316, 317, 318, 319, 320, 310, 311,
  30459. 194, 313, 314, 315, 316, 317, 318, 319,
  30460. 320, 312, 190, 191, 193, 309, 321, 302,
  30461. 303, 304, 305, 306, 307, 308, 323, 324,
  30462. 326, 342, 323, 324, 326, 325, 323, 323,
  30463. 324, 326, 176, 2473, 198, 328, 339, 340,
  30464. 331, 332, 333, 334, 335, 336, 337, 338,
  30465. 328, 329, 322, 331, 332, 333, 334, 335,
  30466. 336, 337, 338, 330, 339, 340, 341, 343,
  30467. 344, 346, 343, 344, 346, 347, 345, 343,
  30468. 344, 346, 347, 348, 349, 351, 270, 376,
  30469. 264, 369, 370, 371, 372, 373, 374, 375,
  30470. 348, 349, 351, 376, 369, 370, 371, 372,
  30471. 373, 374, 375, 350, 352, 353, 355, 368,
  30472. 356, 354, 352, 353, 355, 356, 357, 359,
  30473. 367, 360, 361, 362, 363, 364, 365, 366,
  30474. 358, 357, 359, 367, 360, 361, 362, 363,
  30475. 364, 365, 366, 348, 349, 351, 270, 376,
  30476. 369, 370, 371, 372, 373, 374, 375, 385,
  30477. 386, 389, 388, 385, 386, 388, 387, 385,
  30478. 386, 388, 390, 403, 404, 395, 396, 397,
  30479. 398, 399, 400, 401, 402, 390, 391, 393,
  30480. 395, 396, 397, 398, 399, 400, 401, 402,
  30481. 392, 131, 132, 394, 403, 404, 405, 421,
  30482. 422, 424, 423, 424, 425, 427, 176, 2473,
  30483. 198, 426, 424, 424, 425, 427, 176, 2473,
  30484. 198, 177, 178, 130, 180, 428, 429, 406,
  30485. 407, 408, 409, 410, 411, 412, 430, 435,
  30486. 429, 449, 450, 451, 452, 453, 454, 455,
  30487. 431, 432, 434, 347, 431, 432, 434, 433,
  30488. 431, 432, 434, 436, 447, 439, 440, 441,
  30489. 442, 443, 444, 445, 446, 437, 438, 448,
  30490. 456, 458, 459, 461, 478, 513, 487, 514,
  30491. 506, 507, 508, 509, 510, 511, 512, 458,
  30492. 459, 461, 478, 513, 487, 514, 506, 507,
  30493. 508, 509, 510, 511, 512, 460, 462, 463,
  30494. 465, 505, 172, 466, 464, 462, 463, 465,
  30495. 466, 172, 467, 469, 477, 470, 471, 472,
  30496. 473, 474, 475, 476, 468, 467, 469, 477,
  30497. 470, 471, 472, 473, 474, 475, 476, 479,
  30498. 503, 495, 496, 497, 498, 499, 500, 501,
  30499. 502, 480, 482, 481, 483, 484, 486, 488,
  30500. 489, 490, 491, 492, 493, 494, 485, 483,
  30501. 484, 486, 504, 458, 459, 461, 478, 513,
  30502. 487, 514, 506, 507, 508, 509, 510, 511,
  30503. 512, 515, 517, 518, 519, 520, 521, 522,
  30504. 523, 524, 516, 533, 534, 168, 536, 537,
  30505. 538, 539, 540, 541, 542, 543, 533, 534,
  30506. 168, 536, 537, 538, 539, 540, 541, 542,
  30507. 543, 535, 165, 167, 532, 544, 525, 526,
  30508. 527, 528, 529, 530, 531, 546, 569, 561,
  30509. 562, 563, 564, 565, 566, 567, 568, 547,
  30510. 549, 548, 550, 551, 553, 554, 555, 556,
  30511. 557, 558, 559, 560, 550, 551, 553, 552,
  30512. 550, 551, 553, 570, 572, 573, 576, 575,
  30513. 572, 573, 575, 574, 572, 573, 575, 577,
  30514. 589, 590, 581, 582, 583, 584, 585, 586,
  30515. 587, 588, 577, 578, 580, 581, 582, 583,
  30516. 584, 585, 586, 587, 588, 579, 589, 590,
  30517. 591, 600, 616, 617, 619, 608, 609, 610,
  30518. 611, 612, 613, 614, 615, 600, 601, 603,
  30519. 608, 609, 610, 611, 612, 613, 614, 615,
  30520. 602, 604, 605, 607, 457, 604, 605, 607,
  30521. 457, 606, 604, 605, 607, 457, 616, 617,
  30522. 619, 618, 619, 620, 622, 457, 621, 619,
  30523. 620, 622, 457, 156, 157, 159, 599, 623,
  30524. 624, 646, 628, 592, 593, 594, 595, 596,
  30525. 597, 598, 625, 627, 626, 625, 627, 629,
  30526. 630, 632, 659, 694, 668, 695, 687, 688,
  30527. 689, 690, 691, 692, 693, 629, 630, 632,
  30528. 659, 694, 668, 695, 687, 688, 689, 690,
  30529. 691, 692, 693, 631, 633, 634, 636, 637,
  30530. 686, 641, 647, 635, 633, 634, 636, 637,
  30531. 647, 641, 637, 638, 640, 641, 639, 637,
  30532. 638, 640, 641, 642, 643, 159, 599, 645,
  30533. 646, 592, 593, 594, 595, 596, 597, 598,
  30534. 642, 643, 645, 644, 642, 643, 645, 646,
  30535. 648, 650, 658, 651, 652, 653, 654, 655,
  30536. 656, 657, 649, 648, 650, 658, 651, 652,
  30537. 653, 654, 655, 656, 657, 660, 684, 676,
  30538. 677, 678, 679, 680, 681, 682, 683, 661,
  30539. 663, 662, 664, 665, 667, 669, 670, 671,
  30540. 672, 673, 674, 675, 666, 664, 665, 667,
  30541. 685, 629, 630, 632, 659, 694, 668, 695,
  30542. 687, 688, 689, 690, 691, 692, 693, 696,
  30543. 698, 699, 700, 701, 702, 703, 704, 705,
  30544. 697, 707, 708, 710, 735, 771, 744, 799,
  30545. 764, 765, 766, 767, 768, 769, 770, 707,
  30546. 708, 710, 735, 771, 772, 799, 764, 765,
  30547. 766, 767, 768, 769, 770, 709, 711, 712,
  30548. 714, 106, 763, 715, 713, 711, 711, 712,
  30549. 714, 106, 715, 716, 717, 719, 727, 720,
  30550. 721, 722, 723, 724, 725, 726, 716, 717,
  30551. 727, 718, 716, 717, 719, 727, 720, 721,
  30552. 722, 723, 724, 725, 726, 736, 760, 761,
  30553. 752, 753, 754, 755, 756, 757, 758, 759,
  30554. 736, 737, 739, 752, 753, 754, 755, 756,
  30555. 757, 758, 759, 738, 740, 741, 739, 743,
  30556. 744, 745, 746, 747, 748, 749, 750, 751,
  30557. 742, 740, 740, 741, 743, 760, 761, 762,
  30558. 707, 708, 710, 735, 771, 772, 799, 764,
  30559. 765, 766, 767, 768, 769, 770, 773, 778,
  30560. 792, 793, 794, 795, 796, 797, 798, 774,
  30561. 775, 777, 776, 774, 775, 777, 779, 790,
  30562. 782, 783, 784, 785, 786, 787, 788, 789,
  30563. 780, 781, 791, 800, 802, 803, 804, 805,
  30564. 806, 807, 808, 809, 801, 818, 819, 124,
  30565. 821, 822, 823, 824, 825, 826, 827, 828,
  30566. 818, 819, 124, 821, 822, 823, 824, 825,
  30567. 826, 827, 828, 820, 120, 121, 123, 817,
  30568. 829, 810, 811, 812, 813, 814, 815, 816,
  30569. 831, 832, 834, 850, 831, 832, 834, 833,
  30570. 831, 831, 832, 834, 106, 706, 836, 847,
  30571. 848, 839, 840, 841, 842, 843, 844, 845,
  30572. 846, 836, 837, 830, 839, 840, 841, 842,
  30573. 843, 844, 845, 846, 838, 847, 848, 849,
  30574. 851, 852, 854, 851, 852, 854, 855, 853,
  30575. 851, 852, 854, 855, 856, 857, 859, 778,
  30576. 884, 772, 877, 878, 879, 880, 881, 882,
  30577. 883, 856, 857, 859, 884, 877, 878, 879,
  30578. 880, 881, 882, 883, 858, 860, 861, 863,
  30579. 876, 864, 862, 860, 861, 863, 864, 865,
  30580. 867, 875, 868, 869, 870, 871, 872, 873,
  30581. 874, 866, 865, 867, 875, 868, 869, 870,
  30582. 871, 872, 873, 874, 856, 857, 859, 778,
  30583. 884, 877, 878, 879, 880, 881, 882, 883,
  30584. 893, 894, 897, 896, 893, 894, 896, 895,
  30585. 893, 894, 896, 898, 911, 912, 903, 904,
  30586. 905, 906, 907, 908, 909, 910, 898, 899,
  30587. 901, 903, 904, 905, 906, 907, 908, 909,
  30588. 910, 900, 61, 62, 902, 911, 912, 913,
  30589. 929, 930, 932, 931, 932, 933, 935, 106,
  30590. 706, 934, 932, 932, 933, 935, 106, 706,
  30591. 107, 108, 60, 110, 936, 937, 1515, 2476,
  30592. 914, 915, 916, 917, 918, 919, 920, 938,
  30593. 939, 941, 1462, 1486, 1514, 966, 961, 1455,
  30594. 1456, 1457, 1458, 1459, 1460, 1461, 938, 939,
  30595. 941, 1462, 1486, 1487, 966, 1455, 1456, 1457,
  30596. 1458, 1459, 1460, 1461, 940, 942, 943, 941,
  30597. 1372, 1245, 937, 1434, 2476, 966, 1255, 1455,
  30598. 1456, 1457, 1458, 1459, 1460, 1461, 942, 943,
  30599. 945, 948, 1245, 937, 1246, 2476, 1255, 1238,
  30600. 1239, 1240, 1241, 1242, 1243, 1244, 944, 942,
  30601. 945, 946, 960, 961, 947, 949, 950, 945,
  30602. 952, 953, 954, 955, 956, 957, 958, 959,
  30603. 949, 950, 945, 952, 953, 954, 955, 956,
  30604. 957, 958, 959, 951, 945, 946, 945, 948,
  30605. 960, 961, 966, 1238, 1239, 1240, 1241, 1242,
  30606. 1243, 1244, 962, 963, 965, 962, 963, 965,
  30607. 964, 962, 963, 965, 966, 967, 968, 970,
  30608. 1131, 1155, 1156, 1178, 1160, 1124, 1125, 1126,
  30609. 1127, 1128, 1129, 1130, 967, 968, 1155, 1156,
  30610. 1160, 969, 971, 972, 970, 1077, 974, 1103,
  30611. 983, 989, 1124, 1125, 1126, 1127, 1128, 1129,
  30612. 1130, 971, 972, 974, 975, 983, 989, 973,
  30613. 971, 972, 974, 975, 983, 989, 976, 978,
  30614. 1064, 1076, 1057, 1058, 1059, 1060, 1061, 1062,
  30615. 1063, 977, 979, 980, 982, 989, 981, 979,
  30616. 980, 982, 989, 984, 986, 937, 2476, 985,
  30617. 984, 986, 937, 2476, 988, 990, 991, 993,
  30618. 1010, 1045, 1019, 1046, 1038, 1039, 1040, 1041,
  30619. 1042, 1043, 1044, 990, 991, 993, 1010, 1045,
  30620. 1019, 1046, 1038, 1039, 1040, 1041, 1042, 1043,
  30621. 1044, 992, 994, 995, 997, 1037, 983, 998,
  30622. 996, 994, 995, 997, 998, 983, 999, 1001,
  30623. 1009, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
  30624. 1000, 999, 1001, 1009, 1002, 1003, 1004, 1005,
  30625. 1006, 1007, 1008, 1011, 1035, 1027, 1028, 1029,
  30626. 1030, 1031, 1032, 1033, 1034, 1012, 1014, 1013,
  30627. 1015, 1016, 1018, 1020, 1021, 1022, 1023, 1024,
  30628. 1025, 1026, 1017, 1015, 1016, 1018, 1036, 990,
  30629. 991, 993, 1010, 1045, 1019, 1046, 1038, 1039,
  30630. 1040, 1041, 1042, 1043, 1044, 1047, 1049, 1050,
  30631. 1051, 1052, 1053, 1054, 1055, 1056, 1048, 1065,
  30632. 1066, 979, 1068, 1069, 1070, 1071, 1072, 1073,
  30633. 1074, 1075, 1065, 1066, 979, 1068, 1069, 1070,
  30634. 1071, 1072, 1073, 1074, 1075, 1067, 976, 978,
  30635. 1064, 1076, 1057, 1058, 1059, 1060, 1061, 1062,
  30636. 1063, 1078, 1101, 1093, 1094, 1095, 1096, 1097,
  30637. 1098, 1099, 1100, 1079, 1081, 1080, 1082, 1083,
  30638. 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092,
  30639. 1082, 1083, 1085, 1084, 1082, 1083, 1085, 1102,
  30640. 1104, 1105, 1108, 1107, 1104, 1105, 1107, 1106,
  30641. 1104, 1105, 1107, 1109, 1121, 1122, 1113, 1114,
  30642. 1115, 1116, 1117, 1118, 1119, 1120, 1109, 1110,
  30643. 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
  30644. 1120, 1111, 1121, 1122, 1123, 1132, 1148, 1149,
  30645. 1151, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
  30646. 1147, 1132, 1133, 1135, 1140, 1141, 1142, 1143,
  30647. 1144, 1145, 1146, 1147, 1134, 1136, 1137, 1139,
  30648. 989, 1136, 1137, 1139, 989, 1138, 1136, 1137,
  30649. 1139, 989, 1148, 1149, 1151, 1150, 1151, 1152,
  30650. 1154, 989, 1153, 1151, 1152, 1154, 989, 967,
  30651. 968, 970, 1131, 1155, 1156, 1178, 1160, 1124,
  30652. 1125, 1126, 1127, 1128, 1129, 1130, 1157, 1159,
  30653. 1158, 1157, 1159, 1161, 1162, 1164, 1191, 1226,
  30654. 1200, 1227, 1219, 1220, 1221, 1222, 1223, 1224,
  30655. 1225, 1161, 1162, 1164, 1191, 1226, 1200, 1227,
  30656. 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1163,
  30657. 1165, 1166, 1168, 1169, 1218, 1173, 1179, 1167,
  30658. 1165, 1166, 1168, 1169, 1179, 1173, 1169, 1170,
  30659. 1172, 1173, 1171, 1169, 1170, 1172, 1173, 1174,
  30660. 1175, 970, 1131, 1177, 1178, 1124, 1125, 1126,
  30661. 1127, 1128, 1129, 1130, 1174, 1175, 1177, 1176,
  30662. 1174, 1175, 1177, 1178, 1180, 1182, 1190, 1183,
  30663. 1184, 1185, 1186, 1187, 1188, 1189, 1181, 1180,
  30664. 1182, 1190, 1183, 1184, 1185, 1186, 1187, 1188,
  30665. 1189, 1192, 1216, 1208, 1209, 1210, 1211, 1212,
  30666. 1213, 1214, 1215, 1193, 1195, 1194, 1196, 1197,
  30667. 1199, 1201, 1202, 1203, 1204, 1205, 1206, 1207,
  30668. 1198, 1196, 1197, 1199, 1217, 1161, 1162, 1164,
  30669. 1191, 1226, 1200, 1227, 1219, 1220, 1221, 1222,
  30670. 1223, 1224, 1225, 1228, 1230, 1231, 1232, 1233,
  30671. 1234, 1235, 1236, 1237, 1229, 942, 943, 1245,
  30672. 937, 1246, 2476, 1255, 1247, 1248, 1250, 1359,
  30673. 1371, 1352, 1353, 1354, 1355, 1356, 1357, 1358,
  30674. 1247, 1248, 1371, 1249, 1251, 1252, 1254, 1255,
  30675. 1253, 1251, 1251, 1252, 1254, 1255, 1256, 1257,
  30676. 1259, 1277, 1313, 1286, 1341, 1306, 1307, 1308,
  30677. 1309, 1310, 1311, 1312, 1256, 1257, 1259, 1277,
  30678. 1313, 1314, 1341, 1306, 1307, 1308, 1309, 1310,
  30679. 1311, 1312, 1258, 1260, 1261, 1263, 937, 1305,
  30680. 2476, 1264, 1262, 1260, 1260, 1261, 1263, 937,
  30681. 1264, 2476, 1265, 1266, 1268, 1276, 1269, 1270,
  30682. 1271, 1272, 1273, 1274, 1275, 1265, 1266, 1276,
  30683. 1267, 1265, 1266, 1268, 1276, 1269, 1270, 1271,
  30684. 1272, 1273, 1274, 1275, 1278, 1302, 1303, 1294,
  30685. 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1278,
  30686. 1279, 1281, 1294, 1295, 1296, 1297, 1298, 1299,
  30687. 1300, 1301, 1280, 1282, 1283, 1281, 1285, 1286,
  30688. 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1284,
  30689. 1282, 1282, 1283, 1285, 1302, 1303, 1304, 1256,
  30690. 1257, 1259, 1277, 1313, 1314, 1341, 1306, 1307,
  30691. 1308, 1309, 1310, 1311, 1312, 1315, 1320, 1334,
  30692. 1335, 1336, 1337, 1338, 1339, 1340, 1316, 1317,
  30693. 1319, 1318, 1316, 1317, 1319, 1321, 1332, 1324,
  30694. 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1322,
  30695. 1323, 1333, 1342, 1344, 1345, 1346, 1347, 1348,
  30696. 1349, 1350, 1351, 1343, 1360, 1361, 1251, 1363,
  30697. 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1360,
  30698. 1361, 1251, 1363, 1364, 1365, 1366, 1367, 1368,
  30699. 1369, 1370, 1362, 1247, 1248, 1250, 1359, 1371,
  30700. 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1373,
  30701. 1431, 1432, 1423, 1424, 1425, 1426, 1427, 1428,
  30702. 1429, 1430, 1373, 1374, 1376, 1423, 1424, 1425,
  30703. 1426, 1427, 1428, 1429, 1430, 1375, 1377, 1378,
  30704. 1376, 1380, 1381, 1416, 1417, 1418, 1419, 1420,
  30705. 1421, 1422, 1377, 1378, 1380, 1379, 1377, 1377,
  30706. 1378, 1380, 1382, 1383, 1385, 1382, 1383, 1385,
  30707. 1386, 1384, 1382, 1383, 1385, 1386, 1387, 1388,
  30708. 1390, 1320, 1415, 1314, 1408, 1409, 1410, 1411,
  30709. 1412, 1413, 1414, 1387, 1388, 1390, 1415, 1408,
  30710. 1409, 1410, 1411, 1412, 1413, 1414, 1389, 1391,
  30711. 1392, 1394, 1407, 1395, 1393, 1391, 1392, 1394,
  30712. 1395, 1396, 1398, 1406, 1399, 1400, 1401, 1402,
  30713. 1403, 1404, 1405, 1397, 1396, 1398, 1406, 1399,
  30714. 1400, 1401, 1402, 1403, 1404, 1405, 1387, 1388,
  30715. 1390, 1320, 1415, 1408, 1409, 1410, 1411, 1412,
  30716. 1413, 1414, 1431, 1432, 1433, 1435, 1436, 1439,
  30717. 1438, 1435, 1436, 1438, 1437, 1435, 1436, 1438,
  30718. 1440, 1452, 1453, 1444, 1445, 1446, 1447, 1448,
  30719. 1449, 1450, 1451, 1440, 1441, 1443, 1444, 1445,
  30720. 1446, 1447, 1448, 1449, 1450, 1451, 1442, 1452,
  30721. 1453, 1454, 1463, 1479, 1480, 1482, 1471, 1472,
  30722. 1473, 1474, 1475, 1476, 1477, 1478, 1463, 1464,
  30723. 1466, 1471, 1472, 1473, 1474, 1475, 1476, 1477,
  30724. 1478, 1465, 1467, 1468, 1470, 937, 2476, 1255,
  30725. 1467, 1468, 1470, 937, 2476, 1255, 1469, 1467,
  30726. 1467, 1468, 1470, 937, 2476, 1255, 1479, 1480,
  30727. 1482, 1481, 1482, 1483, 1485, 937, 2476, 1255,
  30728. 1484, 1482, 1482, 1483, 1485, 937, 2476, 1255,
  30729. 938, 939, 941, 1462, 1486, 1487, 1455, 1456,
  30730. 1457, 1458, 1459, 1460, 1461, 1488, 1493, 1487,
  30731. 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1489,
  30732. 1490, 1492, 1386, 1489, 1490, 1492, 1491, 1489,
  30733. 1490, 1492, 1494, 1505, 1497, 1498, 1499, 1500,
  30734. 1501, 1502, 1503, 1504, 1495, 1496, 1506, 1514,
  30735. 1516, 1521, 1515, 1535, 1536, 1537, 1538, 1539,
  30736. 1540, 1541, 1517, 1518, 1520, 855, 1517, 1518,
  30737. 1520, 1519, 1517, 1518, 1520, 1522, 1533, 1525,
  30738. 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1523,
  30739. 1524, 1534, 1542, 1544, 1545, 1547, 1564, 1599,
  30740. 1573, 1600, 1592, 1593, 1594, 1595, 1596, 1597,
  30741. 1598, 1544, 1545, 1547, 1564, 1599, 1573, 1600,
  30742. 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1546,
  30743. 1548, 1549, 1551, 1591, 102, 1552, 1550, 1548,
  30744. 1549, 1551, 1552, 102, 1553, 1555, 1563, 1556,
  30745. 1557, 1558, 1559, 1560, 1561, 1562, 1554, 1553,
  30746. 1555, 1563, 1556, 1557, 1558, 1559, 1560, 1561,
  30747. 1562, 1565, 1589, 1581, 1582, 1583, 1584, 1585,
  30748. 1586, 1587, 1588, 1566, 1568, 1567, 1569, 1570,
  30749. 1572, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
  30750. 1571, 1569, 1570, 1572, 1590, 1544, 1545, 1547,
  30751. 1564, 1599, 1573, 1600, 1592, 1593, 1594, 1595,
  30752. 1596, 1597, 1598, 1601, 1603, 1604, 1605, 1606,
  30753. 1607, 1608, 1609, 1610, 1602, 1619, 1620, 98,
  30754. 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629,
  30755. 1619, 1620, 98, 1622, 1623, 1624, 1625, 1626,
  30756. 1627, 1628, 1629, 1621, 95, 97, 1618, 1630,
  30757. 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1632,
  30758. 1655, 1647, 1648, 1649, 1650, 1651, 1652, 1653,
  30759. 1654, 1633, 1635, 1634, 1636, 1637, 1639, 1640,
  30760. 1641, 1642, 1643, 1644, 1645, 1646, 1636, 1637,
  30761. 1639, 1638, 1636, 1637, 1639, 1656, 1658, 1659,
  30762. 1662, 1661, 1658, 1659, 1661, 1660, 1658, 1659,
  30763. 1661, 1663, 1675, 1676, 1667, 1668, 1669, 1670,
  30764. 1671, 1672, 1673, 1674, 1663, 1664, 1666, 1667,
  30765. 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1665,
  30766. 1675, 1676, 1677, 1686, 1702, 1703, 1705, 1694,
  30767. 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1686,
  30768. 1687, 1689, 1694, 1695, 1696, 1697, 1698, 1699,
  30769. 1700, 1701, 1688, 1690, 1691, 1693, 1543, 1690,
  30770. 1691, 1693, 1543, 1692, 1690, 1691, 1693, 1543,
  30771. 1702, 1703, 1705, 1704, 1705, 1706, 1708, 1543,
  30772. 1707, 1705, 1706, 1708, 1543, 86, 87, 89,
  30773. 1685, 1709, 1710, 1732, 1714, 1678, 1679, 1680,
  30774. 1681, 1682, 1683, 1684, 1711, 1713, 1712, 1711,
  30775. 1713, 1715, 1716, 1718, 1745, 1780, 1754, 1781,
  30776. 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1715,
  30777. 1716, 1718, 1745, 1780, 1754, 1781, 1773, 1774,
  30778. 1775, 1776, 1777, 1778, 1779, 1717, 1719, 1720,
  30779. 1722, 1723, 1772, 1727, 1733, 1721, 1719, 1720,
  30780. 1722, 1723, 1733, 1727, 1723, 1724, 1726, 1727,
  30781. 1725, 1723, 1724, 1726, 1727, 1728, 1729, 89,
  30782. 1685, 1731, 1732, 1678, 1679, 1680, 1681, 1682,
  30783. 1683, 1684, 1728, 1729, 1731, 1730, 1728, 1729,
  30784. 1731, 1732, 1734, 1736, 1744, 1737, 1738, 1739,
  30785. 1740, 1741, 1742, 1743, 1735, 1734, 1736, 1744,
  30786. 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1746,
  30787. 1770, 1762, 1763, 1764, 1765, 1766, 1767, 1768,
  30788. 1769, 1747, 1749, 1748, 1750, 1751, 1753, 1755,
  30789. 1756, 1757, 1758, 1759, 1760, 1761, 1752, 1750,
  30790. 1751, 1753, 1771, 1715, 1716, 1718, 1745, 1780,
  30791. 1754, 1781, 1773, 1774, 1775, 1776, 1777, 1778,
  30792. 1779, 1782, 1784, 1785, 1786, 1787, 1788, 1789,
  30793. 1790, 1791, 1783, 57, 58, 1792, 1793, 1794,
  30794. 1795, 1797, 1794, 1795, 1797, 1796, 1794, 1795,
  30795. 1797, 1799, 1800, 2478, 1823, 1856, 1829, 1881,
  30796. 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1799,
  30797. 1800, 2478, 1823, 1856, 1857, 1881, 1849, 1850,
  30798. 1851, 1852, 1853, 1854, 1855, 1801, 1803, 2479,
  30799. 1805, 1806, 2481, 1815, 1808, 1809, 1810, 1811,
  30800. 1812, 1813, 1814, 1805, 1806, 1815, 1807, 1805,
  30801. 1806, 2481, 1815, 1808, 1809, 1810, 1811, 1812,
  30802. 1813, 1814, 1824, 1845, 1846, 1837, 1838, 1839,
  30803. 1840, 1841, 1842, 1843, 1844, 1824, 1825, 2482,
  30804. 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844,
  30805. 1826, 1828, 2483, 2482, 1829, 1830, 1831, 1832,
  30806. 1833, 1834, 1835, 1836, 1845, 1846, 1847, 1799,
  30807. 1800, 2478, 1823, 1856, 1857, 1881, 1849, 1850,
  30808. 1851, 1852, 1853, 1854, 1855, 2485, 1860, 1874,
  30809. 1875, 1876, 1877, 1878, 1879, 1880, 1859, 2486,
  30810. 1861, 1872, 1864, 1865, 1866, 1867, 1868, 1869,
  30811. 1870, 1871, 1862, 1863, 1873, 1882, 1884, 1885,
  30812. 1886, 1887, 1888, 1889, 1890, 1891, 1883, 1900,
  30813. 1901, 2471, 1903, 1904, 1905, 1906, 1907, 1908,
  30814. 1909, 1910, 1900, 1901, 2471, 1903, 1904, 1905,
  30815. 1906, 1907, 1908, 1909, 1910, 1902, 51, 52,
  30816. 2470, 1899, 1911, 1892, 1893, 1894, 1895, 1896,
  30817. 1897, 1898, 1913, 1961, 1962, 1953, 1954, 1955,
  30818. 1956, 1957, 1958, 1959, 1960, 1913, 1914, 2488,
  30819. 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960,
  30820. 1915, 1917, 2489, 1919, 2492, 1921, 1922, 2494,
  30821. 1860, 1945, 1857, 1938, 1939, 1940, 1941, 1942,
  30822. 1943, 1944, 1921, 1922, 2494, 1945, 1938, 1939,
  30823. 1940, 1941, 1942, 1943, 1944, 1923, 1925, 2495,
  30824. 1926, 1927, 2497, 1936, 1929, 1930, 1931, 1932,
  30825. 1933, 1934, 1935, 1928, 1926, 1927, 2497, 1936,
  30826. 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1921,
  30827. 1922, 2494, 1860, 1945, 1938, 1939, 1940, 1941,
  30828. 1942, 1943, 1944, 2488, 1946, 1948, 1961, 1962,
  30829. 1963, 1965, 2499, 1967, 1978, 1979, 1970, 1971,
  30830. 1972, 1973, 1974, 1975, 1976, 1977, 1967, 1968,
  30831. 2501, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
  30832. 1977, 1969, 1978, 1979, 1980, 2467, 1981, 1983,
  30833. 1989, 2002, 2003, 2505, 1994, 1995, 1996, 1997,
  30834. 1998, 1999, 2000, 2001, 1989, 1990, 2502, 1994,
  30835. 1995, 1996, 1997, 1998, 1999, 2000, 2001, 1991,
  30836. 1993, 2503, 2002, 2003, 2505, 2004, 2006, 2505,
  30837. 2008, 2009, 2467, 1988, 2007, 2011, 1981, 1982,
  30838. 1983, 1984, 1985, 1986, 1987, 2008, 2009, 2467,
  30839. 1988, 2007, 2011, 1981, 1982, 1983, 1984, 1985,
  30840. 1986, 1987, 2010, 2507, 2014, 2011, 2028, 2029,
  30841. 2030, 2031, 2032, 2033, 2034, 2013, 2508, 2015,
  30842. 2026, 2018, 2019, 2020, 2021, 2022, 2023, 2024,
  30843. 2025, 2016, 2017, 2027, 1912, 2035, 1947, 1949,
  30844. 1950, 1951, 1952, 2037, 2038, 2040, 2057, 2092,
  30845. 2066, 2093, 2085, 2086, 2087, 2088, 2089, 2090,
  30846. 2091, 2037, 2038, 2040, 2057, 2092, 2066, 2093,
  30847. 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2039,
  30848. 2041, 2042, 2044, 2084, 2464, 2045, 2043, 2041,
  30849. 2042, 2044, 2045, 2464, 2046, 2048, 2056, 2049,
  30850. 2050, 2051, 2052, 2053, 2054, 2055, 2047, 2046,
  30851. 2048, 2056, 2049, 2050, 2051, 2052, 2053, 2054,
  30852. 2055, 2058, 2082, 2074, 2075, 2076, 2077, 2078,
  30853. 2079, 2080, 2081, 2059, 2061, 2060, 2062, 2063,
  30854. 2065, 2067, 2068, 2069, 2070, 2071, 2072, 2073,
  30855. 2064, 2062, 2063, 2065, 2083, 2037, 2038, 2040,
  30856. 2057, 2092, 2066, 2093, 2085, 2086, 2087, 2088,
  30857. 2089, 2090, 2091, 2094, 2096, 2097, 2098, 2099,
  30858. 2100, 2101, 2102, 2103, 2095, 2112, 2113, 40,
  30859. 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122,
  30860. 2112, 2113, 40, 2115, 2116, 2117, 2118, 2119,
  30861. 2120, 2121, 2122, 2114, 37, 39, 2111, 2123,
  30862. 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2125,
  30863. 2148, 2140, 2141, 2142, 2143, 2144, 2145, 2146,
  30864. 2147, 2126, 2128, 2127, 2129, 2130, 2132, 2133,
  30865. 2134, 2135, 2136, 2137, 2138, 2139, 2129, 2130,
  30866. 2132, 2131, 2129, 2130, 2132, 2149, 2151, 2152,
  30867. 2155, 2154, 2151, 2152, 2154, 2153, 2151, 2152,
  30868. 2154, 2156, 2168, 2169, 2160, 2161, 2162, 2163,
  30869. 2164, 2165, 2166, 2167, 2156, 2157, 2159, 2160,
  30870. 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2158,
  30871. 2168, 2169, 2170, 2179, 2195, 2196, 2198, 2187,
  30872. 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2179,
  30873. 2180, 2182, 2187, 2188, 2189, 2190, 2191, 2192,
  30874. 2193, 2194, 2181, 2183, 2184, 2186, 2036, 2183,
  30875. 2184, 2186, 2036, 2185, 2183, 2184, 2186, 2036,
  30876. 2195, 2196, 2198, 2197, 2198, 2199, 2201, 2036,
  30877. 2200, 2198, 2199, 2201, 2036, 28, 29, 31,
  30878. 2178, 2202, 2203, 2225, 2207, 2171, 2172, 2173,
  30879. 2174, 2175, 2176, 2177, 2204, 2206, 2205, 2204,
  30880. 2206, 2208, 2209, 2211, 2238, 2273, 2247, 2274,
  30881. 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2208,
  30882. 2209, 2211, 2238, 2273, 2247, 2274, 2266, 2267,
  30883. 2268, 2269, 2270, 2271, 2272, 2210, 2212, 2213,
  30884. 2215, 2216, 2265, 2220, 2226, 2214, 2212, 2213,
  30885. 2215, 2216, 2226, 2220, 2216, 2217, 2219, 2220,
  30886. 2218, 2216, 2217, 2219, 2220, 2221, 2222, 31,
  30887. 2178, 2224, 2225, 2171, 2172, 2173, 2174, 2175,
  30888. 2176, 2177, 2221, 2222, 2224, 2223, 2221, 2222,
  30889. 2224, 2225, 2227, 2229, 2237, 2230, 2231, 2232,
  30890. 2233, 2234, 2235, 2236, 2228, 2227, 2229, 2237,
  30891. 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2239,
  30892. 2263, 2255, 2256, 2257, 2258, 2259, 2260, 2261,
  30893. 2262, 2240, 2242, 2241, 2243, 2244, 2246, 2248,
  30894. 2249, 2250, 2251, 2252, 2253, 2254, 2245, 2243,
  30895. 2244, 2246, 2264, 2208, 2209, 2211, 2238, 2273,
  30896. 2247, 2274, 2266, 2267, 2268, 2269, 2270, 2271,
  30897. 2272, 2275, 2277, 2278, 2279, 2280, 2281, 2282,
  30898. 2283, 2284, 2276, 2286, 2287, 2511, 2325, 2337,
  30899. 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2286,
  30900. 2287, 2337, 2288, 2290, 2512, 2292, 2293, 2295,
  30901. 2292, 2293, 2295, 2296, 2294, 2292, 2293, 2295,
  30902. 2296, 2514, 2297, 2311, 2312, 2313, 2314, 2315,
  30903. 2316, 2317, 2298, 2309, 2301, 2302, 2303, 2304,
  30904. 2305, 2306, 2307, 2308, 2299, 2300, 2310, 2326,
  30905. 2327, 2512, 2329, 2330, 2331, 2332, 2333, 2334,
  30906. 2335, 2336, 2326, 2327, 2512, 2329, 2330, 2331,
  30907. 2332, 2333, 2334, 2335, 2336, 2328, 2286, 2287,
  30908. 2511, 2325, 2337, 2318, 2319, 2320, 2321, 2322,
  30909. 2323, 2324, 2339, 2374, 2375, 2366, 2367, 2368,
  30910. 2369, 2370, 2371, 2372, 2373, 2339, 2340, 2515,
  30911. 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373,
  30912. 2341, 2343, 2516, 2345, 2519, 2347, 2348, 2521,
  30913. 2297, 2358, 2296, 2351, 2352, 2353, 2354, 2355,
  30914. 2356, 2357, 2347, 2348, 2521, 2358, 2351, 2352,
  30915. 2353, 2354, 2355, 2356, 2357, 2349, 2347, 2348,
  30916. 2521, 2297, 2358, 2351, 2352, 2353, 2354, 2355,
  30917. 2356, 2357, 2515, 2359, 2361, 2374, 2375, 2376,
  30918. 2378, 2523, 2380, 2391, 2392, 2383, 2384, 2385,
  30919. 2386, 2387, 2388, 2389, 2390, 2380, 2381, 2525,
  30920. 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390,
  30921. 2382, 2391, 2392, 2393, 2462, 2394, 2396, 2402,
  30922. 2415, 2416, 2529, 2407, 2408, 2409, 2410, 2411,
  30923. 2412, 2413, 2414, 2402, 2403, 2526, 2407, 2408,
  30924. 2409, 2410, 2411, 2412, 2413, 2414, 2404, 2406,
  30925. 2527, 2415, 2416, 2529, 2417, 2419, 2529, 2421,
  30926. 2422, 2462, 2401, 2420, 2424, 2394, 2395, 2396,
  30927. 2397, 2398, 2399, 2400, 2421, 2422, 2423, 2531,
  30928. 2427, 2424, 2441, 2442, 2443, 2444, 2445, 2446,
  30929. 2447, 2426, 2532, 2428, 2439, 2431, 2432, 2433,
  30930. 2434, 2435, 2436, 2437, 2438, 2429, 2430, 2440,
  30931. 2338, 2448, 2360, 2362, 2363, 2364, 2365, 2450,
  30932. 2451, 2450, 2534, 2453, 2454, 2455, 2456, 2457,
  30933. 2458, 2459, 2460, 2450, 2451, 2450, 2534, 2453,
  30934. 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2452,
  30935. 1, 2, 2462, 2401, 2420, 2448, 27, 22,
  30936. 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2463,
  30937. 4, 2510, 2466, 2522, 2291, 2395, 2397, 2398,
  30938. 2399, 2400, 2463, 4, 2510, 2466, 2285, 2291,
  30939. 2464, 44, 2465, 2466, 2464, 44, 2465, 2466,
  30940. 2466, 46, 2467, 1988, 2007, 2035, 1981, 1982,
  30941. 1983, 1984, 1985, 1986, 1987, 2468, 48, 2469,
  30942. 2498, 1798, 1982, 1984, 1985, 1986, 1987, 2468,
  30943. 48, 2469, 50, 1798, 2468, 48, 2469, 2466,
  30944. 50, 1798, 2471, 54, 2472, 1798, 2471, 54,
  30945. 2472, 1798, 2474, 128, 2475, 128, 2475, 2474,
  30946. 128, 2475, 2466, 987, 2477, 987, 2477, 2479,
  30947. 1802, 2480, 2466, 1848, 1804, 2479, 1802, 2480,
  30948. 2466, 1804, 2483, 1827, 2484, 2483, 1827, 2484,
  30949. 2486, 1858, 2487, 2486, 1858, 2487, 2489, 1916,
  30950. 2490, 2491, 2489, 1916, 2490, 2489, 1916, 2490,
  30951. 2492, 1918, 2493, 2492, 1918, 2493, 1920, 2492,
  30952. 1918, 2493, 1920, 2495, 1924, 2496, 1937, 2495,
  30953. 1924, 2496, 2499, 1964, 1966, 2500, 2499, 1964,
  30954. 2500, 2499, 1964, 2500, 2503, 1992, 2504, 2466,
  30955. 1798, 2503, 1992, 2504, 2466, 1798, 2503, 1992,
  30956. 2504, 2466, 1798, 2505, 2005, 2506, 2466, 1798,
  30957. 2505, 2005, 2506, 2466, 1798, 2508, 2012, 2509,
  30958. 1920, 2508, 2012, 2509, 2508, 2012, 2509, 2463,
  30959. 4, 2510, 2285, 2291, 2512, 2289, 2513, 2291,
  30960. 2512, 2289, 2513, 2291, 1858, 2516, 2342, 2517,
  30961. 2518, 2516, 2342, 2517, 2516, 2342, 2517, 2519,
  30962. 2344, 2520, 2519, 2344, 2520, 2346, 2519, 2344,
  30963. 2520, 2346, 1924, 2350, 2523, 2377, 2379, 2524,
  30964. 2523, 2377, 2524, 2523, 2377, 2524, 2527, 2405,
  30965. 2528, 2291, 2527, 2405, 2528, 2291, 2527, 2405,
  30966. 2528, 2291, 2529, 2418, 2530, 2291, 2529, 2418,
  30967. 2530, 2291, 2532, 2425, 2533, 2346, 2532, 2425,
  30968. 2533, 2532, 2425, 2533,
  30969. ]
  30970. 1 class << self
  30971. 1 attr_accessor :_trans_actions
  30972. 1 private :_trans_actions, :_trans_actions=
  30973. end
  30974. 1 self._trans_actions = [
  30975. 0, 0, 0, 1, 1, 2, 0, 1,
  30976. 3, 1, 1, 1, 1, 1, 1, 1,
  30977. 0, 0, 0, 4, 4, 0, 0, 5,
  30978. 0, 6, 7, 0, 0, 0, 0, 0,
  30979. 0, 0, 0, 8, 8, 9, 8, 8,
  30980. 8, 8, 8, 8, 8, 8, 0, 0,
  30981. 10, 0, 0, 0, 0, 0, 0, 0,
  30982. 0, 0, 11, 11, 12, 12, 13, 12,
  30983. 14, 15, 12, 12, 12, 12, 12, 12,
  30984. 12, 4, 4, 5, 0, 0, 2, 0,
  30985. 12, 12, 16, 17, 18, 18, 1, 1,
  30986. 19, 20, 1, 20, 1, 1, 1, 1,
  30987. 1, 1, 1, 0, 0, 2, 0, 0,
  30988. 0, 21, 21, 0, 0, 22, 0, 21,
  30989. 23, 0, 0, 0, 0, 0, 0, 0,
  30990. 0, 0, 2, 0, 0, 24, 0, 12,
  30991. 12, 16, 12, 12, 25, 0, 0, 0,
  30992. 2, 0, 0, 0, 0, 0, 0, 0,
  30993. 0, 0, 0, 2, 0, 0, 12, 12,
  30994. 16, 12, 0, 0, 0, 0, 4, 4,
  30995. 0, 0, 5, 0, 0, 0, 0, 0,
  30996. 0, 0, 0, 0, 2, 0, 0, 0,
  30997. 26, 26, 26, 26, 27, 0, 26, 0,
  30998. 28, 29, 26, 26, 26, 26, 26, 26,
  30999. 26, 0, 0, 1, 1, 2, 1, 3,
  31000. 1, 1, 1, 1, 1, 1, 1, 0,
  31001. 30, 30, 0, 0, 31, 32, 0, 32,
  31002. 7, 23, 0, 0, 0, 0, 0, 0,
  31003. 0, 4, 4, 0, 0, 5, 33, 0,
  31004. 33, 24, 0, 0, 0, 0, 0, 0,
  31005. 0, 0, 0, 4, 4, 5, 0, 0,
  31006. 8, 8, 9, 8, 8, 8, 8, 8,
  31007. 8, 8, 8, 0, 0, 10, 0, 0,
  31008. 0, 0, 0, 0, 0, 0, 0, 11,
  31009. 11, 12, 12, 13, 12, 15, 12, 12,
  31010. 12, 12, 12, 12, 12, 4, 4, 5,
  31011. 0, 0, 2, 0, 12, 12, 16, 17,
  31012. 18, 18, 1, 1, 19, 20, 1, 20,
  31013. 1, 1, 1, 1, 1, 1, 1, 0,
  31014. 0, 2, 0, 0, 0, 21, 21, 0,
  31015. 0, 22, 0, 21, 23, 0, 0, 0,
  31016. 0, 0, 0, 0, 0, 0, 2, 0,
  31017. 0, 24, 0, 12, 12, 16, 12, 12,
  31018. 25, 0, 0, 0, 2, 0, 0, 0,
  31019. 0, 0, 0, 0, 0, 0, 0, 2,
  31020. 0, 0, 12, 12, 16, 12, 0, 2,
  31021. 34, 34, 0, 12, 16, 35, 35, 26,
  31022. 26, 27, 0, 0, 0, 2, 0, 8,
  31023. 8, 8, 9, 8, 8, 8, 8, 8,
  31024. 8, 8, 8, 0, 0, 10, 0, 0,
  31025. 0, 0, 0, 0, 0, 0, 0, 30,
  31026. 30, 0, 31, 36, 36, 37, 0, 0,
  31027. 0, 0, 0, 0, 0, 4, 4, 5,
  31028. 38, 38, 39, 0, 0, 11, 11, 13,
  31029. 40, 12, 40, 41, 4, 4, 0, 0,
  31030. 5, 0, 0, 0, 0, 0, 0, 0,
  31031. 0, 0, 2, 0, 4, 4, 5, 0,
  31032. 0, 0, 11, 11, 13, 12, 0, 0,
  31033. 30, 30, 0, 0, 31, 32, 0, 7,
  31034. 23, 0, 0, 0, 0, 0, 0, 0,
  31035. 4, 4, 0, 0, 5, 33, 0, 24,
  31036. 0, 0, 0, 0, 0, 0, 0, 0,
  31037. 0, 4, 4, 5, 0, 0, 8, 8,
  31038. 9, 8, 8, 8, 8, 8, 8, 8,
  31039. 8, 0, 0, 10, 0, 0, 0, 0,
  31040. 0, 0, 0, 0, 0, 11, 11, 12,
  31041. 12, 13, 12, 15, 12, 12, 12, 12,
  31042. 12, 12, 12, 4, 4, 5, 0, 0,
  31043. 2, 3, 0, 12, 12, 16, 17, 18,
  31044. 18, 1, 1, 19, 20, 1, 20, 1,
  31045. 1, 1, 1, 1, 1, 1, 0, 0,
  31046. 2, 0, 0, 0, 21, 21, 0, 0,
  31047. 22, 0, 21, 23, 0, 0, 0, 0,
  31048. 0, 0, 0, 0, 0, 2, 0, 0,
  31049. 24, 0, 12, 12, 16, 12, 12, 25,
  31050. 0, 0, 0, 2, 0, 0, 0, 0,
  31051. 0, 0, 0, 0, 0, 0, 2, 0,
  31052. 0, 12, 12, 16, 12, 0, 2, 34,
  31053. 0, 12, 16, 35, 26, 26, 26, 26,
  31054. 27, 26, 28, 29, 26, 26, 26, 26,
  31055. 26, 26, 26, 0, 0, 1, 1, 2,
  31056. 1, 1, 1, 1, 1, 1, 1, 1,
  31057. 0, 8, 8, 8, 9, 8, 8, 8,
  31058. 8, 8, 8, 8, 8, 0, 0, 10,
  31059. 0, 0, 0, 0, 0, 0, 0, 0,
  31060. 0, 30, 30, 0, 31, 36, 37, 0,
  31061. 0, 0, 0, 0, 0, 0, 4, 4,
  31062. 5, 38, 39, 0, 0, 11, 11, 13,
  31063. 40, 12, 41, 4, 4, 0, 0, 5,
  31064. 0, 0, 0, 0, 0, 0, 0, 0,
  31065. 0, 2, 0, 4, 4, 5, 0, 0,
  31066. 0, 11, 11, 13, 12, 42, 42, 43,
  31067. 43, 44, 43, 43, 43, 43, 43, 43,
  31068. 43, 43, 43, 0, 0, 0, 0, 2,
  31069. 0, 0, 0, 0, 0, 0, 0, 0,
  31070. 0, 0, 4, 4, 5, 45, 0, 45,
  31071. 0, 0, 0, 11, 11, 13, 46, 12,
  31072. 46, 4, 4, 0, 5, 0, 0, 0,
  31073. 0, 0, 0, 0, 0, 0, 2, 0,
  31074. 12, 12, 12, 16, 12, 12, 12, 12,
  31075. 12, 12, 12, 8, 8, 8, 8, 8,
  31076. 8, 8, 8, 8, 8, 8, 0, 0,
  31077. 10, 0, 0, 0, 0, 0, 0, 0,
  31078. 0, 0, 4, 4, 0, 5, 0, 0,
  31079. 0, 0, 0, 0, 0, 0, 0, 0,
  31080. 11, 11, 13, 0, 0, 0, 12, 12,
  31081. 12, 12, 16, 12, 12, 12, 12, 12,
  31082. 12, 12, 12, 12, 0, 0, 0, 0,
  31083. 0, 0, 0, 0, 0, 0, 0, 2,
  31084. 0, 12, 12, 16, 0, 0, 0, 0,
  31085. 0, 0, 0, 0, 0, 0, 0, 0,
  31086. 0, 0, 0, 0, 0, 0, 0, 0,
  31087. 0, 0, 0, 8, 8, 9, 8, 8,
  31088. 8, 8, 8, 8, 8, 8, 0, 0,
  31089. 10, 0, 0, 0, 0, 0, 0, 0,
  31090. 0, 0, 12, 12, 12, 12, 16, 12,
  31091. 12, 12, 12, 12, 12, 12, 30, 30,
  31092. 31, 0, 4, 4, 5, 0, 0, 11,
  31093. 11, 13, 47, 47, 25, 8, 8, 8,
  31094. 8, 8, 8, 8, 8, 8, 8, 8,
  31095. 0, 0, 10, 0, 0, 0, 0, 0,
  31096. 0, 0, 0, 0, 0, 0, 0, 30,
  31097. 30, 31, 0, 0, 2, 24, 0, 12,
  31098. 12, 16, 25, 43, 43, 43, 43, 48,
  31099. 43, 43, 43, 43, 43, 43, 43, 43,
  31100. 0, 0, 0, 2, 0, 0, 0, 0,
  31101. 0, 0, 0, 0, 0, 0, 2, 0,
  31102. 0, 0, 12, 12, 16, 12, 0, 0,
  31103. 2, 0, 0, 0, 0, 0, 0, 0,
  31104. 0, 12, 12, 16, 12, 12, 12, 12,
  31105. 12, 12, 12, 12, 12, 12, 12, 16,
  31106. 12, 12, 12, 12, 12, 12, 12, 30,
  31107. 30, 0, 31, 0, 0, 2, 0, 12,
  31108. 12, 16, 8, 8, 8, 8, 8, 8,
  31109. 8, 8, 8, 8, 8, 0, 0, 10,
  31110. 0, 0, 0, 0, 0, 0, 0, 0,
  31111. 0, 11, 11, 13, 0, 0, 0, 0,
  31112. 0, 10, 0, 4, 4, 5, 49, 49,
  31113. 50, 0, 0, 11, 11, 13, 51, 51,
  31114. 52, 12, 12, 53, 53, 16, 53, 53,
  31115. 53, 53, 53, 53, 53, 53, 0, 0,
  31116. 0, 0, 0, 0, 0, 0, 0, 0,
  31117. 21, 21, 22, 23, 0, 0, 2, 0,
  31118. 12, 12, 16, 0, 0, 0, 0, 0,
  31119. 0, 0, 0, 0, 0, 0, 0, 0,
  31120. 0, 43, 43, 43, 43, 48, 43, 43,
  31121. 43, 43, 43, 43, 43, 43, 43, 0,
  31122. 0, 0, 0, 2, 0, 0, 0, 0,
  31123. 0, 0, 0, 0, 0, 0, 0, 0,
  31124. 2, 0, 54, 0, 0, 12, 12, 16,
  31125. 12, 55, 0, 0, 2, 0, 0, 0,
  31126. 0, 0, 0, 0, 0, 12, 12, 16,
  31127. 12, 12, 12, 12, 12, 12, 12, 0,
  31128. 0, 0, 0, 0, 0, 0, 0, 0,
  31129. 0, 0, 0, 0, 0, 0, 2, 0,
  31130. 0, 0, 0, 0, 0, 0, 0, 12,
  31131. 12, 16, 0, 12, 12, 12, 12, 16,
  31132. 12, 12, 12, 12, 12, 12, 12, 12,
  31133. 12, 0, 0, 0, 0, 0, 0, 0,
  31134. 0, 0, 0, 8, 8, 9, 8, 8,
  31135. 8, 8, 8, 8, 8, 8, 0, 0,
  31136. 10, 0, 0, 0, 0, 0, 0, 0,
  31137. 0, 0, 12, 12, 12, 16, 12, 12,
  31138. 12, 12, 12, 12, 12, 0, 0, 0,
  31139. 0, 0, 0, 0, 0, 0, 0, 0,
  31140. 0, 0, 21, 21, 22, 0, 0, 0,
  31141. 0, 0, 0, 0, 0, 0, 2, 0,
  31142. 12, 12, 16, 0, 21, 21, 0, 22,
  31143. 0, 0, 2, 0, 12, 12, 16, 8,
  31144. 8, 8, 8, 8, 8, 8, 8, 8,
  31145. 8, 8, 0, 0, 10, 0, 0, 0,
  31146. 0, 0, 0, 0, 0, 0, 0, 0,
  31147. 0, 8, 8, 8, 9, 8, 8, 8,
  31148. 8, 8, 8, 8, 8, 0, 0, 10,
  31149. 0, 0, 0, 0, 0, 0, 0, 0,
  31150. 0, 21, 21, 22, 37, 0, 0, 2,
  31151. 39, 0, 12, 12, 16, 41, 0, 0,
  31152. 10, 0, 0, 0, 2, 50, 0, 12,
  31153. 12, 16, 52, 12, 12, 53, 53, 16,
  31154. 12, 53, 12, 53, 53, 53, 53, 53,
  31155. 53, 53, 0, 2, 0, 12, 16, 43,
  31156. 43, 43, 43, 48, 43, 43, 43, 43,
  31157. 43, 43, 43, 43, 43, 0, 0, 0,
  31158. 0, 2, 0, 0, 0, 0, 0, 0,
  31159. 0, 0, 0, 0, 0, 0, 2, 54,
  31160. 0, 54, 0, 0, 12, 12, 16, 55,
  31161. 12, 55, 0, 0, 2, 0, 0, 12,
  31162. 12, 16, 12, 56, 56, 56, 56, 57,
  31163. 56, 56, 56, 56, 56, 56, 56, 56,
  31164. 0, 0, 2, 0, 12, 12, 16, 0,
  31165. 0, 0, 2, 0, 0, 0, 0, 0,
  31166. 0, 0, 0, 12, 12, 16, 12, 12,
  31167. 12, 12, 12, 12, 12, 0, 0, 0,
  31168. 0, 0, 0, 0, 0, 0, 0, 0,
  31169. 0, 0, 0, 0, 2, 0, 0, 0,
  31170. 0, 0, 0, 0, 0, 12, 12, 16,
  31171. 0, 12, 12, 12, 12, 16, 12, 12,
  31172. 12, 12, 12, 12, 12, 12, 12, 0,
  31173. 0, 0, 0, 0, 0, 0, 0, 0,
  31174. 0, 42, 42, 43, 43, 44, 43, 43,
  31175. 43, 43, 43, 43, 43, 43, 43, 0,
  31176. 0, 0, 0, 2, 0, 0, 0, 0,
  31177. 0, 0, 0, 0, 0, 0, 4, 4,
  31178. 5, 45, 0, 0, 0, 0, 11, 11,
  31179. 13, 46, 12, 4, 4, 0, 5, 0,
  31180. 0, 0, 0, 0, 0, 0, 0, 0,
  31181. 2, 0, 12, 12, 12, 16, 12, 12,
  31182. 12, 12, 12, 12, 12, 8, 8, 8,
  31183. 8, 8, 8, 8, 8, 8, 8, 8,
  31184. 0, 0, 10, 0, 0, 0, 0, 0,
  31185. 0, 0, 0, 0, 4, 4, 0, 5,
  31186. 0, 0, 0, 0, 0, 0, 0, 0,
  31187. 0, 0, 11, 11, 13, 0, 0, 0,
  31188. 12, 12, 12, 12, 16, 12, 12, 12,
  31189. 12, 12, 12, 12, 12, 12, 0, 0,
  31190. 0, 0, 0, 0, 0, 0, 0, 0,
  31191. 0, 2, 0, 12, 12, 16, 0, 0,
  31192. 0, 0, 0, 0, 0, 0, 0, 0,
  31193. 0, 0, 0, 0, 0, 0, 0, 0,
  31194. 0, 0, 0, 0, 0, 8, 8, 9,
  31195. 8, 8, 8, 8, 8, 8, 8, 8,
  31196. 0, 0, 10, 0, 0, 0, 0, 0,
  31197. 0, 0, 0, 0, 12, 12, 12, 12,
  31198. 16, 12, 12, 12, 12, 12, 12, 12,
  31199. 30, 30, 31, 0, 4, 4, 5, 0,
  31200. 0, 11, 11, 13, 47, 25, 8, 8,
  31201. 8, 8, 8, 8, 8, 8, 8, 8,
  31202. 8, 0, 0, 10, 0, 0, 0, 0,
  31203. 0, 0, 0, 0, 0, 0, 0, 0,
  31204. 30, 30, 31, 0, 0, 2, 24, 0,
  31205. 12, 12, 16, 25, 43, 43, 43, 43,
  31206. 48, 43, 43, 43, 43, 43, 43, 43,
  31207. 43, 0, 0, 0, 2, 0, 0, 0,
  31208. 0, 0, 0, 0, 0, 0, 0, 2,
  31209. 0, 0, 0, 12, 12, 16, 12, 0,
  31210. 0, 2, 0, 0, 0, 0, 0, 0,
  31211. 0, 0, 12, 12, 16, 12, 12, 12,
  31212. 12, 12, 12, 12, 12, 12, 12, 12,
  31213. 16, 12, 12, 12, 12, 12, 12, 12,
  31214. 30, 30, 0, 31, 0, 0, 2, 0,
  31215. 12, 12, 16, 8, 8, 8, 8, 8,
  31216. 8, 8, 8, 8, 8, 8, 0, 0,
  31217. 10, 0, 0, 0, 0, 0, 0, 0,
  31218. 0, 0, 11, 11, 13, 0, 0, 0,
  31219. 0, 0, 10, 0, 4, 4, 5, 49,
  31220. 50, 0, 0, 11, 11, 13, 51, 52,
  31221. 12, 12, 53, 53, 16, 12, 53, 12,
  31222. 53, 53, 53, 53, 53, 53, 53, 26,
  31223. 26, 26, 26, 27, 26, 28, 29, 26,
  31224. 26, 26, 26, 26, 26, 26, 0, 0,
  31225. 1, 1, 2, 1, 3, 1, 1, 1,
  31226. 1, 1, 1, 1, 0, 30, 30, 0,
  31227. 0, 31, 32, 0, 32, 7, 23, 0,
  31228. 0, 0, 0, 0, 0, 0, 4, 4,
  31229. 0, 0, 5, 33, 0, 33, 24, 0,
  31230. 0, 0, 0, 0, 0, 0, 0, 0,
  31231. 4, 4, 5, 0, 0, 8, 8, 9,
  31232. 8, 8, 8, 8, 8, 8, 8, 8,
  31233. 0, 0, 10, 0, 0, 0, 0, 0,
  31234. 0, 0, 0, 0, 11, 11, 12, 12,
  31235. 13, 12, 15, 12, 12, 12, 12, 12,
  31236. 12, 12, 4, 4, 5, 0, 0, 2,
  31237. 0, 12, 12, 16, 17, 18, 18, 1,
  31238. 1, 19, 20, 1, 20, 1, 1, 1,
  31239. 1, 1, 1, 1, 0, 0, 2, 0,
  31240. 0, 0, 21, 21, 0, 0, 22, 0,
  31241. 21, 23, 0, 0, 0, 0, 0, 0,
  31242. 0, 0, 0, 2, 0, 0, 24, 0,
  31243. 12, 12, 16, 12, 12, 25, 0, 0,
  31244. 0, 2, 0, 0, 0, 0, 0, 0,
  31245. 0, 0, 0, 0, 2, 0, 0, 12,
  31246. 12, 16, 12, 0, 2, 34, 34, 0,
  31247. 12, 16, 35, 35, 0, 43, 43, 43,
  31248. 43, 48, 43, 43, 43, 43, 43, 43,
  31249. 43, 43, 43, 0, 0, 0, 0, 2,
  31250. 0, 0, 0, 0, 0, 0, 0, 0,
  31251. 0, 0, 0, 0, 2, 0, 54, 0,
  31252. 0, 12, 12, 16, 12, 55, 0, 0,
  31253. 2, 0, 0, 0, 0, 0, 0, 0,
  31254. 0, 12, 12, 16, 12, 12, 12, 12,
  31255. 12, 12, 12, 0, 0, 0, 0, 0,
  31256. 0, 0, 0, 0, 0, 0, 0, 0,
  31257. 0, 0, 2, 0, 0, 0, 0, 0,
  31258. 0, 0, 0, 12, 12, 16, 0, 12,
  31259. 12, 12, 12, 16, 12, 12, 12, 12,
  31260. 12, 12, 12, 12, 12, 0, 0, 0,
  31261. 0, 0, 0, 0, 0, 0, 0, 8,
  31262. 8, 9, 8, 8, 8, 8, 8, 8,
  31263. 8, 8, 0, 0, 10, 0, 0, 0,
  31264. 0, 0, 0, 0, 0, 0, 12, 12,
  31265. 12, 16, 12, 12, 12, 12, 12, 12,
  31266. 12, 0, 0, 0, 0, 0, 0, 0,
  31267. 0, 0, 0, 0, 0, 0, 21, 21,
  31268. 22, 0, 0, 0, 0, 0, 0, 0,
  31269. 0, 0, 2, 0, 12, 12, 16, 0,
  31270. 21, 21, 0, 22, 0, 0, 2, 0,
  31271. 12, 12, 16, 8, 8, 8, 8, 8,
  31272. 8, 8, 8, 8, 8, 8, 0, 0,
  31273. 10, 0, 0, 0, 0, 0, 0, 0,
  31274. 0, 0, 0, 0, 0, 8, 8, 8,
  31275. 9, 8, 8, 8, 8, 8, 8, 8,
  31276. 8, 0, 0, 10, 0, 0, 0, 0,
  31277. 0, 0, 0, 0, 0, 21, 21, 22,
  31278. 37, 0, 0, 2, 39, 0, 12, 12,
  31279. 16, 41, 0, 0, 10, 0, 0, 0,
  31280. 2, 50, 0, 12, 12, 16, 52, 12,
  31281. 12, 53, 53, 16, 12, 53, 12, 53,
  31282. 53, 53, 53, 53, 53, 53, 0, 2,
  31283. 0, 12, 16, 43, 43, 43, 43, 48,
  31284. 43, 43, 43, 43, 43, 43, 43, 43,
  31285. 43, 0, 0, 0, 0, 2, 0, 0,
  31286. 0, 0, 0, 0, 0, 0, 0, 0,
  31287. 0, 0, 2, 54, 0, 54, 0, 0,
  31288. 12, 12, 16, 55, 12, 55, 0, 0,
  31289. 2, 0, 0, 12, 12, 16, 12, 56,
  31290. 56, 56, 56, 57, 56, 56, 56, 56,
  31291. 56, 56, 56, 56, 0, 0, 2, 0,
  31292. 12, 12, 16, 0, 0, 0, 2, 0,
  31293. 0, 0, 0, 0, 0, 0, 0, 12,
  31294. 12, 16, 12, 12, 12, 12, 12, 12,
  31295. 12, 0, 0, 0, 0, 0, 0, 0,
  31296. 0, 0, 0, 0, 0, 0, 0, 0,
  31297. 2, 0, 0, 0, 0, 0, 0, 0,
  31298. 0, 12, 12, 16, 0, 12, 12, 12,
  31299. 12, 16, 12, 12, 12, 12, 12, 12,
  31300. 12, 12, 12, 0, 0, 0, 0, 0,
  31301. 0, 0, 0, 0, 0, 11, 11, 13,
  31302. 47, 12, 47, 25, 4, 4, 0, 0,
  31303. 5, 0, 0, 0, 0, 0, 0, 0,
  31304. 0, 0, 2, 0, 4, 4, 5, 0,
  31305. 0, 0, 11, 11, 13, 12, 42, 42,
  31306. 43, 43, 44, 43, 43, 43, 43, 43,
  31307. 43, 43, 43, 43, 0, 0, 0, 0,
  31308. 2, 0, 0, 0, 0, 0, 0, 0,
  31309. 0, 0, 0, 4, 4, 5, 45, 0,
  31310. 45, 0, 0, 0, 11, 11, 13, 46,
  31311. 12, 46, 4, 4, 0, 5, 0, 0,
  31312. 0, 0, 0, 0, 0, 0, 0, 2,
  31313. 0, 12, 12, 12, 16, 12, 12, 12,
  31314. 12, 12, 12, 12, 8, 8, 8, 8,
  31315. 8, 8, 8, 8, 8, 8, 8, 0,
  31316. 0, 10, 0, 0, 0, 0, 0, 0,
  31317. 0, 0, 0, 4, 4, 0, 5, 0,
  31318. 0, 0, 0, 0, 0, 0, 0, 0,
  31319. 0, 11, 11, 13, 0, 0, 0, 12,
  31320. 12, 12, 12, 16, 12, 12, 12, 12,
  31321. 12, 12, 12, 12, 12, 0, 0, 0,
  31322. 0, 0, 0, 0, 0, 0, 0, 0,
  31323. 2, 0, 12, 12, 16, 0, 0, 0,
  31324. 0, 0, 0, 0, 0, 0, 0, 0,
  31325. 0, 0, 0, 0, 0, 0, 0, 0,
  31326. 0, 0, 0, 0, 8, 8, 9, 8,
  31327. 8, 8, 8, 8, 8, 8, 8, 0,
  31328. 0, 10, 0, 0, 0, 0, 0, 0,
  31329. 0, 0, 0, 12, 12, 12, 12, 16,
  31330. 12, 12, 12, 12, 12, 12, 12, 8,
  31331. 8, 8, 8, 8, 8, 8, 8, 8,
  31332. 8, 8, 0, 0, 10, 0, 0, 0,
  31333. 0, 0, 0, 0, 0, 0, 30, 30,
  31334. 0, 31, 0, 0, 0, 0, 0, 0,
  31335. 0, 0, 4, 4, 5, 0, 0, 11,
  31336. 11, 13, 30, 30, 31, 0, 0, 2,
  31337. 24, 0, 12, 12, 16, 25, 43, 43,
  31338. 43, 43, 48, 43, 43, 43, 43, 43,
  31339. 43, 43, 43, 0, 0, 0, 2, 0,
  31340. 0, 0, 0, 0, 0, 0, 0, 0,
  31341. 0, 2, 0, 0, 0, 12, 12, 16,
  31342. 12, 0, 0, 2, 0, 0, 0, 0,
  31343. 0, 0, 0, 0, 12, 12, 16, 12,
  31344. 12, 12, 12, 12, 12, 12, 12, 12,
  31345. 12, 12, 16, 12, 12, 12, 12, 12,
  31346. 12, 12, 0, 0, 0, 30, 30, 0,
  31347. 31, 0, 0, 2, 0, 12, 12, 16,
  31348. 8, 8, 8, 8, 8, 8, 8, 8,
  31349. 8, 8, 8, 0, 0, 10, 0, 0,
  31350. 0, 0, 0, 0, 0, 0, 0, 0,
  31351. 0, 0, 8, 8, 8, 9, 8, 8,
  31352. 8, 8, 8, 8, 8, 8, 0, 0,
  31353. 10, 0, 0, 0, 0, 0, 0, 0,
  31354. 0, 0, 30, 30, 31, 36, 36, 37,
  31355. 4, 4, 5, 38, 38, 39, 0, 0,
  31356. 11, 11, 13, 40, 40, 41, 0, 0,
  31357. 10, 0, 4, 4, 5, 49, 49, 50,
  31358. 0, 0, 11, 11, 13, 51, 51, 52,
  31359. 12, 12, 53, 53, 16, 53, 53, 53,
  31360. 53, 53, 53, 53, 53, 0, 0, 0,
  31361. 0, 0, 0, 0, 0, 0, 0, 21,
  31362. 21, 22, 23, 0, 0, 2, 0, 12,
  31363. 12, 16, 0, 0, 0, 0, 0, 0,
  31364. 0, 0, 0, 0, 0, 0, 0, 0,
  31365. 0, 0, 0, 0, 0, 0, 0, 0,
  31366. 0, 0, 21, 21, 22, 23, 0, 0,
  31367. 2, 0, 12, 12, 16, 0, 0, 0,
  31368. 0, 0, 0, 0, 0, 0, 0, 0,
  31369. 0, 0, 0, 43, 43, 43, 43, 48,
  31370. 43, 43, 43, 43, 43, 43, 43, 43,
  31371. 43, 0, 0, 0, 0, 2, 0, 0,
  31372. 0, 0, 0, 0, 0, 0, 0, 0,
  31373. 0, 0, 2, 0, 54, 0, 0, 12,
  31374. 12, 16, 12, 55, 0, 0, 2, 0,
  31375. 0, 0, 0, 0, 0, 0, 0, 12,
  31376. 12, 16, 12, 12, 12, 12, 12, 12,
  31377. 12, 0, 0, 0, 0, 0, 0, 0,
  31378. 0, 0, 0, 0, 0, 0, 0, 0,
  31379. 2, 0, 0, 0, 0, 0, 0, 0,
  31380. 0, 12, 12, 16, 0, 12, 12, 12,
  31381. 12, 16, 12, 12, 12, 12, 12, 12,
  31382. 12, 12, 12, 0, 0, 0, 0, 0,
  31383. 0, 0, 0, 0, 0, 8, 8, 9,
  31384. 8, 8, 8, 8, 8, 8, 8, 8,
  31385. 0, 0, 10, 0, 0, 0, 0, 0,
  31386. 0, 0, 0, 0, 12, 12, 12, 16,
  31387. 12, 12, 12, 12, 12, 12, 12, 0,
  31388. 0, 0, 0, 0, 0, 0, 0, 0,
  31389. 0, 0, 0, 0, 21, 21, 22, 0,
  31390. 0, 0, 0, 0, 0, 0, 0, 0,
  31391. 2, 0, 12, 12, 16, 0, 21, 21,
  31392. 0, 22, 0, 0, 2, 0, 12, 12,
  31393. 16, 8, 8, 8, 8, 8, 8, 8,
  31394. 8, 8, 8, 8, 0, 0, 10, 0,
  31395. 0, 0, 0, 0, 0, 0, 0, 0,
  31396. 0, 0, 0, 8, 8, 8, 9, 8,
  31397. 8, 8, 8, 8, 8, 8, 8, 0,
  31398. 0, 10, 0, 0, 0, 0, 0, 0,
  31399. 0, 0, 0, 21, 21, 22, 37, 0,
  31400. 0, 2, 39, 0, 12, 12, 16, 41,
  31401. 0, 0, 10, 0, 0, 0, 2, 50,
  31402. 0, 12, 12, 16, 52, 12, 12, 53,
  31403. 53, 16, 12, 53, 12, 53, 53, 53,
  31404. 53, 53, 53, 53, 0, 2, 0, 12,
  31405. 16, 43, 43, 43, 43, 48, 43, 43,
  31406. 43, 43, 43, 43, 43, 43, 43, 0,
  31407. 0, 0, 0, 2, 0, 0, 0, 0,
  31408. 0, 0, 0, 0, 0, 0, 0, 0,
  31409. 2, 54, 0, 54, 0, 0, 12, 12,
  31410. 16, 55, 12, 55, 0, 0, 2, 0,
  31411. 0, 12, 12, 16, 12, 56, 56, 56,
  31412. 56, 57, 56, 56, 56, 56, 56, 56,
  31413. 56, 56, 0, 0, 2, 0, 12, 12,
  31414. 16, 0, 0, 0, 2, 0, 0, 0,
  31415. 0, 0, 0, 0, 0, 12, 12, 16,
  31416. 12, 12, 12, 12, 12, 12, 12, 0,
  31417. 0, 0, 0, 0, 0, 0, 0, 0,
  31418. 0, 0, 0, 0, 0, 0, 2, 0,
  31419. 0, 0, 0, 0, 0, 0, 0, 12,
  31420. 12, 16, 0, 12, 12, 12, 12, 16,
  31421. 12, 12, 12, 12, 12, 12, 12, 12,
  31422. 12, 0, 0, 0, 0, 0, 0, 0,
  31423. 0, 0, 0, 12, 12, 16, 12, 26,
  31424. 26, 58, 0, 0, 2, 0, 12, 12,
  31425. 16, 42, 42, 43, 43, 44, 43, 43,
  31426. 43, 43, 43, 43, 43, 43, 43, 0,
  31427. 0, 0, 0, 2, 0, 0, 0, 0,
  31428. 0, 0, 0, 0, 0, 0, 0, 0,
  31429. 4, 4, 0, 5, 0, 0, 0, 0,
  31430. 0, 0, 0, 0, 0, 2, 0, 12,
  31431. 12, 12, 16, 12, 12, 12, 12, 12,
  31432. 12, 12, 8, 8, 8, 8, 8, 8,
  31433. 8, 8, 8, 8, 8, 0, 0, 10,
  31434. 0, 0, 0, 0, 0, 0, 0, 0,
  31435. 0, 0, 0, 0, 0, 0, 0, 0,
  31436. 0, 0, 0, 0, 0, 0, 0, 12,
  31437. 12, 12, 12, 16, 12, 12, 12, 12,
  31438. 12, 12, 12, 12, 12, 0, 0, 0,
  31439. 0, 0, 0, 0, 0, 0, 0, 0,
  31440. 0, 0, 0, 0, 0, 0, 0, 0,
  31441. 0, 0, 0, 0, 0, 0, 0, 0,
  31442. 0, 0, 0, 0, 0, 0, 0, 8,
  31443. 8, 9, 8, 8, 8, 8, 8, 8,
  31444. 8, 8, 0, 0, 10, 0, 0, 0,
  31445. 0, 0, 0, 0, 0, 0, 12, 12,
  31446. 12, 12, 16, 12, 12, 12, 12, 12,
  31447. 12, 12, 8, 8, 8, 8, 8, 8,
  31448. 8, 8, 8, 8, 8, 0, 0, 10,
  31449. 0, 0, 0, 0, 0, 0, 0, 0,
  31450. 0, 0, 0, 0, 0, 43, 43, 43,
  31451. 43, 48, 43, 43, 43, 43, 43, 43,
  31452. 43, 43, 0, 0, 0, 2, 0, 0,
  31453. 0, 0, 0, 0, 0, 0, 0, 0,
  31454. 0, 0, 0, 2, 0, 0, 0, 0,
  31455. 0, 0, 0, 0, 12, 12, 12, 16,
  31456. 12, 12, 12, 12, 12, 12, 12, 12,
  31457. 12, 12, 12, 16, 12, 12, 12, 12,
  31458. 12, 12, 12, 0, 0, 0, 0, 0,
  31459. 0, 0, 0, 8, 8, 8, 8, 8,
  31460. 8, 8, 8, 8, 8, 8, 0, 0,
  31461. 10, 0, 0, 0, 0, 0, 0, 0,
  31462. 0, 0, 0, 0, 0, 0, 0, 0,
  31463. 8, 8, 8, 9, 8, 8, 8, 8,
  31464. 8, 8, 8, 8, 0, 0, 10, 0,
  31465. 0, 0, 0, 0, 0, 0, 0, 0,
  31466. 0, 0, 0, 0, 10, 0, 0, 0,
  31467. 12, 12, 53, 53, 16, 53, 53, 53,
  31468. 53, 53, 53, 53, 53, 0, 0, 1,
  31469. 1, 2, 1, 1, 1, 1, 1, 1,
  31470. 1, 1, 0, 0, 0, 0, 0, 0,
  31471. 0, 0, 0, 0, 0, 0, 0, 0,
  31472. 0, 0, 0, 0, 0, 0, 0, 0,
  31473. 0, 0, 0, 0, 0, 0, 0, 0,
  31474. 0, 0, 0, 43, 43, 43, 43, 48,
  31475. 43, 43, 43, 43, 43, 43, 43, 43,
  31476. 43, 0, 0, 0, 0, 2, 0, 0,
  31477. 0, 0, 0, 0, 0, 0, 0, 0,
  31478. 0, 0, 2, 0, 54, 0, 0, 12,
  31479. 12, 16, 12, 55, 0, 0, 2, 0,
  31480. 0, 0, 0, 0, 0, 0, 0, 12,
  31481. 12, 16, 12, 12, 12, 12, 12, 12,
  31482. 12, 0, 0, 0, 0, 0, 0, 0,
  31483. 0, 0, 0, 0, 0, 0, 0, 0,
  31484. 2, 0, 0, 0, 0, 0, 0, 0,
  31485. 0, 12, 12, 16, 0, 12, 12, 12,
  31486. 12, 16, 12, 12, 12, 12, 12, 12,
  31487. 12, 12, 12, 0, 0, 0, 0, 0,
  31488. 0, 0, 0, 0, 0, 8, 8, 9,
  31489. 8, 8, 8, 8, 8, 8, 8, 8,
  31490. 0, 0, 10, 0, 0, 0, 0, 0,
  31491. 0, 0, 0, 0, 12, 12, 12, 16,
  31492. 12, 12, 12, 12, 12, 12, 12, 0,
  31493. 0, 0, 0, 0, 0, 0, 0, 0,
  31494. 0, 0, 0, 0, 21, 21, 22, 0,
  31495. 0, 0, 0, 0, 0, 0, 0, 0,
  31496. 2, 0, 12, 12, 16, 0, 21, 21,
  31497. 0, 22, 0, 0, 2, 0, 12, 12,
  31498. 16, 8, 8, 8, 8, 8, 8, 8,
  31499. 8, 8, 8, 8, 0, 0, 10, 0,
  31500. 0, 0, 0, 0, 0, 0, 0, 0,
  31501. 0, 0, 0, 8, 8, 8, 9, 8,
  31502. 8, 8, 8, 8, 8, 8, 8, 0,
  31503. 0, 10, 0, 0, 0, 0, 0, 0,
  31504. 0, 0, 0, 21, 21, 22, 37, 0,
  31505. 0, 2, 39, 0, 12, 12, 16, 41,
  31506. 0, 0, 10, 0, 0, 0, 2, 50,
  31507. 0, 12, 12, 16, 52, 12, 12, 53,
  31508. 53, 16, 12, 53, 12, 53, 53, 53,
  31509. 53, 53, 53, 53, 0, 2, 0, 12,
  31510. 16, 43, 43, 43, 43, 48, 43, 43,
  31511. 43, 43, 43, 43, 43, 43, 43, 0,
  31512. 0, 0, 0, 2, 0, 0, 0, 0,
  31513. 0, 0, 0, 0, 0, 0, 0, 0,
  31514. 2, 54, 0, 54, 0, 0, 12, 12,
  31515. 16, 55, 12, 55, 0, 0, 2, 0,
  31516. 0, 12, 12, 16, 12, 56, 56, 56,
  31517. 56, 57, 56, 56, 56, 56, 56, 56,
  31518. 56, 56, 0, 0, 2, 0, 12, 12,
  31519. 16, 0, 0, 0, 2, 0, 0, 0,
  31520. 0, 0, 0, 0, 0, 12, 12, 16,
  31521. 12, 12, 12, 12, 12, 12, 12, 0,
  31522. 0, 0, 0, 0, 0, 0, 0, 0,
  31523. 0, 0, 0, 0, 0, 0, 2, 0,
  31524. 0, 0, 0, 0, 0, 0, 0, 12,
  31525. 12, 16, 0, 12, 12, 12, 12, 16,
  31526. 12, 12, 12, 12, 12, 12, 12, 12,
  31527. 12, 0, 0, 0, 0, 0, 0, 0,
  31528. 0, 0, 0, 4, 4, 0, 0, 5,
  31529. 0, 0, 0, 0, 0, 0, 0, 0,
  31530. 0, 2, 0, 0, 0, 42, 42, 44,
  31531. 0, 0, 2, 0, 0, 12, 12, 16,
  31532. 12, 0, 0, 0, 0, 0, 0, 0,
  31533. 0, 0, 0, 0, 0, 0, 0, 0,
  31534. 0, 0, 0, 0, 0, 0, 0, 8,
  31535. 8, 9, 8, 8, 8, 8, 8, 8,
  31536. 8, 8, 0, 0, 10, 0, 0, 0,
  31537. 0, 0, 0, 0, 0, 0, 12, 12,
  31538. 12, 12, 16, 12, 12, 12, 12, 12,
  31539. 12, 12, 8, 8, 8, 8, 8, 8,
  31540. 8, 8, 8, 8, 8, 0, 0, 10,
  31541. 0, 0, 0, 0, 0, 0, 0, 0,
  31542. 0, 0, 0, 0, 0, 43, 43, 43,
  31543. 43, 48, 43, 43, 43, 43, 43, 43,
  31544. 43, 43, 0, 0, 0, 2, 0, 0,
  31545. 0, 0, 0, 0, 0, 0, 12, 12,
  31546. 12, 12, 16, 12, 12, 12, 12, 12,
  31547. 12, 12, 0, 0, 0, 0, 0, 0,
  31548. 0, 0, 8, 8, 8, 8, 8, 8,
  31549. 8, 8, 8, 8, 8, 0, 0, 10,
  31550. 0, 0, 0, 0, 0, 0, 0, 0,
  31551. 0, 0, 0, 0, 0, 0, 0, 8,
  31552. 8, 8, 9, 8, 8, 8, 8, 8,
  31553. 8, 8, 8, 0, 0, 10, 0, 0,
  31554. 0, 0, 0, 0, 0, 0, 0, 0,
  31555. 0, 0, 0, 10, 0, 0, 0, 12,
  31556. 12, 53, 53, 16, 53, 53, 53, 53,
  31557. 53, 53, 53, 53, 0, 0, 0, 0,
  31558. 0, 0, 0, 0, 0, 0, 0, 0,
  31559. 0, 0, 0, 0, 0, 0, 0, 0,
  31560. 0, 0, 0, 0, 0, 0, 0, 0,
  31561. 0, 0, 0, 0, 0, 0, 0, 59,
  31562. 59, 60, 61, 59, 59, 59, 59, 59,
  31563. 59, 59, 59, 0, 0, 2, 62, 0,
  31564. 0, 0, 0, 0, 0, 0, 0, 0,
  31565. 63, 63, 63, 63, 64, 63, 28, 65,
  31566. 63, 63, 63, 63, 63, 63, 63, 30,
  31567. 30, 31, 32, 0, 23, 0, 0, 0,
  31568. 0, 0, 4, 4, 5, 33, 0, 24,
  31569. 34, 34, 2, 34, 35, 35, 16, 35,
  31570. 63, 63, 63, 63, 64, 63, 63, 63,
  31571. 63, 63, 63, 63, 63, 30, 30, 31,
  31572. 0, 23, 0, 0, 0, 0, 0, 4,
  31573. 4, 5, 0, 24, 11, 11, 13, 47,
  31574. 12, 25, 4, 4, 5, 0, 11, 11,
  31575. 13, 12, 26, 26, 27, 0, 2, 12,
  31576. 12, 16, 12, 0, 2, 12, 16, 4,
  31577. 4, 5, 45, 0, 0, 11, 11, 13,
  31578. 46, 12, 4, 4, 5, 11, 11, 13,
  31579. 45, 45, 2, 46, 46, 16, 30, 30,
  31580. 31, 0, 4, 4, 5, 11, 11, 13,
  31581. 30, 30, 31, 33, 33, 2, 24, 47,
  31582. 47, 16, 25, 45, 45, 2, 0, 46,
  31583. 46, 16, 30, 30, 0, 31, 33, 33,
  31584. 2, 47, 47, 16, 30, 30, 31, 36,
  31585. 37, 4, 4, 5, 38, 39, 11, 11,
  31586. 13, 40, 41, 4, 4, 5, 49, 50,
  31587. 11, 11, 13, 51, 52, 32, 32, 22,
  31588. 23, 33, 33, 2, 47, 47, 16, 11,
  31589. 11, 13, 12, 25, 4, 4, 5, 0,
  31590. 11, 11, 13, 12, 0, 30, 30, 31,
  31591. 0, 4, 4, 5, 11, 11, 13, 30,
  31592. 30, 31, 33, 33, 2, 24, 47, 47,
  31593. 16, 25, 0, 0, 30, 30, 0, 31,
  31594. 33, 33, 2, 47, 47, 16, 30, 30,
  31595. 31, 37, 4, 4, 5, 39, 11, 11,
  31596. 13, 41, 4, 4, 5, 50, 11, 11,
  31597. 13, 52, 32, 32, 22, 23, 33, 33,
  31598. 2, 47, 47, 16,
  31599. ]
  31600. 1 class << self
  31601. 1 attr_accessor :_eof_actions
  31602. 1 private :_eof_actions, :_eof_actions=
  31603. end
  31604. 1 self._eof_actions = [
  31605. 0, 0, 0, 0, 0, 0, 0, 0,
  31606. 0, 0, 0, 0, 0, 0, 0, 0,
  31607. 0, 0, 0, 0, 0, 0, 0, 0,
  31608. 0, 0, 0, 0, 0, 0, 0, 0,
  31609. 0, 0, 0, 0, 0, 0, 0, 0,
  31610. 0, 0, 0, 0, 0, 0, 0, 0,
  31611. 0, 0, 0, 0, 0, 0, 0, 0,
  31612. 0, 0, 0, 0, 0, 0, 0, 0,
  31613. 0, 0, 0, 0, 0, 0, 0, 0,
  31614. 0, 0, 0, 0, 0, 0, 0, 0,
  31615. 0, 0, 0, 0, 0, 0, 0, 0,
  31616. 0, 0, 0, 0, 0, 0, 0, 0,
  31617. 0, 0, 0, 0, 0, 0, 0, 0,
  31618. 0, 0, 0, 0, 0, 0, 0, 0,
  31619. 0, 0, 0, 0, 0, 0, 0, 0,
  31620. 0, 0, 0, 0, 0, 0, 0, 0,
  31621. 0, 0, 0, 0, 0, 0, 0, 0,
  31622. 0, 0, 0, 0, 0, 0, 0, 0,
  31623. 0, 0, 0, 0, 0, 0, 0, 0,
  31624. 0, 0, 0, 0, 0, 0, 0, 0,
  31625. 0, 0, 0, 0, 0, 0, 0, 0,
  31626. 0, 0, 0, 0, 0, 0, 0, 0,
  31627. 0, 0, 0, 0, 0, 0, 0, 0,
  31628. 0, 0, 0, 0, 0, 0, 0, 0,
  31629. 0, 0, 0, 0, 0, 0, 0, 0,
  31630. 0, 0, 0, 0, 0, 0, 0, 0,
  31631. 0, 0, 0, 0, 0, 0, 0, 0,
  31632. 0, 0, 0, 0, 0, 0, 0, 0,
  31633. 0, 0, 0, 0, 0, 0, 0, 0,
  31634. 0, 0, 0, 0, 0, 0, 0, 0,
  31635. 0, 0, 0, 0, 0, 0, 0, 0,
  31636. 0, 0, 0, 0, 0, 0, 0, 0,
  31637. 0, 0, 0, 0, 0, 0, 0, 0,
  31638. 0, 0, 0, 0, 0, 0, 0, 0,
  31639. 0, 0, 0, 0, 0, 0, 0, 0,
  31640. 0, 0, 0, 0, 0, 0, 0, 0,
  31641. 0, 0, 0, 0, 0, 0, 0, 0,
  31642. 0, 0, 0, 0, 0, 0, 0, 0,
  31643. 0, 0, 0, 0, 0, 0, 0, 0,
  31644. 0, 0, 0, 0, 0, 0, 0, 0,
  31645. 0, 0, 0, 0, 0, 0, 0, 0,
  31646. 0, 0, 0, 0, 0, 0, 0, 0,
  31647. 0, 0, 0, 0, 0, 0, 0, 0,
  31648. 0, 0, 0, 0, 0, 0, 0, 0,
  31649. 0, 0, 0, 0, 0, 0, 0, 0,
  31650. 0, 0, 0, 0, 0, 0, 0, 0,
  31651. 0, 0, 0, 0, 0, 0, 0, 0,
  31652. 0, 0, 0, 0, 0, 0, 0, 0,
  31653. 0, 0, 0, 0, 0, 0, 0, 0,
  31654. 0, 0, 0, 0, 0, 0, 0, 0,
  31655. 0, 0, 0, 0, 0, 0, 0, 0,
  31656. 0, 0, 0, 0, 0, 0, 0, 0,
  31657. 0, 0, 0, 0, 0, 0, 0, 0,
  31658. 0, 0, 0, 0, 0, 0, 0, 0,
  31659. 0, 0, 0, 0, 0, 0, 0, 0,
  31660. 0, 0, 0, 0, 0, 0, 0, 0,
  31661. 0, 0, 0, 0, 0, 0, 0, 0,
  31662. 0, 0, 0, 0, 0, 0, 0, 0,
  31663. 0, 0, 0, 0, 0, 0, 0, 0,
  31664. 0, 0, 0, 0, 0, 0, 0, 0,
  31665. 0, 0, 0, 0, 0, 0, 0, 0,
  31666. 0, 0, 0, 0, 0, 0, 0, 0,
  31667. 0, 0, 0, 0, 0, 0, 0, 0,
  31668. 0, 0, 0, 0, 0, 0, 0, 0,
  31669. 0, 0, 0, 0, 0, 0, 0, 0,
  31670. 0, 0, 0, 0, 0, 0, 0, 0,
  31671. 0, 0, 0, 0, 0, 0, 0, 0,
  31672. 0, 0, 0, 0, 0, 0, 0, 0,
  31673. 0, 0, 0, 0, 0, 0, 0, 0,
  31674. 0, 0, 0, 0, 0, 0, 0, 0,
  31675. 0, 0, 0, 0, 0, 0, 0, 0,
  31676. 0, 0, 0, 0, 0, 0, 0, 0,
  31677. 0, 0, 0, 0, 0, 0, 0, 0,
  31678. 0, 0, 0, 0, 0, 0, 0, 0,
  31679. 0, 0, 0, 0, 0, 0, 0, 0,
  31680. 0, 0, 0, 0, 0, 0, 0, 0,
  31681. 0, 0, 0, 0, 0, 0, 0, 0,
  31682. 0, 0, 0, 0, 0, 0, 0, 0,
  31683. 0, 0, 0, 0, 0, 0, 0, 0,
  31684. 0, 0, 0, 0, 0, 0, 0, 0,
  31685. 0, 0, 0, 0, 0, 0, 0, 0,
  31686. 0, 0, 0, 0, 0, 0, 0, 0,
  31687. 0, 0, 0, 0, 0, 0, 0, 0,
  31688. 0, 0, 0, 0, 0, 0, 0, 0,
  31689. 0, 0, 0, 0, 0, 0, 0, 0,
  31690. 0, 0, 0, 0, 0, 0, 0, 0,
  31691. 0, 0, 0, 0, 0, 0, 0, 0,
  31692. 0, 0, 0, 0, 0, 0, 0, 0,
  31693. 0, 0, 0, 0, 0, 0, 0, 0,
  31694. 0, 0, 0, 0, 0, 0, 0, 0,
  31695. 0, 0, 0, 0, 0, 0, 0, 0,
  31696. 0, 0, 0, 0, 0, 0, 0, 0,
  31697. 0, 0, 0, 0, 0, 0, 0, 0,
  31698. 0, 0, 0, 0, 0, 0, 0, 0,
  31699. 0, 0, 0, 0, 0, 0, 0, 0,
  31700. 0, 0, 0, 0, 0, 0, 0, 0,
  31701. 0, 0, 0, 0, 0, 0, 0, 0,
  31702. 0, 0, 0, 0, 0, 0, 0, 0,
  31703. 0, 0, 0, 0, 0, 0, 0, 0,
  31704. 0, 0, 0, 0, 0, 0, 0, 0,
  31705. 0, 0, 0, 0, 0, 0, 0, 0,
  31706. 0, 0, 0, 0, 0, 0, 0, 0,
  31707. 0, 0, 0, 0, 0, 0, 0, 0,
  31708. 0, 0, 0, 0, 0, 0, 0, 0,
  31709. 0, 0, 0, 0, 0, 0, 0, 0,
  31710. 0, 0, 0, 0, 0, 0, 0, 0,
  31711. 0, 0, 0, 0, 0, 0, 0, 0,
  31712. 0, 0, 0, 0, 0, 0, 0, 0,
  31713. 0, 0, 0, 0, 0, 0, 0, 0,
  31714. 0, 0, 0, 0, 0, 0, 0, 0,
  31715. 0, 0, 0, 0, 0, 0, 0, 0,
  31716. 0, 0, 0, 0, 0, 0, 0, 0,
  31717. 0, 0, 0, 0, 0, 0, 0, 0,
  31718. 0, 0, 0, 0, 0, 0, 0, 0,
  31719. 0, 0, 0, 0, 0, 0, 0, 0,
  31720. 0, 0, 0, 0, 0, 0, 0, 0,
  31721. 0, 0, 0, 0, 0, 0, 0, 0,
  31722. 0, 0, 0, 0, 0, 0, 0, 0,
  31723. 0, 0, 0, 0, 0, 0, 0, 0,
  31724. 0, 0, 0, 0, 0, 0, 0, 0,
  31725. 0, 0, 0, 0, 0, 0, 0, 0,
  31726. 0, 0, 0, 0, 0, 0, 0, 0,
  31727. 0, 0, 0, 0, 0, 0, 0, 0,
  31728. 0, 0, 0, 0, 0, 0, 0, 0,
  31729. 0, 0, 0, 0, 0, 0, 0, 0,
  31730. 0, 0, 0, 0, 0, 0, 0, 0,
  31731. 0, 0, 0, 0, 0, 0, 0, 0,
  31732. 0, 0, 0, 0, 0, 0, 0, 0,
  31733. 0, 0, 0, 0, 0, 0, 0, 0,
  31734. 0, 0, 0, 0, 0, 0, 0, 0,
  31735. 0, 0, 0, 0, 0, 0, 0, 0,
  31736. 0, 0, 0, 0, 0, 0, 0, 0,
  31737. 0, 0, 0, 0, 0, 0, 0, 0,
  31738. 0, 0, 0, 0, 0, 0, 0, 0,
  31739. 0, 0, 0, 0, 0, 0, 0, 0,
  31740. 0, 0, 0, 0, 0, 0, 0, 0,
  31741. 0, 0, 0, 0, 0, 0, 0, 0,
  31742. 0, 0, 0, 0, 0, 0, 0, 0,
  31743. 0, 0, 0, 0, 0, 0, 0, 0,
  31744. 0, 0, 0, 0, 0, 0, 0, 0,
  31745. 0, 0, 0, 0, 0, 0, 0, 0,
  31746. 0, 0, 0, 0, 0, 0, 0, 0,
  31747. 0, 0, 0, 0, 0, 0, 0, 0,
  31748. 0, 0, 0, 0, 0, 0, 0, 0,
  31749. 0, 0, 0, 0, 0, 0, 0, 0,
  31750. 0, 0, 0, 0, 0, 0, 0, 0,
  31751. 0, 0, 0, 0, 0, 0, 0, 0,
  31752. 0, 0, 0, 0, 0, 0, 0, 0,
  31753. 0, 0, 0, 0, 0, 0, 0, 0,
  31754. 0, 0, 0, 0, 0, 0, 0, 0,
  31755. 0, 0, 0, 0, 0, 0, 0, 0,
  31756. 0, 0, 0, 0, 0, 0, 0, 0,
  31757. 0, 0, 0, 0, 0, 0, 0, 0,
  31758. 0, 0, 0, 0, 0, 0, 0, 0,
  31759. 0, 0, 0, 0, 0, 0, 0, 0,
  31760. 0, 0, 0, 0, 0, 0, 0, 0,
  31761. 0, 0, 0, 0, 0, 0, 0, 0,
  31762. 0, 0, 0, 0, 0, 0, 0, 0,
  31763. 0, 0, 0, 0, 0, 0, 0, 0,
  31764. 0, 0, 0, 0, 0, 0, 0, 0,
  31765. 0, 0, 0, 0, 0, 0, 0, 0,
  31766. 0, 0, 0, 0, 0, 0, 0, 0,
  31767. 0, 0, 0, 0, 0, 0, 0, 0,
  31768. 0, 0, 0, 0, 0, 0, 0, 0,
  31769. 0, 0, 0, 0, 0, 0, 0, 0,
  31770. 0, 0, 0, 0, 0, 0, 0, 0,
  31771. 0, 0, 0, 0, 0, 0, 0, 0,
  31772. 0, 0, 0, 0, 0, 0, 0, 0,
  31773. 0, 0, 0, 0, 0, 0, 0, 0,
  31774. 0, 0, 0, 0, 0, 0, 0, 0,
  31775. 0, 0, 0, 0, 0, 0, 0, 0,
  31776. 0, 0, 0, 0, 0, 0, 0, 0,
  31777. 0, 0, 0, 0, 0, 0, 0, 0,
  31778. 0, 0, 0, 0, 0, 0, 0, 0,
  31779. 0, 0, 0, 0, 0, 0, 0, 0,
  31780. 0, 0, 0, 0, 0, 0, 0, 0,
  31781. 0, 0, 0, 0, 0, 0, 0, 0,
  31782. 0, 0, 0, 0, 0, 0, 0, 0,
  31783. 0, 0, 0, 0, 0, 0, 0, 0,
  31784. 0, 0, 0, 0, 0, 0, 0, 0,
  31785. 0, 0, 0, 0, 0, 0, 0, 0,
  31786. 0, 0, 0, 0, 0, 0, 0, 0,
  31787. 0, 0, 0, 0, 0, 0, 0, 0,
  31788. 0, 0, 0, 0, 0, 0, 0, 0,
  31789. 0, 0, 0, 0, 0, 0, 0, 0,
  31790. 0, 0, 0, 0, 0, 0, 0, 0,
  31791. 0, 0, 0, 0, 0, 0, 0, 0,
  31792. 0, 0, 0, 0, 0, 0, 0, 0,
  31793. 0, 0, 0, 0, 0, 0, 0, 0,
  31794. 0, 0, 0, 0, 0, 0, 0, 0,
  31795. 0, 0, 0, 0, 0, 0, 0, 0,
  31796. 0, 0, 0, 0, 0, 0, 0, 0,
  31797. 0, 0, 0, 0, 0, 0, 0, 0,
  31798. 0, 0, 0, 0, 0, 0, 0, 0,
  31799. 0, 0, 0, 0, 0, 0, 0, 0,
  31800. 0, 0, 0, 0, 0, 0, 0, 0,
  31801. 0, 0, 0, 0, 0, 0, 0, 0,
  31802. 0, 0, 0, 0, 0, 0, 0, 0,
  31803. 0, 0, 0, 0, 0, 0, 0, 0,
  31804. 0, 0, 0, 0, 0, 0, 0, 0,
  31805. 0, 0, 0, 0, 0, 0, 0, 0,
  31806. 0, 0, 0, 0, 0, 0, 0, 0,
  31807. 0, 0, 0, 0, 0, 0, 0, 0,
  31808. 0, 0, 0, 0, 0, 0, 0, 0,
  31809. 0, 0, 0, 0, 0, 0, 0, 0,
  31810. 0, 0, 0, 0, 0, 0, 0, 0,
  31811. 0, 0, 0, 0, 0, 0, 0, 0,
  31812. 0, 0, 0, 0, 0, 0, 0, 0,
  31813. 0, 0, 0, 0, 0, 0, 0, 0,
  31814. 0, 0, 0, 0, 0, 0, 0, 0,
  31815. 0, 0, 0, 0, 0, 0, 0, 0,
  31816. 0, 0, 0, 0, 0, 0, 0, 0,
  31817. 0, 0, 0, 0, 0, 0, 0, 0,
  31818. 0, 0, 0, 0, 0, 0, 0, 0,
  31819. 0, 0, 0, 0, 0, 0, 0, 0,
  31820. 0, 0, 0, 0, 0, 0, 0, 0,
  31821. 0, 0, 0, 0, 0, 0, 0, 0,
  31822. 0, 0, 0, 0, 0, 0, 0, 0,
  31823. 0, 0, 0, 0, 0, 0, 0, 0,
  31824. 0, 0, 0, 0, 0, 0, 0, 0,
  31825. 0, 0, 0, 0, 0, 0, 0, 0,
  31826. 0, 0, 0, 0, 0, 0, 0, 0,
  31827. 0, 0, 0, 0, 0, 0, 0, 0,
  31828. 0, 0, 0, 0, 0, 0, 0, 0,
  31829. 0, 0, 0, 0, 0, 0, 0, 0,
  31830. 0, 0, 0, 0, 0, 0, 0, 0,
  31831. 0, 0, 0, 0, 0, 0, 0, 0,
  31832. 0, 0, 0, 0, 0, 0, 0, 0,
  31833. 0, 0, 0, 0, 0, 0, 0, 0,
  31834. 0, 0, 0, 0, 0, 0, 0, 0,
  31835. 0, 0, 0, 0, 0, 0, 0, 0,
  31836. 0, 0, 0, 0, 0, 0, 0, 0,
  31837. 0, 0, 0, 0, 0, 0, 0, 0,
  31838. 0, 0, 0, 0, 0, 0, 0, 0,
  31839. 0, 0, 0, 0, 0, 0, 0, 0,
  31840. 0, 0, 0, 0, 0, 0, 0, 0,
  31841. 0, 0, 0, 0, 0, 0, 0, 0,
  31842. 0, 0, 0, 0, 0, 0, 0, 0,
  31843. 0, 0, 0, 0, 0, 0, 0, 0,
  31844. 0, 0, 0, 0, 0, 0, 0, 0,
  31845. 0, 0, 0, 0, 0, 0, 0, 0,
  31846. 0, 0, 0, 0, 0, 0, 0, 0,
  31847. 0, 0, 0, 0, 0, 0, 0, 0,
  31848. 0, 0, 0, 0, 0, 0, 0, 0,
  31849. 0, 0, 0, 0, 0, 0, 0, 0,
  31850. 0, 0, 0, 0, 0, 0, 0, 0,
  31851. 0, 0, 0, 0, 0, 0, 0, 0,
  31852. 0, 0, 0, 0, 0, 0, 0, 0,
  31853. 0, 0, 0, 0, 0, 0, 0, 0,
  31854. 0, 0, 0, 0, 0, 0, 0, 0,
  31855. 0, 0, 0, 0, 0, 0, 0, 0,
  31856. 0, 0, 0, 0, 0, 0, 0, 0,
  31857. 0, 0, 0, 0, 0, 0, 0, 0,
  31858. 0, 0, 0, 0, 0, 0, 0, 0,
  31859. 0, 0, 0, 0, 0, 0, 0, 0,
  31860. 0, 0, 0, 0, 0, 0, 0, 0,
  31861. 0, 0, 0, 0, 0, 0, 0, 0,
  31862. 0, 0, 0, 0, 0, 0, 0, 0,
  31863. 0, 0, 0, 0, 0, 0, 0, 0,
  31864. 0, 0, 0, 0, 0, 0, 0, 0,
  31865. 0, 0, 0, 0, 0, 0, 0, 0,
  31866. 0, 0, 0, 0, 0, 0, 0, 0,
  31867. 0, 0, 0, 0, 0, 0, 0, 0,
  31868. 0, 0, 0, 0, 0, 0, 0, 0,
  31869. 0, 0, 0, 0, 0, 0, 0, 0,
  31870. 0, 0, 0, 0, 0, 0, 0, 0,
  31871. 0, 0, 0, 0, 0, 0, 0, 0,
  31872. 0, 0, 0, 0, 0, 0, 0, 0,
  31873. 0, 0, 0, 0, 0, 0, 0, 0,
  31874. 0, 0, 0, 0, 0, 0, 0, 0,
  31875. 0, 0, 0, 0, 0, 0, 0, 0,
  31876. 0, 0, 0, 0, 0, 0, 0, 0,
  31877. 0, 0, 0, 0, 0, 0, 0, 0,
  31878. 0, 0, 0, 0, 0, 0, 0, 0,
  31879. 0, 0, 0, 0, 0, 0, 0, 0,
  31880. 0, 0, 0, 0, 0, 0, 0, 0,
  31881. 0, 0, 0, 0, 0, 0, 0, 0,
  31882. 0, 0, 0, 0, 0, 0, 0, 0,
  31883. 0, 0, 0, 0, 0, 0, 0, 0,
  31884. 0, 0, 0, 0, 0, 0, 0, 0,
  31885. 0, 0, 0, 0, 0, 0, 0, 0,
  31886. 0, 0, 0, 0, 0, 0, 0, 0,
  31887. 0, 0, 0, 0, 0, 0, 0, 0,
  31888. 0, 0, 0, 0, 0, 0, 0, 0,
  31889. 0, 0, 0, 0, 0, 0, 0, 0,
  31890. 0, 0, 0, 0, 0, 0, 0, 0,
  31891. 0, 0, 0, 0, 0, 0, 0, 0,
  31892. 0, 0, 0, 0, 0, 0, 0, 0,
  31893. 0, 0, 0, 0, 0, 0, 0, 0,
  31894. 0, 0, 0, 0, 0, 0, 0, 0,
  31895. 0, 0, 0, 0, 0, 0, 0, 0,
  31896. 0, 0, 0, 0, 0, 0, 0, 0,
  31897. 0, 0, 0, 0, 0, 0, 0, 0,
  31898. 0, 0, 0, 0, 0, 0, 0, 0,
  31899. 0, 0, 0, 0, 0, 0, 0, 0,
  31900. 0, 0, 0, 0, 0, 0, 0, 0,
  31901. 0, 0, 0, 0, 0, 0, 0, 0,
  31902. 0, 0, 0, 0, 0, 0, 0, 0,
  31903. 0, 0, 0, 0, 0, 0, 0, 0,
  31904. 0, 0, 0, 0, 0, 0, 0, 0,
  31905. 0, 0, 0, 0, 0, 0, 0, 0,
  31906. 0, 0, 0, 0, 0, 0, 0, 0,
  31907. 0, 0, 0, 0, 0, 0, 0, 0,
  31908. 0, 0, 0, 0, 0, 0, 0, 0,
  31909. 0, 0, 0, 0, 0, 0, 0, 0,
  31910. 0, 0, 0, 0, 0, 0, 0, 0,
  31911. 0, 0, 0, 0, 0, 0, 0, 0,
  31912. 0, 0, 0, 0, 0, 0, 32, 33,
  31913. 34, 35, 0, 32, 33, 47, 34, 34,
  31914. 35, 0, 0, 12, 0, 12, 45, 45,
  31915. 46, 45, 45, 45, 46, 45, 45, 46,
  31916. 32, 33, 47, 32, 33, 47, 45, 45,
  31917. 46, 45, 32, 33, 47, 32, 36, 38,
  31918. 40, 49, 51, 32, 33, 47, 47, 34,
  31919. 34, 35, 45, 32, 33, 47, 32, 33,
  31920. 47, 45, 32, 33, 47, 32, 36, 38,
  31921. 40, 49, 51, 32, 33, 47, 0,
  31922. ]
  31923. 1 class << self
  31924. 1 attr_accessor :start
  31925. end
  31926. 1 self.start = 2461
  31927. 1 class << self
  31928. 1 attr_accessor :first_final
  31929. end
  31930. 1 self.first_final = 2461
  31931. 1 class << self
  31932. 1 attr_accessor :error
  31933. end
  31934. 1 self.error = 0
  31935. 1 class << self
  31936. 1 attr_accessor :en_comment_tail
  31937. end
  31938. 1 self.en_comment_tail = 2449
  31939. 1 class << self
  31940. 1 attr_accessor :en_main
  31941. end
  31942. 1 self.en_main = 2461
  31943. 1 def self.parse(data)
  31944. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  31945. address_list = AddressListStruct.new([], [])
  31946. return address_list if Mail::Utilities.blank?(data)
  31947. phrase_s = phrase_e = qstr_s = qstr = comment_s = nil
  31948. group_name_s = domain_s = group_name = nil
  31949. local_dot_atom_s = local_dot_atom_e = nil
  31950. local_dot_atom_pre_comment_e = nil
  31951. obs_domain_list_s = nil
  31952. address_s = 0
  31953. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  31954. # 5.1 Variables Used by Ragel
  31955. p = 0
  31956. eof = pe = data.length
  31957. stack = []
  31958. begin
  31959. p ||= 0
  31960. pe ||= data.length
  31961. cs = start
  31962. top = 0
  31963. end
  31964. begin
  31965. testEof = false
  31966. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  31967. _goto_level = 0
  31968. _resume = 10
  31969. _eof_trans = 15
  31970. _again = 20
  31971. _test_eof = 30
  31972. _out = 40
  31973. while true
  31974. if _goto_level <= 0
  31975. if p == pe
  31976. _goto_level = _test_eof
  31977. next
  31978. end
  31979. if cs == 0
  31980. _goto_level = _out
  31981. next
  31982. end
  31983. end
  31984. if _goto_level <= _resume
  31985. _keys = cs << 1
  31986. _inds = _index_offsets[cs]
  31987. _slen = _key_spans[cs]
  31988. _wide = data[p].ord
  31989. _trans = if (_slen > 0 &&
  31990. _trans_keys[_keys] <= _wide &&
  31991. _wide <= _trans_keys[_keys + 1])
  31992. _indicies[_inds + _wide - _trans_keys[_keys]]
  31993. else
  31994. _indicies[_inds + _slen]
  31995. end
  31996. cs = _trans_targs[_trans]
  31997. if _trans_actions[_trans] != 0
  31998. case _trans_actions[_trans]
  31999. when 4
  32000. begin
  32001. phrase_e = p - 1
  32002. end
  32003. when 8
  32004. begin
  32005. qstr_s = p
  32006. end
  32007. when 10
  32008. begin
  32009. qstr = chars(data, qstr_s, p - 1)
  32010. end
  32011. when 59
  32012. begin
  32013. comment_s = p unless comment_s
  32014. end
  32015. when 12
  32016. begin
  32017. if address
  32018. address.comments << chars(data, comment_s, p - 2)
  32019. end
  32020. comment_s = nil
  32021. end
  32022. when 34
  32023. begin
  32024. if address_s
  32025. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32026. if address.domain
  32027. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32028. else
  32029. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32030. end
  32031. end
  32032. address.raw = chars(data, address_s, p - 1)
  32033. address_list.addresses << address if address
  32034. # Start next address
  32035. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32036. address.group = group_name
  32037. address_s = nil
  32038. end
  32039. end
  32040. when 3
  32041. begin
  32042. if qstr
  32043. address.display_name = Mail::Utilities.unescape(qstr)
  32044. qstr = nil
  32045. elsif phrase_e
  32046. address.display_name = chars(data, phrase_s, phrase_e).strip
  32047. phrase_e = phrase_s = nil
  32048. end
  32049. end
  32050. when 43
  32051. begin
  32052. domain_s = p
  32053. end
  32054. when 54
  32055. begin
  32056. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32057. end
  32058. when 1
  32059. begin
  32060. local_dot_atom_s = p
  32061. end
  32062. when 24
  32063. begin
  32064. local_dot_atom_e = p - 1
  32065. end
  32066. when 21
  32067. begin
  32068. local_dot_atom_pre_comment_e = p - 1
  32069. end
  32070. when 50
  32071. begin
  32072. address.local = '"' + qstr + '"' if address
  32073. end
  32074. when 20
  32075. begin
  32076. obs_domain_list_s = p
  32077. end
  32078. when 2
  32079. begin
  32080. begin
  32081. stack[top] = cs
  32082. top += 1
  32083. cs = 2449
  32084. _goto_level = _again
  32085. next
  32086. end
  32087. end
  32088. when 62
  32089. begin
  32090. begin
  32091. top -= 1
  32092. cs = stack[top]
  32093. _goto_level = _again
  32094. next
  32095. end
  32096. end
  32097. when 6
  32098. begin
  32099. phrase_e = p - 1
  32100. end
  32101. begin
  32102. if qstr
  32103. group = qstr
  32104. qstr = nil
  32105. else
  32106. group = chars(data, group_name_s, p - 1)
  32107. group_name_s = nil
  32108. end
  32109. address_list.group_names << group
  32110. group_name = group
  32111. # Start next address
  32112. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32113. address_s = p
  32114. address.group = group_name
  32115. end
  32116. when 7
  32117. begin
  32118. phrase_e = p - 1
  32119. end
  32120. begin
  32121. if qstr
  32122. address.display_name = Mail::Utilities.unescape(qstr)
  32123. qstr = nil
  32124. elsif phrase_e
  32125. address.display_name = chars(data, phrase_s, phrase_e).strip
  32126. phrase_e = phrase_s = nil
  32127. end
  32128. end
  32129. when 42
  32130. begin
  32131. phrase_e = p - 1
  32132. end
  32133. begin
  32134. domain_s = p
  32135. end
  32136. when 30
  32137. begin
  32138. phrase_e = p - 1
  32139. end
  32140. begin
  32141. local_dot_atom_pre_comment_e = p - 1
  32142. end
  32143. when 9
  32144. begin
  32145. qstr_s = p
  32146. end
  32147. begin
  32148. qstr = chars(data, qstr_s, p - 1)
  32149. end
  32150. when 60
  32151. begin
  32152. comment_s = p unless comment_s
  32153. end
  32154. begin
  32155. begin
  32156. stack[top] = cs
  32157. top += 1
  32158. cs = 2449
  32159. _goto_level = _again
  32160. next
  32161. end
  32162. end
  32163. when 61
  32164. begin
  32165. comment_s = p unless comment_s
  32166. end
  32167. begin
  32168. begin
  32169. top -= 1
  32170. cs = stack[top]
  32171. _goto_level = _again
  32172. next
  32173. end
  32174. end
  32175. when 11
  32176. begin
  32177. if address
  32178. address.comments << chars(data, comment_s, p - 2)
  32179. end
  32180. comment_s = nil
  32181. end
  32182. begin
  32183. phrase_e = p - 1
  32184. end
  32185. when 35
  32186. begin
  32187. if address
  32188. address.comments << chars(data, comment_s, p - 2)
  32189. end
  32190. comment_s = nil
  32191. end
  32192. begin
  32193. if address_s
  32194. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32195. if address.domain
  32196. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32197. else
  32198. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32199. end
  32200. end
  32201. address.raw = chars(data, address_s, p - 1)
  32202. address_list.addresses << address if address
  32203. # Start next address
  32204. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32205. address.group = group_name
  32206. address_s = nil
  32207. end
  32208. end
  32209. when 17
  32210. begin
  32211. if address
  32212. address.comments << chars(data, comment_s, p - 2)
  32213. end
  32214. comment_s = nil
  32215. end
  32216. begin
  32217. if qstr
  32218. address.display_name = Mail::Utilities.unescape(qstr)
  32219. qstr = nil
  32220. elsif phrase_e
  32221. address.display_name = chars(data, phrase_s, phrase_e).strip
  32222. phrase_e = phrase_s = nil
  32223. end
  32224. end
  32225. when 55
  32226. begin
  32227. if address
  32228. address.comments << chars(data, comment_s, p - 2)
  32229. end
  32230. comment_s = nil
  32231. end
  32232. begin
  32233. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32234. end
  32235. when 53
  32236. begin
  32237. if address
  32238. address.comments << chars(data, comment_s, p - 2)
  32239. end
  32240. comment_s = nil
  32241. end
  32242. begin
  32243. local_dot_atom_s = p
  32244. end
  32245. when 25
  32246. begin
  32247. if address
  32248. address.comments << chars(data, comment_s, p - 2)
  32249. end
  32250. comment_s = nil
  32251. end
  32252. begin
  32253. local_dot_atom_e = p - 1
  32254. end
  32255. when 52
  32256. begin
  32257. if address
  32258. address.comments << chars(data, comment_s, p - 2)
  32259. end
  32260. comment_s = nil
  32261. end
  32262. begin
  32263. address.local = '"' + qstr + '"' if address
  32264. end
  32265. when 16
  32266. begin
  32267. if address
  32268. address.comments << chars(data, comment_s, p - 2)
  32269. end
  32270. comment_s = nil
  32271. end
  32272. begin
  32273. begin
  32274. stack[top] = cs
  32275. top += 1
  32276. cs = 2449
  32277. _goto_level = _again
  32278. next
  32279. end
  32280. end
  32281. when 29
  32282. begin
  32283. address_s = p
  32284. end
  32285. begin
  32286. phrase_s = p
  32287. end
  32288. when 28
  32289. begin
  32290. address_s = p
  32291. end
  32292. begin
  32293. if qstr
  32294. address.display_name = Mail::Utilities.unescape(qstr)
  32295. qstr = nil
  32296. elsif phrase_e
  32297. address.display_name = chars(data, phrase_s, phrase_e).strip
  32298. phrase_e = phrase_s = nil
  32299. end
  32300. end
  32301. when 48
  32302. begin
  32303. domain_s = p
  32304. end
  32305. begin
  32306. begin
  32307. stack[top] = cs
  32308. top += 1
  32309. cs = 2449
  32310. _goto_level = _again
  32311. next
  32312. end
  32313. end
  32314. when 45
  32315. begin
  32316. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32317. end
  32318. begin
  32319. if address_s
  32320. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32321. if address.domain
  32322. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32323. else
  32324. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32325. end
  32326. end
  32327. address.raw = chars(data, address_s, p - 1)
  32328. address_list.addresses << address if address
  32329. # Start next address
  32330. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32331. address.group = group_name
  32332. address_s = nil
  32333. end
  32334. end
  32335. when 18
  32336. begin
  32337. local_dot_atom_s = p
  32338. end
  32339. begin
  32340. obs_domain_list_s = p
  32341. end
  32342. when 33
  32343. begin
  32344. local_dot_atom_e = p - 1
  32345. end
  32346. begin
  32347. if address_s
  32348. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32349. if address.domain
  32350. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32351. else
  32352. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32353. end
  32354. end
  32355. address.raw = chars(data, address_s, p - 1)
  32356. address_list.addresses << address if address
  32357. # Start next address
  32358. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32359. address.group = group_name
  32360. address_s = nil
  32361. end
  32362. end
  32363. when 39
  32364. begin
  32365. local_dot_atom_e = p - 1
  32366. end
  32367. begin
  32368. address.local = '"' + qstr + '"' if address
  32369. end
  32370. when 23
  32371. begin
  32372. local_dot_atom_pre_comment_e = p - 1
  32373. end
  32374. begin
  32375. local_dot_atom_e = p - 1
  32376. end
  32377. when 22
  32378. begin
  32379. local_dot_atom_pre_comment_e = p - 1
  32380. end
  32381. begin
  32382. begin
  32383. stack[top] = cs
  32384. top += 1
  32385. cs = 2449
  32386. _goto_level = _again
  32387. next
  32388. end
  32389. end
  32390. when 49
  32391. begin
  32392. address.local = '"' + qstr + '"' if address
  32393. end
  32394. begin
  32395. if address_s
  32396. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32397. if address.domain
  32398. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32399. else
  32400. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32401. end
  32402. end
  32403. address.raw = chars(data, address_s, p - 1)
  32404. address_list.addresses << address if address
  32405. # Start next address
  32406. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32407. address.group = group_name
  32408. address_s = nil
  32409. end
  32410. end
  32411. when 56
  32412. begin
  32413. address.obs_domain_list = chars(data, obs_domain_list_s, p - 1)
  32414. end
  32415. begin
  32416. local_dot_atom_s = p
  32417. end
  32418. when 5
  32419. begin
  32420. begin
  32421. stack[top] = cs
  32422. top += 1
  32423. cs = 2449
  32424. _goto_level = _again
  32425. next
  32426. end
  32427. end
  32428. begin
  32429. phrase_e = p - 1
  32430. end
  32431. when 14
  32432. begin
  32433. if address
  32434. address.comments << chars(data, comment_s, p - 2)
  32435. end
  32436. comment_s = nil
  32437. end
  32438. begin
  32439. phrase_e = p - 1
  32440. end
  32441. begin
  32442. if qstr
  32443. group = qstr
  32444. qstr = nil
  32445. else
  32446. group = chars(data, group_name_s, p - 1)
  32447. group_name_s = nil
  32448. end
  32449. address_list.group_names << group
  32450. group_name = group
  32451. # Start next address
  32452. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32453. address_s = p
  32454. address.group = group_name
  32455. end
  32456. when 15
  32457. begin
  32458. if address
  32459. address.comments << chars(data, comment_s, p - 2)
  32460. end
  32461. comment_s = nil
  32462. end
  32463. begin
  32464. phrase_e = p - 1
  32465. end
  32466. begin
  32467. if qstr
  32468. address.display_name = Mail::Utilities.unescape(qstr)
  32469. qstr = nil
  32470. elsif phrase_e
  32471. address.display_name = chars(data, phrase_s, phrase_e).strip
  32472. phrase_e = phrase_s = nil
  32473. end
  32474. end
  32475. when 46
  32476. begin
  32477. if address
  32478. address.comments << chars(data, comment_s, p - 2)
  32479. end
  32480. comment_s = nil
  32481. end
  32482. begin
  32483. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32484. end
  32485. begin
  32486. if address_s
  32487. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32488. if address.domain
  32489. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32490. else
  32491. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32492. end
  32493. end
  32494. address.raw = chars(data, address_s, p - 1)
  32495. address_list.addresses << address if address
  32496. # Start next address
  32497. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32498. address.group = group_name
  32499. address_s = nil
  32500. end
  32501. end
  32502. when 47
  32503. begin
  32504. if address
  32505. address.comments << chars(data, comment_s, p - 2)
  32506. end
  32507. comment_s = nil
  32508. end
  32509. begin
  32510. local_dot_atom_e = p - 1
  32511. end
  32512. begin
  32513. if address_s
  32514. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32515. if address.domain
  32516. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32517. else
  32518. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32519. end
  32520. end
  32521. address.raw = chars(data, address_s, p - 1)
  32522. address_list.addresses << address if address
  32523. # Start next address
  32524. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32525. address.group = group_name
  32526. address_s = nil
  32527. end
  32528. end
  32529. when 41
  32530. begin
  32531. if address
  32532. address.comments << chars(data, comment_s, p - 2)
  32533. end
  32534. comment_s = nil
  32535. end
  32536. begin
  32537. local_dot_atom_e = p - 1
  32538. end
  32539. begin
  32540. address.local = '"' + qstr + '"' if address
  32541. end
  32542. when 51
  32543. begin
  32544. if address
  32545. address.comments << chars(data, comment_s, p - 2)
  32546. end
  32547. comment_s = nil
  32548. end
  32549. begin
  32550. address.local = '"' + qstr + '"' if address
  32551. end
  32552. begin
  32553. if address_s
  32554. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32555. if address.domain
  32556. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32557. else
  32558. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32559. end
  32560. end
  32561. address.raw = chars(data, address_s, p - 1)
  32562. address_list.addresses << address if address
  32563. # Start next address
  32564. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32565. address.group = group_name
  32566. address_s = nil
  32567. end
  32568. end
  32569. when 13
  32570. begin
  32571. if address
  32572. address.comments << chars(data, comment_s, p - 2)
  32573. end
  32574. comment_s = nil
  32575. end
  32576. begin
  32577. begin
  32578. stack[top] = cs
  32579. top += 1
  32580. cs = 2449
  32581. _goto_level = _again
  32582. next
  32583. end
  32584. end
  32585. begin
  32586. phrase_e = p - 1
  32587. end
  32588. when 65
  32589. begin
  32590. group_name_s = p
  32591. end
  32592. begin
  32593. phrase_s = p
  32594. end
  32595. begin
  32596. address_s = p
  32597. end
  32598. when 26
  32599. begin
  32600. address_s = p
  32601. end
  32602. begin
  32603. phrase_s = p
  32604. end
  32605. begin
  32606. local_dot_atom_s = p
  32607. end
  32608. when 19
  32609. begin
  32610. local_dot_atom_s = p
  32611. end
  32612. begin
  32613. begin
  32614. stack[top] = cs
  32615. top += 1
  32616. cs = 2449
  32617. _goto_level = _again
  32618. next
  32619. end
  32620. end
  32621. begin
  32622. obs_domain_list_s = p
  32623. end
  32624. when 38
  32625. begin
  32626. local_dot_atom_e = p - 1
  32627. end
  32628. begin
  32629. address.local = '"' + qstr + '"' if address
  32630. end
  32631. begin
  32632. if address_s
  32633. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32634. if address.domain
  32635. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32636. else
  32637. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32638. end
  32639. end
  32640. address.raw = chars(data, address_s, p - 1)
  32641. address_list.addresses << address if address
  32642. # Start next address
  32643. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32644. address.group = group_name
  32645. address_s = nil
  32646. end
  32647. end
  32648. when 32
  32649. begin
  32650. local_dot_atom_pre_comment_e = p - 1
  32651. end
  32652. begin
  32653. local_dot_atom_e = p - 1
  32654. end
  32655. begin
  32656. if address_s
  32657. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32658. if address.domain
  32659. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32660. else
  32661. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32662. end
  32663. end
  32664. address.raw = chars(data, address_s, p - 1)
  32665. address_list.addresses << address if address
  32666. # Start next address
  32667. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32668. address.group = group_name
  32669. address_s = nil
  32670. end
  32671. end
  32672. when 37
  32673. begin
  32674. local_dot_atom_pre_comment_e = p - 1
  32675. end
  32676. begin
  32677. local_dot_atom_e = p - 1
  32678. end
  32679. begin
  32680. address.local = '"' + qstr + '"' if address
  32681. end
  32682. when 57
  32683. begin
  32684. address.obs_domain_list = chars(data, obs_domain_list_s, p - 1)
  32685. end
  32686. begin
  32687. local_dot_atom_s = p
  32688. end
  32689. begin
  32690. begin
  32691. stack[top] = cs
  32692. top += 1
  32693. cs = 2449
  32694. _goto_level = _again
  32695. next
  32696. end
  32697. end
  32698. when 44
  32699. begin
  32700. begin
  32701. stack[top] = cs
  32702. top += 1
  32703. cs = 2449
  32704. _goto_level = _again
  32705. next
  32706. end
  32707. end
  32708. begin
  32709. phrase_e = p - 1
  32710. end
  32711. begin
  32712. domain_s = p
  32713. end
  32714. when 31
  32715. begin
  32716. begin
  32717. stack[top] = cs
  32718. top += 1
  32719. cs = 2449
  32720. _goto_level = _again
  32721. next
  32722. end
  32723. end
  32724. begin
  32725. phrase_e = p - 1
  32726. end
  32727. begin
  32728. local_dot_atom_pre_comment_e = p - 1
  32729. end
  32730. when 40
  32731. begin
  32732. if address
  32733. address.comments << chars(data, comment_s, p - 2)
  32734. end
  32735. comment_s = nil
  32736. end
  32737. begin
  32738. local_dot_atom_e = p - 1
  32739. end
  32740. begin
  32741. address.local = '"' + qstr + '"' if address
  32742. end
  32743. begin
  32744. if address_s
  32745. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32746. if address.domain
  32747. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32748. else
  32749. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32750. end
  32751. end
  32752. address.raw = chars(data, address_s, p - 1)
  32753. address_list.addresses << address if address
  32754. # Start next address
  32755. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32756. address.group = group_name
  32757. address_s = nil
  32758. end
  32759. end
  32760. when 63
  32761. begin
  32762. group_name_s = p
  32763. end
  32764. begin
  32765. phrase_s = p
  32766. end
  32767. begin
  32768. address_s = p
  32769. end
  32770. begin
  32771. local_dot_atom_s = p
  32772. end
  32773. when 27
  32774. begin
  32775. address_s = p
  32776. end
  32777. begin
  32778. phrase_s = p
  32779. end
  32780. begin
  32781. begin
  32782. stack[top] = cs
  32783. top += 1
  32784. cs = 2449
  32785. _goto_level = _again
  32786. next
  32787. end
  32788. end
  32789. begin
  32790. local_dot_atom_s = p
  32791. end
  32792. when 36
  32793. begin
  32794. local_dot_atom_pre_comment_e = p - 1
  32795. end
  32796. begin
  32797. local_dot_atom_e = p - 1
  32798. end
  32799. begin
  32800. address.local = '"' + qstr + '"' if address
  32801. end
  32802. begin
  32803. if address_s
  32804. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32805. if address.domain
  32806. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32807. else
  32808. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32809. end
  32810. end
  32811. address.raw = chars(data, address_s, p - 1)
  32812. address_list.addresses << address if address
  32813. # Start next address
  32814. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32815. address.group = group_name
  32816. address_s = nil
  32817. end
  32818. end
  32819. when 58
  32820. begin
  32821. begin
  32822. stack[top] = cs
  32823. top += 1
  32824. cs = 2449
  32825. _goto_level = _again
  32826. next
  32827. end
  32828. end
  32829. begin
  32830. address_s = p
  32831. end
  32832. begin
  32833. phrase_s = p
  32834. end
  32835. begin
  32836. local_dot_atom_s = p
  32837. end
  32838. when 64
  32839. begin
  32840. group_name_s = p
  32841. end
  32842. begin
  32843. phrase_s = p
  32844. end
  32845. begin
  32846. begin
  32847. stack[top] = cs
  32848. top += 1
  32849. cs = 2449
  32850. _goto_level = _again
  32851. next
  32852. end
  32853. end
  32854. begin
  32855. address_s = p
  32856. end
  32857. begin
  32858. local_dot_atom_s = p
  32859. end
  32860. end
  32861. end
  32862. end
  32863. if _goto_level <= _again
  32864. if cs == 0
  32865. _goto_level = _out
  32866. next
  32867. end
  32868. p += 1
  32869. if p != pe
  32870. _goto_level = _resume
  32871. next
  32872. end
  32873. end
  32874. if _goto_level <= _test_eof
  32875. if p == eof
  32876. case _eof_actions[cs]
  32877. when 12
  32878. begin
  32879. if address
  32880. address.comments << chars(data, comment_s, p - 2)
  32881. end
  32882. comment_s = nil
  32883. end
  32884. when 34
  32885. begin
  32886. if address_s
  32887. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32888. if address.domain
  32889. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32890. else
  32891. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32892. end
  32893. end
  32894. address.raw = chars(data, address_s, p - 1)
  32895. address_list.addresses << address if address
  32896. # Start next address
  32897. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32898. address.group = group_name
  32899. address_s = nil
  32900. end
  32901. end
  32902. when 35
  32903. begin
  32904. if address
  32905. address.comments << chars(data, comment_s, p - 2)
  32906. end
  32907. comment_s = nil
  32908. end
  32909. begin
  32910. if address_s
  32911. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32912. if address.domain
  32913. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32914. else
  32915. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32916. end
  32917. end
  32918. address.raw = chars(data, address_s, p - 1)
  32919. address_list.addresses << address if address
  32920. # Start next address
  32921. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32922. address.group = group_name
  32923. address_s = nil
  32924. end
  32925. end
  32926. when 45
  32927. begin
  32928. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32929. end
  32930. begin
  32931. if address_s
  32932. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32933. if address.domain
  32934. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32935. else
  32936. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32937. end
  32938. end
  32939. address.raw = chars(data, address_s, p - 1)
  32940. address_list.addresses << address if address
  32941. # Start next address
  32942. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32943. address.group = group_name
  32944. address_s = nil
  32945. end
  32946. end
  32947. when 33
  32948. begin
  32949. local_dot_atom_e = p - 1
  32950. end
  32951. begin
  32952. if address_s
  32953. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32954. if address.domain
  32955. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32956. else
  32957. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32958. end
  32959. end
  32960. address.raw = chars(data, address_s, p - 1)
  32961. address_list.addresses << address if address
  32962. # Start next address
  32963. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32964. address.group = group_name
  32965. address_s = nil
  32966. end
  32967. end
  32968. when 49
  32969. begin
  32970. address.local = '"' + qstr + '"' if address
  32971. end
  32972. begin
  32973. if address_s
  32974. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  32975. if address.domain
  32976. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  32977. else
  32978. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  32979. end
  32980. end
  32981. address.raw = chars(data, address_s, p - 1)
  32982. address_list.addresses << address if address
  32983. # Start next address
  32984. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  32985. address.group = group_name
  32986. address_s = nil
  32987. end
  32988. end
  32989. when 46
  32990. begin
  32991. if address
  32992. address.comments << chars(data, comment_s, p - 2)
  32993. end
  32994. comment_s = nil
  32995. end
  32996. begin
  32997. address.domain = chars(data, domain_s, p - 1).rstrip if address
  32998. end
  32999. begin
  33000. if address_s
  33001. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33002. if address.domain
  33003. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33004. else
  33005. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33006. end
  33007. end
  33008. address.raw = chars(data, address_s, p - 1)
  33009. address_list.addresses << address if address
  33010. # Start next address
  33011. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33012. address.group = group_name
  33013. address_s = nil
  33014. end
  33015. end
  33016. when 47
  33017. begin
  33018. if address
  33019. address.comments << chars(data, comment_s, p - 2)
  33020. end
  33021. comment_s = nil
  33022. end
  33023. begin
  33024. local_dot_atom_e = p - 1
  33025. end
  33026. begin
  33027. if address_s
  33028. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33029. if address.domain
  33030. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33031. else
  33032. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33033. end
  33034. end
  33035. address.raw = chars(data, address_s, p - 1)
  33036. address_list.addresses << address if address
  33037. # Start next address
  33038. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33039. address.group = group_name
  33040. address_s = nil
  33041. end
  33042. end
  33043. when 51
  33044. begin
  33045. if address
  33046. address.comments << chars(data, comment_s, p - 2)
  33047. end
  33048. comment_s = nil
  33049. end
  33050. begin
  33051. address.local = '"' + qstr + '"' if address
  33052. end
  33053. begin
  33054. if address_s
  33055. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33056. if address.domain
  33057. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33058. else
  33059. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33060. end
  33061. end
  33062. address.raw = chars(data, address_s, p - 1)
  33063. address_list.addresses << address if address
  33064. # Start next address
  33065. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33066. address.group = group_name
  33067. address_s = nil
  33068. end
  33069. end
  33070. when 38
  33071. begin
  33072. local_dot_atom_e = p - 1
  33073. end
  33074. begin
  33075. address.local = '"' + qstr + '"' if address
  33076. end
  33077. begin
  33078. if address_s
  33079. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33080. if address.domain
  33081. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33082. else
  33083. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33084. end
  33085. end
  33086. address.raw = chars(data, address_s, p - 1)
  33087. address_list.addresses << address if address
  33088. # Start next address
  33089. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33090. address.group = group_name
  33091. address_s = nil
  33092. end
  33093. end
  33094. when 32
  33095. begin
  33096. local_dot_atom_pre_comment_e = p - 1
  33097. end
  33098. begin
  33099. local_dot_atom_e = p - 1
  33100. end
  33101. begin
  33102. if address_s
  33103. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33104. if address.domain
  33105. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33106. else
  33107. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33108. end
  33109. end
  33110. address.raw = chars(data, address_s, p - 1)
  33111. address_list.addresses << address if address
  33112. # Start next address
  33113. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33114. address.group = group_name
  33115. address_s = nil
  33116. end
  33117. end
  33118. when 40
  33119. begin
  33120. if address
  33121. address.comments << chars(data, comment_s, p - 2)
  33122. end
  33123. comment_s = nil
  33124. end
  33125. begin
  33126. local_dot_atom_e = p - 1
  33127. end
  33128. begin
  33129. address.local = '"' + qstr + '"' if address
  33130. end
  33131. begin
  33132. if address_s
  33133. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33134. if address.domain
  33135. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33136. else
  33137. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33138. end
  33139. end
  33140. address.raw = chars(data, address_s, p - 1)
  33141. address_list.addresses << address if address
  33142. # Start next address
  33143. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33144. address.group = group_name
  33145. address_s = nil
  33146. end
  33147. end
  33148. when 36
  33149. begin
  33150. local_dot_atom_pre_comment_e = p - 1
  33151. end
  33152. begin
  33153. local_dot_atom_e = p - 1
  33154. end
  33155. begin
  33156. address.local = '"' + qstr + '"' if address
  33157. end
  33158. begin
  33159. if address_s
  33160. if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
  33161. if address.domain
  33162. address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
  33163. else
  33164. address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
  33165. end
  33166. end
  33167. address.raw = chars(data, address_s, p - 1)
  33168. address_list.addresses << address if address
  33169. # Start next address
  33170. address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
  33171. address.group = group_name
  33172. address_s = nil
  33173. end
  33174. end
  33175. end
  33176. end
  33177. end
  33178. if _goto_level <= _out
  33179. break
  33180. end
  33181. end
  33182. end
  33183. if p != eof || cs < 2461
  33184. raise Mail::Field::IncompleteParseError.new(Mail::AddressList, data, p)
  33185. end
  33186. address_list
  33187. end
  33188. end
  33189. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_disposition_parser.rb

20.0% lines covered

250 relevant lines. 50 lines covered and 200 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module ContentDispositionParser
  6. 1 extend Mail::ParserTools
  7. 1 ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 33, 126, 9, 126,
  14. 10, 10, 9, 32, 33,
  15. 126, 9, 126, 9, 40,
  16. 10, 10, 9, 32, 1, 244,
  17. 1, 244, 10, 10, 9,
  18. 32, 10, 10, 9, 32,
  19. 0, 244, 128, 191, 160, 191,
  20. 128, 191, 128, 159, 144,
  21. 191, 128, 191, 128, 143,
  22. 9, 40, 10, 10, 9, 32,
  23. 9, 126, 1, 244, 1,
  24. 244, 10, 10, 9, 32,
  25. 0, 244, 128, 191, 160, 191,
  26. 128, 191, 128, 159, 144,
  27. 191, 128, 191, 128, 143,
  28. 33, 126, 9, 59, 9, 59,
  29. 9, 126, 9, 59, 9,
  30. 59, 0, 0, 0,
  31. ]
  32. 1 class << self
  33. 1 attr_accessor :_key_spans
  34. 1 private :_key_spans, :_key_spans=
  35. end
  36. 1 self._key_spans = [
  37. 0, 94, 118, 1, 24, 94, 118, 32,
  38. 1, 24, 244, 244, 1, 24, 1, 24,
  39. 245, 64, 32, 64, 32, 48, 64, 16,
  40. 32, 1, 24, 118, 244, 244, 1, 24,
  41. 245, 64, 32, 64, 32, 48, 64, 16,
  42. 94, 51, 51, 118, 51, 51, 0,
  43. ]
  44. 1 class << self
  45. 1 attr_accessor :_index_offsets
  46. 1 private :_index_offsets, :_index_offsets=
  47. end
  48. 1 self._index_offsets = [
  49. 0, 0, 95, 214, 216, 241, 336, 455,
  50. 488, 490, 515, 760, 1005, 1007, 1032, 1034,
  51. 1059, 1305, 1370, 1403, 1468, 1501, 1550, 1615,
  52. 1632, 1665, 1667, 1692, 1811, 2056, 2301, 2303,
  53. 2328, 2574, 2639, 2672, 2737, 2770, 2819, 2884,
  54. 2901, 2996, 3048, 3100, 3219, 3271, 3323,
  55. ]
  56. 1 class << self
  57. 1 attr_accessor :_indicies
  58. 1 private :_indicies, :_indicies=
  59. end
  60. 1 self._indicies = [
  61. 0, 0, 0, 0, 0, 0, 0, 1,
  62. 1, 0, 0, 0, 0, 0, 1, 0,
  63. 0, 0, 0, 0, 0, 0, 0, 0,
  64. 0, 1, 1, 1, 1, 1, 1, 1,
  65. 0, 0, 0, 0, 0, 0, 0, 0,
  66. 0, 0, 0, 0, 0, 0, 0, 0,
  67. 0, 0, 0, 0, 0, 0, 0, 0,
  68. 0, 0, 1, 1, 1, 0, 0, 0,
  69. 0, 0, 0, 0, 0, 0, 0, 0,
  70. 0, 0, 0, 0, 0, 0, 0, 0,
  71. 0, 0, 0, 0, 0, 0, 0, 0,
  72. 0, 0, 0, 0, 0, 0, 1, 2,
  73. 1, 1, 1, 3, 1, 1, 1, 1,
  74. 1, 1, 1, 1, 1, 1, 1, 1,
  75. 1, 1, 1, 1, 1, 1, 2, 4,
  76. 4, 4, 4, 4, 4, 4, 5, 1,
  77. 4, 4, 4, 4, 4, 1, 4, 4,
  78. 4, 4, 4, 4, 4, 4, 4, 4,
  79. 1, 1, 1, 1, 1, 1, 1, 4,
  80. 4, 4, 4, 4, 4, 4, 4, 4,
  81. 4, 4, 4, 4, 4, 4, 4, 4,
  82. 4, 4, 4, 4, 4, 4, 4, 4,
  83. 4, 1, 1, 1, 4, 4, 4, 4,
  84. 4, 4, 4, 4, 4, 4, 4, 4,
  85. 4, 4, 4, 4, 4, 4, 4, 4,
  86. 4, 4, 4, 4, 4, 4, 4, 4,
  87. 4, 4, 4, 4, 4, 1, 6, 1,
  88. 2, 1, 1, 1, 1, 1, 1, 1,
  89. 1, 1, 1, 1, 1, 1, 1, 1,
  90. 1, 1, 1, 1, 1, 1, 1, 2,
  91. 1, 7, 7, 7, 7, 7, 7, 7,
  92. 1, 1, 7, 7, 7, 7, 7, 1,
  93. 7, 7, 7, 7, 7, 7, 7, 7,
  94. 7, 7, 1, 1, 1, 8, 1, 1,
  95. 1, 7, 7, 7, 7, 7, 7, 7,
  96. 7, 7, 7, 7, 7, 7, 7, 7,
  97. 7, 7, 7, 7, 7, 7, 7, 7,
  98. 7, 7, 7, 1, 1, 1, 7, 7,
  99. 7, 7, 7, 7, 7, 7, 7, 7,
  100. 7, 7, 7, 7, 7, 7, 7, 7,
  101. 7, 7, 7, 7, 7, 7, 7, 7,
  102. 7, 7, 7, 7, 7, 7, 7, 1,
  103. 9, 1, 1, 1, 10, 1, 1, 1,
  104. 1, 1, 1, 1, 1, 1, 1, 1,
  105. 1, 1, 1, 1, 1, 1, 1, 9,
  106. 11, 12, 11, 11, 11, 11, 11, 13,
  107. 1, 11, 11, 11, 11, 11, 1, 11,
  108. 11, 11, 11, 11, 11, 11, 11, 11,
  109. 11, 1, 1, 1, 11, 1, 1, 1,
  110. 11, 11, 11, 11, 11, 11, 11, 11,
  111. 11, 11, 11, 11, 11, 11, 11, 11,
  112. 11, 11, 11, 11, 11, 11, 11, 11,
  113. 11, 11, 1, 1, 1, 11, 11, 11,
  114. 11, 11, 11, 11, 11, 11, 11, 11,
  115. 11, 11, 11, 11, 11, 11, 11, 11,
  116. 11, 11, 11, 11, 11, 11, 11, 11,
  117. 11, 11, 11, 11, 11, 11, 1, 14,
  118. 1, 1, 1, 15, 1, 1, 1, 1,
  119. 1, 1, 1, 1, 1, 1, 1, 1,
  120. 1, 1, 1, 1, 1, 1, 14, 1,
  121. 16, 1, 1, 1, 1, 1, 17, 1,
  122. 18, 1, 14, 1, 1, 1, 1, 1,
  123. 1, 1, 1, 1, 1, 1, 1, 1,
  124. 1, 1, 1, 1, 1, 1, 1, 1,
  125. 1, 14, 1, 19, 19, 19, 19, 19,
  126. 19, 19, 19, 19, 1, 19, 19, 20,
  127. 19, 19, 19, 19, 19, 19, 19, 19,
  128. 19, 19, 19, 19, 19, 19, 19, 19,
  129. 19, 19, 19, 19, 21, 19, 19, 19,
  130. 19, 19, 19, 19, 19, 19, 19, 19,
  131. 19, 19, 19, 19, 19, 19, 19, 19,
  132. 19, 19, 19, 19, 19, 19, 19, 19,
  133. 19, 19, 19, 19, 19, 19, 19, 19,
  134. 19, 19, 19, 19, 19, 19, 19, 19,
  135. 19, 19, 19, 19, 19, 19, 19, 19,
  136. 19, 19, 19, 19, 19, 19, 22, 19,
  137. 19, 19, 19, 19, 19, 19, 19, 19,
  138. 19, 19, 19, 19, 19, 19, 19, 19,
  139. 19, 19, 19, 19, 19, 19, 19, 19,
  140. 19, 19, 19, 19, 19, 19, 19, 19,
  141. 19, 19, 1, 1, 1, 1, 1, 1,
  142. 1, 1, 1, 1, 1, 1, 1, 1,
  143. 1, 1, 1, 1, 1, 1, 1, 1,
  144. 1, 1, 1, 1, 1, 1, 1, 1,
  145. 1, 1, 1, 1, 1, 1, 1, 1,
  146. 1, 1, 1, 1, 1, 1, 1, 1,
  147. 1, 1, 1, 1, 1, 1, 1, 1,
  148. 1, 1, 1, 1, 1, 1, 1, 1,
  149. 1, 1, 1, 1, 23, 23, 23, 23,
  150. 23, 23, 23, 23, 23, 23, 23, 23,
  151. 23, 23, 23, 23, 23, 23, 23, 23,
  152. 23, 23, 23, 23, 23, 23, 23, 23,
  153. 23, 23, 24, 25, 25, 25, 25, 25,
  154. 25, 25, 25, 25, 25, 25, 25, 26,
  155. 25, 25, 27, 28, 28, 28, 29, 1,
  156. 30, 30, 30, 30, 30, 30, 30, 30,
  157. 30, 1, 30, 30, 31, 30, 30, 30,
  158. 30, 30, 30, 30, 30, 30, 30, 30,
  159. 30, 30, 30, 30, 30, 30, 30, 30,
  160. 30, 32, 30, 30, 30, 30, 30, 30,
  161. 30, 30, 30, 30, 30, 30, 30, 30,
  162. 30, 30, 30, 30, 30, 30, 30, 30,
  163. 30, 30, 30, 30, 30, 30, 30, 30,
  164. 30, 30, 30, 30, 30, 30, 30, 30,
  165. 30, 30, 30, 30, 30, 30, 30, 30,
  166. 30, 30, 30, 30, 30, 30, 30, 30,
  167. 30, 30, 30, 33, 30, 30, 30, 30,
  168. 30, 30, 30, 30, 30, 30, 30, 30,
  169. 30, 30, 30, 30, 30, 30, 30, 30,
  170. 30, 30, 30, 30, 30, 30, 30, 30,
  171. 30, 30, 30, 30, 30, 30, 30, 1,
  172. 1, 1, 1, 1, 1, 1, 1, 1,
  173. 1, 1, 1, 1, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 1, 1, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 1, 1,
  177. 1, 1, 1, 1, 1, 1, 1, 1,
  178. 1, 1, 1, 1, 1, 1, 1, 1,
  179. 1, 1, 1, 1, 1, 1, 1, 1,
  180. 1, 34, 34, 34, 34, 34, 34, 34,
  181. 34, 34, 34, 34, 34, 34, 34, 34,
  182. 34, 34, 34, 34, 34, 34, 34, 34,
  183. 34, 34, 34, 34, 34, 34, 34, 35,
  184. 36, 36, 36, 36, 36, 36, 36, 36,
  185. 36, 36, 36, 36, 37, 36, 36, 38,
  186. 39, 39, 39, 40, 1, 41, 1, 30,
  187. 1, 1, 1, 1, 1, 1, 1, 1,
  188. 1, 1, 1, 1, 1, 1, 1, 1,
  189. 1, 1, 1, 1, 1, 1, 30, 1,
  190. 42, 1, 43, 1, 1, 1, 1, 1,
  191. 1, 1, 1, 1, 1, 1, 1, 1,
  192. 1, 1, 1, 1, 1, 1, 1, 1,
  193. 1, 43, 1, 30, 30, 30, 30, 30,
  194. 30, 30, 30, 30, 30, 30, 30, 30,
  195. 30, 30, 30, 30, 30, 30, 30, 30,
  196. 30, 30, 30, 30, 30, 30, 30, 30,
  197. 30, 30, 30, 30, 30, 30, 30, 30,
  198. 30, 30, 30, 30, 30, 30, 30, 30,
  199. 30, 30, 30, 30, 30, 30, 30, 30,
  200. 30, 30, 30, 30, 30, 30, 30, 30,
  201. 30, 30, 30, 30, 30, 30, 30, 30,
  202. 30, 30, 30, 30, 30, 30, 30, 30,
  203. 30, 30, 30, 30, 30, 30, 30, 30,
  204. 30, 30, 30, 30, 30, 30, 30, 30,
  205. 30, 30, 30, 30, 30, 30, 30, 30,
  206. 30, 30, 30, 30, 30, 30, 30, 30,
  207. 30, 30, 30, 30, 30, 30, 30, 30,
  208. 30, 30, 30, 30, 30, 30, 30, 30,
  209. 30, 30, 30, 1, 1, 1, 1, 1,
  210. 1, 1, 1, 1, 1, 1, 1, 1,
  211. 1, 1, 1, 1, 1, 1, 1, 1,
  212. 1, 1, 1, 1, 1, 1, 1, 1,
  213. 1, 1, 1, 1, 1, 1, 1, 1,
  214. 1, 1, 1, 1, 1, 1, 1, 1,
  215. 1, 1, 1, 1, 1, 1, 1, 1,
  216. 1, 1, 1, 1, 1, 1, 1, 1,
  217. 1, 1, 1, 1, 1, 34, 34, 34,
  218. 34, 34, 34, 34, 34, 34, 34, 34,
  219. 34, 34, 34, 34, 34, 34, 34, 34,
  220. 34, 34, 34, 34, 34, 34, 34, 34,
  221. 34, 34, 34, 35, 36, 36, 36, 36,
  222. 36, 36, 36, 36, 36, 36, 36, 36,
  223. 37, 36, 36, 38, 39, 39, 39, 40,
  224. 1, 30, 30, 30, 30, 30, 30, 30,
  225. 30, 30, 30, 30, 30, 30, 30, 30,
  226. 30, 30, 30, 30, 30, 30, 30, 30,
  227. 30, 30, 30, 30, 30, 30, 30, 30,
  228. 30, 30, 30, 30, 30, 30, 30, 30,
  229. 30, 30, 30, 30, 30, 30, 30, 30,
  230. 30, 30, 30, 30, 30, 30, 30, 30,
  231. 30, 30, 30, 30, 30, 30, 30, 30,
  232. 30, 1, 34, 34, 34, 34, 34, 34,
  233. 34, 34, 34, 34, 34, 34, 34, 34,
  234. 34, 34, 34, 34, 34, 34, 34, 34,
  235. 34, 34, 34, 34, 34, 34, 34, 34,
  236. 34, 34, 1, 34, 34, 34, 34, 34,
  237. 34, 34, 34, 34, 34, 34, 34, 34,
  238. 34, 34, 34, 34, 34, 34, 34, 34,
  239. 34, 34, 34, 34, 34, 34, 34, 34,
  240. 34, 34, 34, 34, 34, 34, 34, 34,
  241. 34, 34, 34, 34, 34, 34, 34, 34,
  242. 34, 34, 34, 34, 34, 34, 34, 34,
  243. 34, 34, 34, 34, 34, 34, 34, 34,
  244. 34, 34, 34, 1, 34, 34, 34, 34,
  245. 34, 34, 34, 34, 34, 34, 34, 34,
  246. 34, 34, 34, 34, 34, 34, 34, 34,
  247. 34, 34, 34, 34, 34, 34, 34, 34,
  248. 34, 34, 34, 34, 1, 36, 36, 36,
  249. 36, 36, 36, 36, 36, 36, 36, 36,
  250. 36, 36, 36, 36, 36, 36, 36, 36,
  251. 36, 36, 36, 36, 36, 36, 36, 36,
  252. 36, 36, 36, 36, 36, 36, 36, 36,
  253. 36, 36, 36, 36, 36, 36, 36, 36,
  254. 36, 36, 36, 36, 36, 1, 36, 36,
  255. 36, 36, 36, 36, 36, 36, 36, 36,
  256. 36, 36, 36, 36, 36, 36, 36, 36,
  257. 36, 36, 36, 36, 36, 36, 36, 36,
  258. 36, 36, 36, 36, 36, 36, 36, 36,
  259. 36, 36, 36, 36, 36, 36, 36, 36,
  260. 36, 36, 36, 36, 36, 36, 36, 36,
  261. 36, 36, 36, 36, 36, 36, 36, 36,
  262. 36, 36, 36, 36, 36, 36, 1, 36,
  263. 36, 36, 36, 36, 36, 36, 36, 36,
  264. 36, 36, 36, 36, 36, 36, 36, 1,
  265. 44, 1, 1, 1, 45, 1, 1, 1,
  266. 1, 1, 1, 1, 1, 1, 1, 1,
  267. 1, 1, 1, 1, 1, 1, 1, 44,
  268. 1, 46, 1, 1, 1, 1, 1, 47,
  269. 1, 48, 1, 49, 1, 1, 1, 1,
  270. 1, 1, 1, 1, 1, 1, 1, 1,
  271. 1, 1, 1, 1, 1, 1, 1, 1,
  272. 1, 1, 49, 1, 50, 1, 1, 1,
  273. 51, 1, 1, 1, 1, 1, 1, 1,
  274. 1, 1, 1, 1, 1, 1, 1, 1,
  275. 1, 1, 1, 50, 52, 52, 52, 52,
  276. 52, 52, 52, 53, 1, 52, 52, 52,
  277. 52, 52, 1, 52, 52, 52, 52, 52,
  278. 52, 52, 52, 52, 52, 1, 1, 1,
  279. 1, 1, 1, 1, 52, 52, 52, 52,
  280. 52, 52, 52, 52, 52, 52, 52, 52,
  281. 52, 52, 52, 52, 52, 52, 52, 52,
  282. 52, 52, 52, 52, 52, 52, 1, 1,
  283. 1, 52, 52, 52, 52, 52, 52, 52,
  284. 52, 52, 52, 52, 52, 52, 52, 52,
  285. 52, 52, 52, 52, 52, 52, 52, 52,
  286. 52, 52, 52, 52, 52, 52, 52, 52,
  287. 52, 52, 1, 54, 54, 54, 54, 54,
  288. 54, 54, 54, 54, 1, 54, 54, 55,
  289. 54, 54, 54, 54, 54, 54, 54, 54,
  290. 54, 54, 54, 54, 54, 54, 54, 54,
  291. 54, 54, 54, 54, 54, 54, 54, 54,
  292. 54, 54, 56, 57, 54, 54, 54, 54,
  293. 54, 54, 54, 54, 54, 54, 54, 54,
  294. 54, 54, 54, 54, 54, 54, 54, 54,
  295. 54, 54, 54, 54, 54, 54, 54, 54,
  296. 54, 54, 54, 54, 54, 54, 54, 54,
  297. 54, 54, 54, 54, 54, 54, 54, 54,
  298. 54, 54, 54, 54, 54, 54, 58, 54,
  299. 54, 54, 54, 54, 54, 54, 54, 54,
  300. 54, 54, 54, 54, 54, 54, 54, 54,
  301. 54, 54, 54, 54, 54, 54, 54, 54,
  302. 54, 54, 54, 54, 54, 54, 54, 54,
  303. 54, 54, 1, 1, 1, 1, 1, 1,
  304. 1, 1, 1, 1, 1, 1, 1, 1,
  305. 1, 1, 1, 1, 1, 1, 1, 1,
  306. 1, 1, 1, 1, 1, 1, 1, 1,
  307. 1, 1, 1, 1, 1, 1, 1, 1,
  308. 1, 1, 1, 1, 1, 1, 1, 1,
  309. 1, 1, 1, 1, 1, 1, 1, 1,
  310. 1, 1, 1, 1, 1, 1, 1, 1,
  311. 1, 1, 1, 1, 59, 59, 59, 59,
  312. 59, 59, 59, 59, 59, 59, 59, 59,
  313. 59, 59, 59, 59, 59, 59, 59, 59,
  314. 59, 59, 59, 59, 59, 59, 59, 59,
  315. 59, 59, 60, 61, 61, 61, 61, 61,
  316. 61, 61, 61, 61, 61, 61, 61, 62,
  317. 61, 61, 63, 64, 64, 64, 65, 1,
  318. 66, 66, 66, 66, 66, 66, 66, 66,
  319. 66, 1, 66, 66, 67, 66, 66, 66,
  320. 66, 66, 66, 66, 66, 66, 66, 66,
  321. 66, 66, 66, 66, 66, 66, 66, 66,
  322. 66, 66, 66, 66, 66, 66, 66, 68,
  323. 69, 66, 66, 66, 66, 66, 66, 66,
  324. 66, 66, 66, 66, 66, 66, 66, 66,
  325. 66, 66, 66, 66, 66, 66, 66, 66,
  326. 66, 66, 66, 66, 66, 66, 66, 66,
  327. 66, 66, 66, 66, 66, 66, 66, 66,
  328. 66, 66, 66, 66, 66, 66, 66, 66,
  329. 66, 66, 66, 70, 66, 66, 66, 66,
  330. 66, 66, 66, 66, 66, 66, 66, 66,
  331. 66, 66, 66, 66, 66, 66, 66, 66,
  332. 66, 66, 66, 66, 66, 66, 66, 66,
  333. 66, 66, 66, 66, 66, 66, 66, 1,
  334. 1, 1, 1, 1, 1, 1, 1, 1,
  335. 1, 1, 1, 1, 1, 1, 1, 1,
  336. 1, 1, 1, 1, 1, 1, 1, 1,
  337. 1, 1, 1, 1, 1, 1, 1, 1,
  338. 1, 1, 1, 1, 1, 1, 1, 1,
  339. 1, 1, 1, 1, 1, 1, 1, 1,
  340. 1, 1, 1, 1, 1, 1, 1, 1,
  341. 1, 1, 1, 1, 1, 1, 1, 1,
  342. 1, 71, 71, 71, 71, 71, 71, 71,
  343. 71, 71, 71, 71, 71, 71, 71, 71,
  344. 71, 71, 71, 71, 71, 71, 71, 71,
  345. 71, 71, 71, 71, 71, 71, 71, 72,
  346. 73, 73, 73, 73, 73, 73, 73, 73,
  347. 73, 73, 73, 73, 74, 73, 73, 75,
  348. 76, 76, 76, 77, 1, 78, 1, 66,
  349. 1, 1, 1, 1, 1, 1, 1, 1,
  350. 1, 1, 1, 1, 1, 1, 1, 1,
  351. 1, 1, 1, 1, 1, 1, 66, 1,
  352. 66, 66, 66, 66, 66, 66, 66, 66,
  353. 66, 66, 66, 66, 66, 66, 66, 66,
  354. 66, 66, 66, 66, 66, 66, 66, 66,
  355. 66, 66, 66, 66, 66, 66, 66, 66,
  356. 66, 66, 66, 66, 66, 66, 66, 66,
  357. 66, 66, 66, 66, 66, 66, 66, 66,
  358. 66, 66, 66, 66, 66, 66, 66, 66,
  359. 66, 66, 66, 66, 66, 66, 66, 66,
  360. 66, 66, 66, 66, 66, 66, 66, 66,
  361. 66, 66, 66, 66, 66, 66, 66, 66,
  362. 66, 66, 66, 66, 66, 66, 66, 66,
  363. 66, 66, 66, 66, 66, 66, 66, 66,
  364. 66, 66, 66, 66, 66, 66, 66, 66,
  365. 66, 66, 66, 66, 66, 66, 66, 66,
  366. 66, 66, 66, 66, 66, 66, 66, 66,
  367. 66, 66, 66, 66, 66, 66, 66, 66,
  368. 1, 1, 1, 1, 1, 1, 1, 1,
  369. 1, 1, 1, 1, 1, 1, 1, 1,
  370. 1, 1, 1, 1, 1, 1, 1, 1,
  371. 1, 1, 1, 1, 1, 1, 1, 1,
  372. 1, 1, 1, 1, 1, 1, 1, 1,
  373. 1, 1, 1, 1, 1, 1, 1, 1,
  374. 1, 1, 1, 1, 1, 1, 1, 1,
  375. 1, 1, 1, 1, 1, 1, 1, 1,
  376. 1, 1, 71, 71, 71, 71, 71, 71,
  377. 71, 71, 71, 71, 71, 71, 71, 71,
  378. 71, 71, 71, 71, 71, 71, 71, 71,
  379. 71, 71, 71, 71, 71, 71, 71, 71,
  380. 72, 73, 73, 73, 73, 73, 73, 73,
  381. 73, 73, 73, 73, 73, 74, 73, 73,
  382. 75, 76, 76, 76, 77, 1, 66, 66,
  383. 66, 66, 66, 66, 66, 66, 66, 66,
  384. 66, 66, 66, 66, 66, 66, 66, 66,
  385. 66, 66, 66, 66, 66, 66, 66, 66,
  386. 66, 66, 66, 66, 66, 66, 66, 66,
  387. 66, 66, 66, 66, 66, 66, 66, 66,
  388. 66, 66, 66, 66, 66, 66, 66, 66,
  389. 66, 66, 66, 66, 66, 66, 66, 66,
  390. 66, 66, 66, 66, 66, 66, 1, 71,
  391. 71, 71, 71, 71, 71, 71, 71, 71,
  392. 71, 71, 71, 71, 71, 71, 71, 71,
  393. 71, 71, 71, 71, 71, 71, 71, 71,
  394. 71, 71, 71, 71, 71, 71, 71, 1,
  395. 71, 71, 71, 71, 71, 71, 71, 71,
  396. 71, 71, 71, 71, 71, 71, 71, 71,
  397. 71, 71, 71, 71, 71, 71, 71, 71,
  398. 71, 71, 71, 71, 71, 71, 71, 71,
  399. 71, 71, 71, 71, 71, 71, 71, 71,
  400. 71, 71, 71, 71, 71, 71, 71, 71,
  401. 71, 71, 71, 71, 71, 71, 71, 71,
  402. 71, 71, 71, 71, 71, 71, 71, 71,
  403. 1, 71, 71, 71, 71, 71, 71, 71,
  404. 71, 71, 71, 71, 71, 71, 71, 71,
  405. 71, 71, 71, 71, 71, 71, 71, 71,
  406. 71, 71, 71, 71, 71, 71, 71, 71,
  407. 71, 1, 73, 73, 73, 73, 73, 73,
  408. 73, 73, 73, 73, 73, 73, 73, 73,
  409. 73, 73, 73, 73, 73, 73, 73, 73,
  410. 73, 73, 73, 73, 73, 73, 73, 73,
  411. 73, 73, 73, 73, 73, 73, 73, 73,
  412. 73, 73, 73, 73, 73, 73, 73, 73,
  413. 73, 73, 1, 73, 73, 73, 73, 73,
  414. 73, 73, 73, 73, 73, 73, 73, 73,
  415. 73, 73, 73, 73, 73, 73, 73, 73,
  416. 73, 73, 73, 73, 73, 73, 73, 73,
  417. 73, 73, 73, 73, 73, 73, 73, 73,
  418. 73, 73, 73, 73, 73, 73, 73, 73,
  419. 73, 73, 73, 73, 73, 73, 73, 73,
  420. 73, 73, 73, 73, 73, 73, 73, 73,
  421. 73, 73, 73, 1, 73, 73, 73, 73,
  422. 73, 73, 73, 73, 73, 73, 73, 73,
  423. 73, 73, 73, 73, 1, 79, 79, 79,
  424. 79, 79, 79, 79, 1, 1, 79, 79,
  425. 79, 79, 79, 1, 79, 79, 79, 79,
  426. 79, 79, 79, 79, 79, 79, 1, 80,
  427. 1, 1, 1, 1, 1, 79, 79, 79,
  428. 79, 79, 79, 79, 79, 79, 79, 79,
  429. 79, 79, 79, 79, 79, 79, 79, 79,
  430. 79, 79, 79, 79, 79, 79, 79, 1,
  431. 1, 1, 79, 79, 79, 79, 79, 79,
  432. 79, 79, 79, 79, 79, 79, 79, 79,
  433. 79, 79, 79, 79, 79, 79, 79, 79,
  434. 79, 79, 79, 79, 79, 79, 79, 79,
  435. 79, 79, 79, 1, 81, 1, 1, 1,
  436. 82, 1, 1, 1, 1, 1, 1, 1,
  437. 1, 1, 1, 1, 1, 1, 1, 1,
  438. 1, 1, 1, 81, 1, 1, 1, 1,
  439. 1, 1, 1, 83, 1, 1, 1, 1,
  440. 1, 1, 1, 1, 1, 1, 1, 1,
  441. 1, 1, 1, 1, 1, 1, 84, 1,
  442. 85, 1, 1, 1, 86, 1, 1, 1,
  443. 1, 1, 1, 1, 1, 1, 1, 1,
  444. 1, 1, 1, 1, 1, 1, 1, 85,
  445. 1, 1, 1, 1, 1, 1, 1, 87,
  446. 1, 1, 1, 1, 1, 1, 1, 1,
  447. 1, 1, 1, 1, 1, 1, 1, 1,
  448. 1, 1, 88, 1, 89, 1, 1, 1,
  449. 90, 1, 1, 1, 1, 1, 1, 1,
  450. 1, 1, 1, 1, 1, 1, 1, 1,
  451. 1, 1, 1, 89, 91, 1, 91, 91,
  452. 91, 91, 91, 92, 1, 91, 91, 91,
  453. 91, 91, 1, 91, 91, 91, 91, 91,
  454. 91, 91, 91, 91, 91, 1, 84, 1,
  455. 91, 1, 1, 1, 91, 91, 91, 91,
  456. 91, 91, 91, 91, 91, 91, 91, 91,
  457. 91, 91, 91, 91, 91, 91, 91, 91,
  458. 91, 91, 91, 91, 91, 91, 1, 1,
  459. 1, 91, 91, 91, 91, 91, 91, 91,
  460. 91, 91, 91, 91, 91, 91, 91, 91,
  461. 91, 91, 91, 91, 91, 91, 91, 91,
  462. 91, 91, 91, 91, 91, 91, 91, 91,
  463. 91, 91, 1, 49, 1, 1, 1, 93,
  464. 1, 1, 1, 1, 1, 1, 1, 1,
  465. 1, 1, 1, 1, 1, 1, 1, 1,
  466. 1, 1, 49, 1, 1, 1, 1, 1,
  467. 1, 1, 94, 1, 1, 1, 1, 1,
  468. 1, 1, 1, 1, 1, 1, 1, 1,
  469. 1, 1, 1, 1, 1, 2, 1, 95,
  470. 1, 1, 1, 96, 1, 1, 1, 1,
  471. 1, 1, 1, 1, 1, 1, 1, 1,
  472. 1, 1, 1, 1, 1, 1, 95, 1,
  473. 1, 1, 1, 1, 1, 1, 97, 1,
  474. 1, 1, 1, 1, 1, 1, 1, 1,
  475. 1, 1, 1, 1, 1, 1, 1, 1,
  476. 1, 50, 1, 1, 0,
  477. ]
  478. 1 class << self
  479. 1 attr_accessor :_trans_targs
  480. 1 private :_trans_targs, :_trans_targs=
  481. end
  482. 1 self._trans_targs = [
  483. 40, 0, 2, 3, 5, 27, 4, 5,
  484. 6, 7, 8, 43, 10, 24, 7, 8,
  485. 10, 24, 9, 11, 12, 41, 16, 17,
  486. 18, 19, 20, 21, 22, 23, 11, 12,
  487. 41, 16, 17, 18, 19, 20, 21, 22,
  488. 23, 13, 15, 41, 7, 8, 10, 24,
  489. 26, 44, 2, 3, 5, 27, 29, 30,
  490. 29, 46, 32, 33, 34, 35, 36, 37,
  491. 38, 39, 29, 30, 29, 46, 32, 33,
  492. 34, 35, 36, 37, 38, 39, 31, 40,
  493. 2, 41, 14, 42, 2, 41, 14, 42,
  494. 2, 44, 25, 43, 45, 25, 45, 44,
  495. 25, 45,
  496. ]
  497. 1 class << self
  498. 1 attr_accessor :_trans_actions
  499. 1 private :_trans_actions, :_trans_actions=
  500. end
  501. 1 self._trans_actions = [
  502. 1, 0, 0, 0, 2, 3, 0, 0,
  503. 4, 5, 5, 5, 5, 6, 0, 0,
  504. 0, 3, 0, 7, 7, 8, 7, 7,
  505. 7, 7, 7, 7, 7, 7, 0, 0,
  506. 9, 0, 0, 0, 0, 0, 0, 0,
  507. 0, 0, 0, 0, 10, 10, 10, 11,
  508. 0, 0, 10, 10, 12, 11, 13, 13,
  509. 14, 15, 13, 13, 13, 13, 13, 13,
  510. 13, 13, 0, 0, 3, 16, 0, 0,
  511. 0, 0, 0, 0, 0, 0, 0, 0,
  512. 17, 18, 18, 19, 18, 20, 20, 21,
  513. 20, 18, 18, 0, 22, 0, 3, 10,
  514. 10, 11,
  515. ]
  516. 1 class << self
  517. 1 attr_accessor :_eof_actions
  518. 1 private :_eof_actions, :_eof_actions=
  519. end
  520. 1 self._eof_actions = [
  521. 0, 0, 0, 0, 0, 0, 0, 0,
  522. 0, 0, 0, 0, 0, 0, 0, 0,
  523. 0, 0, 0, 0, 0, 0, 0, 0,
  524. 0, 0, 0, 0, 0, 0, 0, 0,
  525. 0, 0, 0, 0, 0, 0, 0, 0,
  526. 17, 18, 20, 18, 0, 10, 0,
  527. ]
  528. 1 class << self
  529. 1 attr_accessor :start
  530. end
  531. 1 self.start = 1
  532. 1 class << self
  533. 1 attr_accessor :first_final
  534. end
  535. 1 self.first_final = 40
  536. 1 class << self
  537. 1 attr_accessor :error
  538. end
  539. 1 self.error = 0
  540. 1 class << self
  541. 1 attr_accessor :en_comment_tail
  542. end
  543. 1 self.en_comment_tail = 28
  544. 1 class << self
  545. 1 attr_accessor :en_main
  546. end
  547. 1 self.en_main = 1
  548. 1 def self.parse(data)
  549. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  550. content_disposition = ContentDispositionStruct.new("", [])
  551. return content_disposition if Mail::Utilities.blank?(data)
  552. # Parser state
  553. disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil
  554. # 5.1 Variables Used by Ragel
  555. p = 0
  556. eof = pe = data.length
  557. stack = []
  558. begin
  559. p ||= 0
  560. pe ||= data.length
  561. cs = start
  562. top = 0
  563. end
  564. begin
  565. testEof = false
  566. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  567. _goto_level = 0
  568. _resume = 10
  569. _eof_trans = 15
  570. _again = 20
  571. _test_eof = 30
  572. _out = 40
  573. while true
  574. if _goto_level <= 0
  575. if p == pe
  576. _goto_level = _test_eof
  577. next
  578. end
  579. if cs == 0
  580. _goto_level = _out
  581. next
  582. end
  583. end
  584. if _goto_level <= _resume
  585. _keys = cs << 1
  586. _inds = _index_offsets[cs]
  587. _slen = _key_spans[cs]
  588. _wide = data[p].ord
  589. _trans = if (_slen > 0 &&
  590. _trans_keys[_keys] <= _wide &&
  591. _wide <= _trans_keys[_keys + 1])
  592. _indicies[_inds + _wide - _trans_keys[_keys]]
  593. else
  594. _indicies[_inds + _slen]
  595. end
  596. cs = _trans_targs[_trans]
  597. if _trans_actions[_trans] != 0
  598. case _trans_actions[_trans]
  599. when 1
  600. begin
  601. disp_type_s = p
  602. end
  603. when 17
  604. begin
  605. content_disposition.disposition_type = chars(data, disp_type_s, p - 1).downcase
  606. end
  607. when 2
  608. begin
  609. param_attr_s = p
  610. end
  611. when 4
  612. begin
  613. param_attr = chars(data, param_attr_s, p - 1)
  614. end
  615. when 7
  616. begin
  617. qstr_s = p
  618. end
  619. when 9
  620. begin
  621. qstr = chars(data, qstr_s, p - 1)
  622. end
  623. when 5
  624. begin
  625. param_val_s = p
  626. end
  627. when 18
  628. begin
  629. if param_attr.nil?
  630. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  631. end
  632. # Use quoted string value if one exists, otherwise use parameter value
  633. value = qstr || chars(data, param_val_s, p - 1)
  634. content_disposition.parameters << {param_attr => value}
  635. param_attr = nil
  636. qstr = nil
  637. end
  638. when 10
  639. begin
  640. end
  641. when 13
  642. begin
  643. end
  644. when 3
  645. begin
  646. begin
  647. stack[top] = cs
  648. top += 1
  649. cs = 28
  650. _goto_level = _again
  651. next
  652. end
  653. end
  654. when 16
  655. begin
  656. begin
  657. top -= 1
  658. cs = stack[top]
  659. _goto_level = _again
  660. next
  661. end
  662. end
  663. when 8
  664. begin
  665. qstr_s = p
  666. end
  667. begin
  668. qstr = chars(data, qstr_s, p - 1)
  669. end
  670. when 6
  671. begin
  672. param_val_s = p
  673. end
  674. begin
  675. begin
  676. stack[top] = cs
  677. top += 1
  678. cs = 28
  679. _goto_level = _again
  680. next
  681. end
  682. end
  683. when 22
  684. begin
  685. if param_attr.nil?
  686. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  687. end
  688. # Use quoted string value if one exists, otherwise use parameter value
  689. value = qstr || chars(data, param_val_s, p - 1)
  690. content_disposition.parameters << {param_attr => value}
  691. param_attr = nil
  692. qstr = nil
  693. end
  694. begin
  695. begin
  696. stack[top] = cs
  697. top += 1
  698. cs = 28
  699. _goto_level = _again
  700. next
  701. end
  702. end
  703. when 12
  704. begin
  705. end
  706. begin
  707. param_attr_s = p
  708. end
  709. when 20
  710. begin
  711. end
  712. begin
  713. if param_attr.nil?
  714. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  715. end
  716. # Use quoted string value if one exists, otherwise use parameter value
  717. value = qstr || chars(data, param_val_s, p - 1)
  718. content_disposition.parameters << {param_attr => value}
  719. param_attr = nil
  720. qstr = nil
  721. end
  722. when 11
  723. begin
  724. end
  725. begin
  726. begin
  727. stack[top] = cs
  728. top += 1
  729. cs = 28
  730. _goto_level = _again
  731. next
  732. end
  733. end
  734. when 14
  735. begin
  736. end
  737. begin
  738. begin
  739. stack[top] = cs
  740. top += 1
  741. cs = 28
  742. _goto_level = _again
  743. next
  744. end
  745. end
  746. when 15
  747. begin
  748. end
  749. begin
  750. begin
  751. top -= 1
  752. cs = stack[top]
  753. _goto_level = _again
  754. next
  755. end
  756. end
  757. when 19
  758. begin
  759. begin
  760. stack[top] = cs
  761. top += 1
  762. cs = 28
  763. _goto_level = _again
  764. next
  765. end
  766. end
  767. begin
  768. if param_attr.nil?
  769. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  770. end
  771. # Use quoted string value if one exists, otherwise use parameter value
  772. value = qstr || chars(data, param_val_s, p - 1)
  773. content_disposition.parameters << {param_attr => value}
  774. param_attr = nil
  775. qstr = nil
  776. end
  777. when 21
  778. begin
  779. end
  780. begin
  781. begin
  782. stack[top] = cs
  783. top += 1
  784. cs = 28
  785. _goto_level = _again
  786. next
  787. end
  788. end
  789. begin
  790. if param_attr.nil?
  791. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  792. end
  793. # Use quoted string value if one exists, otherwise use parameter value
  794. value = qstr || chars(data, param_val_s, p - 1)
  795. content_disposition.parameters << {param_attr => value}
  796. param_attr = nil
  797. qstr = nil
  798. end
  799. end
  800. end
  801. end
  802. if _goto_level <= _again
  803. if cs == 0
  804. _goto_level = _out
  805. next
  806. end
  807. p += 1
  808. if p != pe
  809. _goto_level = _resume
  810. next
  811. end
  812. end
  813. if _goto_level <= _test_eof
  814. if p == eof
  815. case _eof_actions[cs]
  816. when 17
  817. begin
  818. content_disposition.disposition_type = chars(data, disp_type_s, p - 1).downcase
  819. end
  820. when 18
  821. begin
  822. if param_attr.nil?
  823. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  824. end
  825. # Use quoted string value if one exists, otherwise use parameter value
  826. value = qstr || chars(data, param_val_s, p - 1)
  827. content_disposition.parameters << {param_attr => value}
  828. param_attr = nil
  829. qstr = nil
  830. end
  831. when 10
  832. begin
  833. end
  834. when 20
  835. begin
  836. end
  837. begin
  838. if param_attr.nil?
  839. raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "no attribute for value")
  840. end
  841. # Use quoted string value if one exists, otherwise use parameter value
  842. value = qstr || chars(data, param_val_s, p - 1)
  843. content_disposition.parameters << {param_attr => value}
  844. param_attr = nil
  845. qstr = nil
  846. end
  847. end
  848. end
  849. end
  850. if _goto_level <= _out
  851. break
  852. end
  853. end
  854. end
  855. if p != eof || cs < 40
  856. raise Mail::Field::IncompleteParseError.new(Mail::ContentDispositionElement, data, p)
  857. end
  858. content_disposition
  859. end
  860. end
  861. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_location_parser.rb

25.64% lines covered

195 relevant lines. 50 lines covered and 145 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module ContentLocationParser
  6. 1 extend Mail::ParserTools
  7. 1 ContentLocationStruct = Struct.new(:location, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 126, 10, 10,
  14. 9, 32, 10, 10, 9,
  15. 32, 1, 244, 10, 10,
  16. 9, 32, 0, 244, 128, 191,
  17. 160, 191, 128, 191, 128,
  18. 159, 144, 191, 128, 191,
  19. 128, 143, 10, 10, 9, 32,
  20. 9, 126, 1, 244, 1,
  21. 244, 10, 10, 9, 32,
  22. 0, 244, 128, 191, 160, 191,
  23. 128, 191, 128, 159, 144,
  24. 191, 128, 191, 128, 143,
  25. 9, 126, 9, 40, 9, 40,
  26. 1, 244, 1, 244, 1,
  27. 244, 1, 244, 9, 126,
  28. 0, 0, 0,
  29. ]
  30. 1 class << self
  31. 1 attr_accessor :_key_spans
  32. 1 private :_key_spans, :_key_spans=
  33. end
  34. 1 self._key_spans = [
  35. 0, 118, 1, 24, 1, 24, 244, 1,
  36. 24, 245, 64, 32, 64, 32, 48, 64,
  37. 16, 1, 24, 118, 244, 244, 1, 24,
  38. 245, 64, 32, 64, 32, 48, 64, 16,
  39. 118, 32, 32, 244, 244, 244, 244, 118,
  40. 0,
  41. ]
  42. 1 class << self
  43. 1 attr_accessor :_index_offsets
  44. 1 private :_index_offsets, :_index_offsets=
  45. end
  46. 1 self._index_offsets = [
  47. 0, 0, 119, 121, 146, 148, 173, 418,
  48. 420, 445, 691, 756, 789, 854, 887, 936,
  49. 1001, 1018, 1020, 1045, 1164, 1409, 1654, 1656,
  50. 1681, 1927, 1992, 2025, 2090, 2123, 2172, 2237,
  51. 2254, 2373, 2406, 2439, 2684, 2929, 3174, 3419,
  52. 3538,
  53. ]
  54. 1 class << self
  55. 1 attr_accessor :_indicies
  56. 1 private :_indicies, :_indicies=
  57. end
  58. 1 self._indicies = [
  59. 0, 1, 1, 1, 2, 1, 1, 1,
  60. 1, 1, 1, 1, 1, 1, 1, 1,
  61. 1, 1, 1, 1, 1, 1, 1, 0,
  62. 3, 4, 3, 3, 3, 3, 3, 5,
  63. 1, 3, 3, 3, 3, 3, 1, 3,
  64. 3, 3, 3, 3, 3, 3, 3, 3,
  65. 3, 1, 1, 1, 3, 1, 1, 1,
  66. 3, 3, 3, 3, 3, 3, 3, 3,
  67. 3, 3, 3, 3, 3, 3, 3, 3,
  68. 3, 3, 3, 3, 3, 3, 3, 3,
  69. 3, 3, 1, 1, 1, 3, 3, 3,
  70. 3, 3, 3, 3, 3, 3, 3, 3,
  71. 3, 3, 3, 3, 3, 3, 3, 3,
  72. 3, 3, 3, 3, 3, 3, 3, 3,
  73. 3, 3, 3, 3, 3, 3, 1, 6,
  74. 1, 0, 1, 1, 1, 1, 1, 1,
  75. 1, 1, 1, 1, 1, 1, 1, 1,
  76. 1, 1, 1, 1, 1, 1, 1, 1,
  77. 0, 1, 7, 1, 8, 1, 1, 1,
  78. 1, 1, 1, 1, 1, 1, 1, 1,
  79. 1, 1, 1, 1, 1, 1, 1, 1,
  80. 1, 1, 1, 8, 1, 9, 9, 9,
  81. 9, 9, 9, 9, 9, 9, 1, 9,
  82. 9, 10, 9, 9, 9, 9, 9, 9,
  83. 9, 9, 9, 9, 9, 9, 9, 9,
  84. 9, 9, 9, 9, 9, 9, 11, 9,
  85. 9, 9, 9, 9, 9, 9, 9, 9,
  86. 9, 9, 9, 9, 9, 9, 9, 9,
  87. 9, 9, 9, 9, 9, 9, 9, 9,
  88. 9, 9, 9, 9, 9, 9, 9, 9,
  89. 9, 9, 9, 9, 9, 9, 9, 9,
  90. 9, 9, 9, 9, 9, 9, 9, 9,
  91. 9, 9, 9, 9, 9, 9, 9, 9,
  92. 12, 9, 9, 9, 9, 9, 9, 9,
  93. 9, 9, 9, 9, 9, 9, 9, 9,
  94. 9, 9, 9, 9, 9, 9, 9, 9,
  95. 9, 9, 9, 9, 9, 9, 9, 9,
  96. 9, 9, 9, 9, 1, 1, 1, 1,
  97. 1, 1, 1, 1, 1, 1, 1, 1,
  98. 1, 1, 1, 1, 1, 1, 1, 1,
  99. 1, 1, 1, 1, 1, 1, 1, 1,
  100. 1, 1, 1, 1, 1, 1, 1, 1,
  101. 1, 1, 1, 1, 1, 1, 1, 1,
  102. 1, 1, 1, 1, 1, 1, 1, 1,
  103. 1, 1, 1, 1, 1, 1, 1, 1,
  104. 1, 1, 1, 1, 1, 1, 13, 13,
  105. 13, 13, 13, 13, 13, 13, 13, 13,
  106. 13, 13, 13, 13, 13, 13, 13, 13,
  107. 13, 13, 13, 13, 13, 13, 13, 13,
  108. 13, 13, 13, 13, 14, 15, 15, 15,
  109. 15, 15, 15, 15, 15, 15, 15, 15,
  110. 15, 16, 15, 15, 17, 18, 18, 18,
  111. 19, 1, 20, 1, 9, 1, 1, 1,
  112. 1, 1, 1, 1, 1, 1, 1, 1,
  113. 1, 1, 1, 1, 1, 1, 1, 1,
  114. 1, 1, 1, 9, 1, 9, 9, 9,
  115. 9, 9, 9, 9, 9, 9, 9, 9,
  116. 9, 9, 9, 9, 9, 9, 9, 9,
  117. 9, 9, 9, 9, 9, 9, 9, 9,
  118. 9, 9, 9, 9, 9, 9, 9, 9,
  119. 9, 9, 9, 9, 9, 9, 9, 9,
  120. 9, 9, 9, 9, 9, 9, 9, 9,
  121. 9, 9, 9, 9, 9, 9, 9, 9,
  122. 9, 9, 9, 9, 9, 9, 9, 9,
  123. 9, 9, 9, 9, 9, 9, 9, 9,
  124. 9, 9, 9, 9, 9, 9, 9, 9,
  125. 9, 9, 9, 9, 9, 9, 9, 9,
  126. 9, 9, 9, 9, 9, 9, 9, 9,
  127. 9, 9, 9, 9, 9, 9, 9, 9,
  128. 9, 9, 9, 9, 9, 9, 9, 9,
  129. 9, 9, 9, 9, 9, 9, 9, 9,
  130. 9, 9, 9, 9, 9, 1, 1, 1,
  131. 1, 1, 1, 1, 1, 1, 1, 1,
  132. 1, 1, 1, 1, 1, 1, 1, 1,
  133. 1, 1, 1, 1, 1, 1, 1, 1,
  134. 1, 1, 1, 1, 1, 1, 1, 1,
  135. 1, 1, 1, 1, 1, 1, 1, 1,
  136. 1, 1, 1, 1, 1, 1, 1, 1,
  137. 1, 1, 1, 1, 1, 1, 1, 1,
  138. 1, 1, 1, 1, 1, 1, 1, 13,
  139. 13, 13, 13, 13, 13, 13, 13, 13,
  140. 13, 13, 13, 13, 13, 13, 13, 13,
  141. 13, 13, 13, 13, 13, 13, 13, 13,
  142. 13, 13, 13, 13, 13, 14, 15, 15,
  143. 15, 15, 15, 15, 15, 15, 15, 15,
  144. 15, 15, 16, 15, 15, 17, 18, 18,
  145. 18, 19, 1, 9, 9, 9, 9, 9,
  146. 9, 9, 9, 9, 9, 9, 9, 9,
  147. 9, 9, 9, 9, 9, 9, 9, 9,
  148. 9, 9, 9, 9, 9, 9, 9, 9,
  149. 9, 9, 9, 9, 9, 9, 9, 9,
  150. 9, 9, 9, 9, 9, 9, 9, 9,
  151. 9, 9, 9, 9, 9, 9, 9, 9,
  152. 9, 9, 9, 9, 9, 9, 9, 9,
  153. 9, 9, 9, 1, 13, 13, 13, 13,
  154. 13, 13, 13, 13, 13, 13, 13, 13,
  155. 13, 13, 13, 13, 13, 13, 13, 13,
  156. 13, 13, 13, 13, 13, 13, 13, 13,
  157. 13, 13, 13, 13, 1, 13, 13, 13,
  158. 13, 13, 13, 13, 13, 13, 13, 13,
  159. 13, 13, 13, 13, 13, 13, 13, 13,
  160. 13, 13, 13, 13, 13, 13, 13, 13,
  161. 13, 13, 13, 13, 13, 13, 13, 13,
  162. 13, 13, 13, 13, 13, 13, 13, 13,
  163. 13, 13, 13, 13, 13, 13, 13, 13,
  164. 13, 13, 13, 13, 13, 13, 13, 13,
  165. 13, 13, 13, 13, 13, 1, 13, 13,
  166. 13, 13, 13, 13, 13, 13, 13, 13,
  167. 13, 13, 13, 13, 13, 13, 13, 13,
  168. 13, 13, 13, 13, 13, 13, 13, 13,
  169. 13, 13, 13, 13, 13, 13, 1, 15,
  170. 15, 15, 15, 15, 15, 15, 15, 15,
  171. 15, 15, 15, 15, 15, 15, 15, 15,
  172. 15, 15, 15, 15, 15, 15, 15, 15,
  173. 15, 15, 15, 15, 15, 15, 15, 15,
  174. 15, 15, 15, 15, 15, 15, 15, 15,
  175. 15, 15, 15, 15, 15, 15, 15, 1,
  176. 15, 15, 15, 15, 15, 15, 15, 15,
  177. 15, 15, 15, 15, 15, 15, 15, 15,
  178. 15, 15, 15, 15, 15, 15, 15, 15,
  179. 15, 15, 15, 15, 15, 15, 15, 15,
  180. 15, 15, 15, 15, 15, 15, 15, 15,
  181. 15, 15, 15, 15, 15, 15, 15, 15,
  182. 15, 15, 15, 15, 15, 15, 15, 15,
  183. 15, 15, 15, 15, 15, 15, 15, 15,
  184. 1, 15, 15, 15, 15, 15, 15, 15,
  185. 15, 15, 15, 15, 15, 15, 15, 15,
  186. 15, 1, 21, 1, 22, 1, 1, 1,
  187. 1, 1, 1, 1, 1, 1, 1, 1,
  188. 1, 1, 1, 1, 1, 1, 1, 1,
  189. 1, 1, 1, 22, 1, 23, 1, 1,
  190. 1, 24, 1, 1, 1, 1, 1, 1,
  191. 1, 1, 1, 1, 1, 1, 1, 1,
  192. 1, 1, 1, 1, 23, 25, 26, 25,
  193. 25, 25, 25, 25, 27, 1, 25, 25,
  194. 25, 25, 25, 1, 25, 25, 25, 25,
  195. 25, 25, 25, 25, 25, 25, 1, 1,
  196. 1, 25, 1, 1, 1, 25, 25, 25,
  197. 25, 25, 25, 25, 25, 25, 25, 25,
  198. 25, 25, 25, 25, 25, 25, 25, 25,
  199. 25, 25, 25, 25, 25, 25, 25, 1,
  200. 1, 1, 25, 25, 25, 25, 25, 25,
  201. 25, 25, 25, 25, 25, 25, 25, 25,
  202. 25, 25, 25, 25, 25, 25, 25, 25,
  203. 25, 25, 25, 25, 25, 25, 25, 25,
  204. 25, 25, 25, 1, 28, 28, 28, 28,
  205. 28, 28, 28, 28, 28, 1, 28, 28,
  206. 29, 28, 28, 28, 28, 28, 28, 28,
  207. 28, 28, 28, 28, 28, 28, 28, 28,
  208. 28, 28, 28, 28, 28, 28, 28, 28,
  209. 28, 28, 28, 30, 31, 28, 28, 28,
  210. 28, 28, 28, 28, 28, 28, 28, 28,
  211. 28, 28, 28, 28, 28, 28, 28, 28,
  212. 28, 28, 28, 28, 28, 28, 28, 28,
  213. 28, 28, 28, 28, 28, 28, 28, 28,
  214. 28, 28, 28, 28, 28, 28, 28, 28,
  215. 28, 28, 28, 28, 28, 28, 28, 32,
  216. 28, 28, 28, 28, 28, 28, 28, 28,
  217. 28, 28, 28, 28, 28, 28, 28, 28,
  218. 28, 28, 28, 28, 28, 28, 28, 28,
  219. 28, 28, 28, 28, 28, 28, 28, 28,
  220. 28, 28, 28, 1, 1, 1, 1, 1,
  221. 1, 1, 1, 1, 1, 1, 1, 1,
  222. 1, 1, 1, 1, 1, 1, 1, 1,
  223. 1, 1, 1, 1, 1, 1, 1, 1,
  224. 1, 1, 1, 1, 1, 1, 1, 1,
  225. 1, 1, 1, 1, 1, 1, 1, 1,
  226. 1, 1, 1, 1, 1, 1, 1, 1,
  227. 1, 1, 1, 1, 1, 1, 1, 1,
  228. 1, 1, 1, 1, 1, 33, 33, 33,
  229. 33, 33, 33, 33, 33, 33, 33, 33,
  230. 33, 33, 33, 33, 33, 33, 33, 33,
  231. 33, 33, 33, 33, 33, 33, 33, 33,
  232. 33, 33, 33, 34, 35, 35, 35, 35,
  233. 35, 35, 35, 35, 35, 35, 35, 35,
  234. 36, 35, 35, 37, 38, 38, 38, 39,
  235. 1, 40, 40, 40, 40, 40, 40, 40,
  236. 40, 40, 1, 40, 40, 41, 40, 40,
  237. 40, 40, 40, 40, 40, 40, 40, 40,
  238. 40, 40, 40, 40, 40, 40, 40, 40,
  239. 40, 40, 40, 40, 40, 40, 40, 40,
  240. 42, 43, 40, 40, 40, 40, 40, 40,
  241. 40, 40, 40, 40, 40, 40, 40, 40,
  242. 40, 40, 40, 40, 40, 40, 40, 40,
  243. 40, 40, 40, 40, 40, 40, 40, 40,
  244. 40, 40, 40, 40, 40, 40, 40, 40,
  245. 40, 40, 40, 40, 40, 40, 40, 40,
  246. 40, 40, 40, 40, 44, 40, 40, 40,
  247. 40, 40, 40, 40, 40, 40, 40, 40,
  248. 40, 40, 40, 40, 40, 40, 40, 40,
  249. 40, 40, 40, 40, 40, 40, 40, 40,
  250. 40, 40, 40, 40, 40, 40, 40, 40,
  251. 1, 1, 1, 1, 1, 1, 1, 1,
  252. 1, 1, 1, 1, 1, 1, 1, 1,
  253. 1, 1, 1, 1, 1, 1, 1, 1,
  254. 1, 1, 1, 1, 1, 1, 1, 1,
  255. 1, 1, 1, 1, 1, 1, 1, 1,
  256. 1, 1, 1, 1, 1, 1, 1, 1,
  257. 1, 1, 1, 1, 1, 1, 1, 1,
  258. 1, 1, 1, 1, 1, 1, 1, 1,
  259. 1, 1, 45, 45, 45, 45, 45, 45,
  260. 45, 45, 45, 45, 45, 45, 45, 45,
  261. 45, 45, 45, 45, 45, 45, 45, 45,
  262. 45, 45, 45, 45, 45, 45, 45, 45,
  263. 46, 47, 47, 47, 47, 47, 47, 47,
  264. 47, 47, 47, 47, 47, 48, 47, 47,
  265. 49, 50, 50, 50, 51, 1, 52, 1,
  266. 40, 1, 1, 1, 1, 1, 1, 1,
  267. 1, 1, 1, 1, 1, 1, 1, 1,
  268. 1, 1, 1, 1, 1, 1, 1, 40,
  269. 1, 40, 40, 40, 40, 40, 40, 40,
  270. 40, 40, 40, 40, 40, 40, 40, 40,
  271. 40, 40, 40, 40, 40, 40, 40, 40,
  272. 40, 40, 40, 40, 40, 40, 40, 40,
  273. 40, 40, 40, 40, 40, 40, 40, 40,
  274. 40, 40, 40, 40, 40, 40, 40, 40,
  275. 40, 40, 40, 40, 40, 40, 40, 40,
  276. 40, 40, 40, 40, 40, 40, 40, 40,
  277. 40, 40, 40, 40, 40, 40, 40, 40,
  278. 40, 40, 40, 40, 40, 40, 40, 40,
  279. 40, 40, 40, 40, 40, 40, 40, 40,
  280. 40, 40, 40, 40, 40, 40, 40, 40,
  281. 40, 40, 40, 40, 40, 40, 40, 40,
  282. 40, 40, 40, 40, 40, 40, 40, 40,
  283. 40, 40, 40, 40, 40, 40, 40, 40,
  284. 40, 40, 40, 40, 40, 40, 40, 40,
  285. 40, 1, 1, 1, 1, 1, 1, 1,
  286. 1, 1, 1, 1, 1, 1, 1, 1,
  287. 1, 1, 1, 1, 1, 1, 1, 1,
  288. 1, 1, 1, 1, 1, 1, 1, 1,
  289. 1, 1, 1, 1, 1, 1, 1, 1,
  290. 1, 1, 1, 1, 1, 1, 1, 1,
  291. 1, 1, 1, 1, 1, 1, 1, 1,
  292. 1, 1, 1, 1, 1, 1, 1, 1,
  293. 1, 1, 1, 45, 45, 45, 45, 45,
  294. 45, 45, 45, 45, 45, 45, 45, 45,
  295. 45, 45, 45, 45, 45, 45, 45, 45,
  296. 45, 45, 45, 45, 45, 45, 45, 45,
  297. 45, 46, 47, 47, 47, 47, 47, 47,
  298. 47, 47, 47, 47, 47, 47, 48, 47,
  299. 47, 49, 50, 50, 50, 51, 1, 40,
  300. 40, 40, 40, 40, 40, 40, 40, 40,
  301. 40, 40, 40, 40, 40, 40, 40, 40,
  302. 40, 40, 40, 40, 40, 40, 40, 40,
  303. 40, 40, 40, 40, 40, 40, 40, 40,
  304. 40, 40, 40, 40, 40, 40, 40, 40,
  305. 40, 40, 40, 40, 40, 40, 40, 40,
  306. 40, 40, 40, 40, 40, 40, 40, 40,
  307. 40, 40, 40, 40, 40, 40, 40, 1,
  308. 45, 45, 45, 45, 45, 45, 45, 45,
  309. 45, 45, 45, 45, 45, 45, 45, 45,
  310. 45, 45, 45, 45, 45, 45, 45, 45,
  311. 45, 45, 45, 45, 45, 45, 45, 45,
  312. 1, 45, 45, 45, 45, 45, 45, 45,
  313. 45, 45, 45, 45, 45, 45, 45, 45,
  314. 45, 45, 45, 45, 45, 45, 45, 45,
  315. 45, 45, 45, 45, 45, 45, 45, 45,
  316. 45, 45, 45, 45, 45, 45, 45, 45,
  317. 45, 45, 45, 45, 45, 45, 45, 45,
  318. 45, 45, 45, 45, 45, 45, 45, 45,
  319. 45, 45, 45, 45, 45, 45, 45, 45,
  320. 45, 1, 45, 45, 45, 45, 45, 45,
  321. 45, 45, 45, 45, 45, 45, 45, 45,
  322. 45, 45, 45, 45, 45, 45, 45, 45,
  323. 45, 45, 45, 45, 45, 45, 45, 45,
  324. 45, 45, 1, 47, 47, 47, 47, 47,
  325. 47, 47, 47, 47, 47, 47, 47, 47,
  326. 47, 47, 47, 47, 47, 47, 47, 47,
  327. 47, 47, 47, 47, 47, 47, 47, 47,
  328. 47, 47, 47, 47, 47, 47, 47, 47,
  329. 47, 47, 47, 47, 47, 47, 47, 47,
  330. 47, 47, 47, 1, 47, 47, 47, 47,
  331. 47, 47, 47, 47, 47, 47, 47, 47,
  332. 47, 47, 47, 47, 47, 47, 47, 47,
  333. 47, 47, 47, 47, 47, 47, 47, 47,
  334. 47, 47, 47, 47, 47, 47, 47, 47,
  335. 47, 47, 47, 47, 47, 47, 47, 47,
  336. 47, 47, 47, 47, 47, 47, 47, 47,
  337. 47, 47, 47, 47, 47, 47, 47, 47,
  338. 47, 47, 47, 47, 1, 47, 47, 47,
  339. 47, 47, 47, 47, 47, 47, 47, 47,
  340. 47, 47, 47, 47, 47, 1, 53, 1,
  341. 1, 1, 54, 1, 1, 1, 1, 1,
  342. 1, 1, 1, 1, 1, 1, 1, 1,
  343. 1, 1, 1, 1, 1, 53, 55, 55,
  344. 55, 55, 55, 55, 55, 56, 1, 55,
  345. 55, 55, 55, 55, 1, 55, 55, 55,
  346. 55, 55, 55, 55, 55, 55, 55, 1,
  347. 1, 1, 55, 1, 1, 1, 55, 55,
  348. 55, 55, 55, 55, 55, 55, 55, 55,
  349. 55, 55, 55, 55, 55, 55, 55, 55,
  350. 55, 55, 55, 55, 55, 55, 55, 55,
  351. 1, 1, 1, 55, 55, 55, 55, 55,
  352. 55, 55, 55, 55, 55, 55, 55, 55,
  353. 55, 55, 55, 55, 55, 55, 55, 55,
  354. 55, 55, 55, 55, 55, 55, 55, 55,
  355. 55, 55, 55, 55, 1, 8, 1, 1,
  356. 1, 57, 1, 1, 1, 1, 1, 1,
  357. 1, 1, 1, 1, 1, 1, 1, 1,
  358. 1, 1, 1, 1, 8, 1, 1, 1,
  359. 1, 1, 1, 1, 58, 1, 59, 1,
  360. 1, 1, 60, 1, 1, 1, 1, 1,
  361. 1, 1, 1, 1, 1, 1, 1, 1,
  362. 1, 1, 1, 1, 1, 59, 1, 1,
  363. 1, 1, 1, 1, 1, 61, 1, 62,
  364. 62, 62, 62, 62, 62, 62, 62, 63,
  365. 1, 62, 62, 64, 62, 62, 62, 62,
  366. 62, 62, 62, 62, 62, 62, 62, 62,
  367. 62, 62, 62, 62, 62, 62, 63, 65,
  368. 66, 65, 65, 65, 65, 65, 67, 62,
  369. 65, 65, 65, 65, 65, 62, 65, 65,
  370. 65, 65, 65, 65, 65, 65, 65, 65,
  371. 62, 62, 62, 65, 62, 62, 62, 65,
  372. 65, 65, 65, 65, 65, 65, 65, 65,
  373. 65, 65, 65, 65, 65, 65, 65, 65,
  374. 65, 65, 65, 65, 65, 65, 65, 65,
  375. 65, 62, 68, 62, 65, 65, 65, 65,
  376. 65, 65, 65, 65, 65, 65, 65, 65,
  377. 65, 65, 65, 65, 65, 65, 65, 65,
  378. 65, 65, 65, 65, 65, 65, 65, 65,
  379. 65, 65, 65, 65, 65, 62, 1, 1,
  380. 1, 1, 1, 1, 1, 1, 1, 1,
  381. 1, 1, 1, 1, 1, 1, 1, 1,
  382. 1, 1, 1, 1, 1, 1, 1, 1,
  383. 1, 1, 1, 1, 1, 1, 1, 1,
  384. 1, 1, 1, 1, 1, 1, 1, 1,
  385. 1, 1, 1, 1, 1, 1, 1, 1,
  386. 1, 1, 1, 1, 1, 1, 1, 1,
  387. 1, 1, 1, 1, 1, 1, 1, 1,
  388. 69, 69, 69, 69, 69, 69, 69, 69,
  389. 69, 69, 69, 69, 69, 69, 69, 69,
  390. 69, 69, 69, 69, 69, 69, 69, 69,
  391. 69, 69, 69, 69, 69, 69, 70, 71,
  392. 71, 71, 71, 71, 71, 71, 71, 71,
  393. 71, 71, 71, 72, 71, 71, 73, 74,
  394. 74, 74, 75, 1, 9, 9, 9, 9,
  395. 9, 9, 9, 9, 22, 1, 9, 9,
  396. 76, 9, 9, 9, 9, 9, 9, 9,
  397. 9, 9, 9, 9, 9, 9, 9, 9,
  398. 9, 9, 9, 22, 9, 11, 9, 9,
  399. 9, 9, 9, 77, 9, 9, 9, 9,
  400. 9, 9, 9, 9, 9, 9, 9, 9,
  401. 9, 9, 9, 9, 9, 9, 9, 9,
  402. 9, 9, 9, 9, 9, 9, 9, 9,
  403. 9, 9, 9, 9, 9, 9, 9, 9,
  404. 9, 9, 9, 9, 9, 9, 9, 9,
  405. 9, 9, 9, 9, 9, 9, 9, 12,
  406. 9, 9, 9, 9, 9, 9, 9, 9,
  407. 9, 9, 9, 9, 9, 9, 9, 9,
  408. 9, 9, 9, 9, 9, 9, 9, 9,
  409. 9, 9, 9, 9, 9, 9, 9, 9,
  410. 9, 9, 9, 1, 1, 1, 1, 1,
  411. 1, 1, 1, 1, 1, 1, 1, 1,
  412. 1, 1, 1, 1, 1, 1, 1, 1,
  413. 1, 1, 1, 1, 1, 1, 1, 1,
  414. 1, 1, 1, 1, 1, 1, 1, 1,
  415. 1, 1, 1, 1, 1, 1, 1, 1,
  416. 1, 1, 1, 1, 1, 1, 1, 1,
  417. 1, 1, 1, 1, 1, 1, 1, 1,
  418. 1, 1, 1, 1, 1, 13, 13, 13,
  419. 13, 13, 13, 13, 13, 13, 13, 13,
  420. 13, 13, 13, 13, 13, 13, 13, 13,
  421. 13, 13, 13, 13, 13, 13, 13, 13,
  422. 13, 13, 13, 14, 15, 15, 15, 15,
  423. 15, 15, 15, 15, 15, 15, 15, 15,
  424. 16, 15, 15, 17, 18, 18, 18, 19,
  425. 1, 9, 9, 9, 9, 9, 9, 9,
  426. 9, 78, 1, 9, 9, 79, 9, 9,
  427. 9, 9, 9, 9, 9, 9, 9, 9,
  428. 9, 9, 9, 9, 9, 9, 9, 9,
  429. 78, 9, 11, 9, 9, 9, 9, 9,
  430. 80, 9, 9, 9, 9, 9, 9, 9,
  431. 9, 9, 9, 9, 9, 9, 9, 9,
  432. 9, 9, 9, 9, 9, 9, 9, 9,
  433. 9, 9, 9, 9, 9, 9, 9, 9,
  434. 9, 9, 9, 9, 9, 9, 9, 9,
  435. 9, 9, 9, 9, 9, 9, 9, 9,
  436. 9, 9, 9, 9, 12, 9, 9, 9,
  437. 9, 9, 9, 9, 9, 9, 9, 9,
  438. 9, 9, 9, 9, 9, 9, 9, 9,
  439. 9, 9, 9, 9, 9, 9, 9, 9,
  440. 9, 9, 9, 9, 9, 9, 9, 9,
  441. 1, 1, 1, 1, 1, 1, 1, 1,
  442. 1, 1, 1, 1, 1, 1, 1, 1,
  443. 1, 1, 1, 1, 1, 1, 1, 1,
  444. 1, 1, 1, 1, 1, 1, 1, 1,
  445. 1, 1, 1, 1, 1, 1, 1, 1,
  446. 1, 1, 1, 1, 1, 1, 1, 1,
  447. 1, 1, 1, 1, 1, 1, 1, 1,
  448. 1, 1, 1, 1, 1, 1, 1, 1,
  449. 1, 1, 13, 13, 13, 13, 13, 13,
  450. 13, 13, 13, 13, 13, 13, 13, 13,
  451. 13, 13, 13, 13, 13, 13, 13, 13,
  452. 13, 13, 13, 13, 13, 13, 13, 13,
  453. 14, 15, 15, 15, 15, 15, 15, 15,
  454. 15, 15, 15, 15, 15, 16, 15, 15,
  455. 17, 18, 18, 18, 19, 1, 9, 9,
  456. 9, 9, 9, 9, 9, 9, 81, 1,
  457. 9, 9, 82, 9, 9, 9, 9, 9,
  458. 9, 9, 9, 9, 9, 9, 9, 9,
  459. 9, 9, 9, 9, 9, 81, 83, 84,
  460. 83, 83, 83, 83, 83, 85, 9, 83,
  461. 83, 83, 83, 83, 9, 83, 83, 83,
  462. 83, 83, 83, 83, 83, 83, 83, 9,
  463. 9, 9, 83, 9, 9, 9, 83, 83,
  464. 83, 83, 83, 83, 83, 83, 83, 83,
  465. 83, 83, 83, 83, 83, 83, 83, 83,
  466. 83, 83, 83, 83, 83, 83, 83, 83,
  467. 9, 12, 9, 83, 83, 83, 83, 83,
  468. 83, 83, 83, 83, 83, 83, 83, 83,
  469. 83, 83, 83, 83, 83, 83, 83, 83,
  470. 83, 83, 83, 83, 83, 83, 83, 83,
  471. 83, 83, 83, 83, 9, 1, 1, 1,
  472. 1, 1, 1, 1, 1, 1, 1, 1,
  473. 1, 1, 1, 1, 1, 1, 1, 1,
  474. 1, 1, 1, 1, 1, 1, 1, 1,
  475. 1, 1, 1, 1, 1, 1, 1, 1,
  476. 1, 1, 1, 1, 1, 1, 1, 1,
  477. 1, 1, 1, 1, 1, 1, 1, 1,
  478. 1, 1, 1, 1, 1, 1, 1, 1,
  479. 1, 1, 1, 1, 1, 1, 1, 13,
  480. 13, 13, 13, 13, 13, 13, 13, 13,
  481. 13, 13, 13, 13, 13, 13, 13, 13,
  482. 13, 13, 13, 13, 13, 13, 13, 13,
  483. 13, 13, 13, 13, 13, 14, 15, 15,
  484. 15, 15, 15, 15, 15, 15, 15, 15,
  485. 15, 15, 16, 15, 15, 17, 18, 18,
  486. 18, 19, 1, 53, 1, 1, 1, 54,
  487. 1, 1, 1, 1, 1, 1, 1, 1,
  488. 1, 1, 1, 1, 1, 1, 1, 1,
  489. 1, 1, 53, 55, 55, 55, 55, 55,
  490. 55, 55, 86, 1, 55, 55, 55, 55,
  491. 55, 1, 55, 55, 55, 55, 55, 55,
  492. 55, 55, 55, 55, 1, 1, 1, 55,
  493. 1, 1, 1, 55, 55, 55, 55, 55,
  494. 55, 55, 55, 55, 55, 55, 55, 55,
  495. 55, 55, 55, 55, 55, 55, 55, 55,
  496. 55, 55, 55, 55, 55, 1, 1, 1,
  497. 55, 55, 55, 55, 55, 55, 55, 55,
  498. 55, 55, 55, 55, 55, 55, 55, 55,
  499. 55, 55, 55, 55, 55, 55, 55, 55,
  500. 55, 55, 55, 55, 55, 55, 55, 55,
  501. 55, 1, 1, 0,
  502. ]
  503. 1 class << self
  504. 1 attr_accessor :_trans_targs
  505. 1 private :_trans_targs, :_trans_targs=
  506. end
  507. 1 self._trans_targs = [
  508. 1, 0, 2, 32, 35, 19, 3, 5,
  509. 33, 6, 7, 33, 9, 10, 11, 12,
  510. 13, 14, 15, 16, 8, 18, 36, 1,
  511. 2, 32, 35, 19, 21, 22, 21, 40,
  512. 24, 25, 26, 27, 28, 29, 30, 31,
  513. 21, 22, 21, 40, 24, 25, 26, 27,
  514. 28, 29, 30, 31, 23, 33, 4, 32,
  515. 34, 4, 34, 33, 4, 34, 6, 36,
  516. 17, 38, 39, 37, 9, 10, 11, 12,
  517. 13, 14, 15, 16, 17, 37, 36, 17,
  518. 37, 36, 17, 38, 39, 37, 34,
  519. ]
  520. 1 class << self
  521. 1 attr_accessor :_trans_actions
  522. 1 private :_trans_actions, :_trans_actions=
  523. end
  524. 1 self._trans_actions = [
  525. 0, 0, 0, 1, 1, 2, 0, 0,
  526. 0, 0, 0, 3, 0, 0, 0, 0,
  527. 0, 0, 0, 0, 0, 0, 0, 4,
  528. 4, 5, 5, 6, 7, 7, 8, 9,
  529. 7, 7, 7, 7, 7, 7, 7, 7,
  530. 0, 0, 2, 10, 0, 0, 0, 0,
  531. 0, 0, 0, 0, 0, 11, 11, 0,
  532. 12, 0, 2, 4, 4, 6, 13, 14,
  533. 14, 13, 15, 16, 13, 13, 13, 13,
  534. 13, 13, 13, 13, 0, 2, 4, 4,
  535. 6, 11, 11, 0, 3, 12, 17,
  536. ]
  537. 1 class << self
  538. 1 attr_accessor :_eof_actions
  539. 1 private :_eof_actions, :_eof_actions=
  540. end
  541. 1 self._eof_actions = [
  542. 0, 0, 0, 0, 0, 0, 0, 0,
  543. 0, 0, 0, 0, 0, 0, 0, 0,
  544. 0, 0, 0, 0, 0, 0, 0, 0,
  545. 0, 0, 0, 0, 0, 0, 0, 0,
  546. 11, 0, 4, 11, 0, 4, 11, 11,
  547. 0,
  548. ]
  549. 1 class << self
  550. 1 attr_accessor :start
  551. end
  552. 1 self.start = 1
  553. 1 class << self
  554. 1 attr_accessor :first_final
  555. end
  556. 1 self.first_final = 32
  557. 1 class << self
  558. 1 attr_accessor :error
  559. end
  560. 1 self.error = 0
  561. 1 class << self
  562. 1 attr_accessor :en_comment_tail
  563. end
  564. 1 self.en_comment_tail = 20
  565. 1 class << self
  566. 1 attr_accessor :en_main
  567. end
  568. 1 self.en_main = 1
  569. 1 def self.parse(data)
  570. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  571. content_location = ContentLocationStruct.new(nil)
  572. return content_location if Mail::Utilities.blank?(data)
  573. # Parser state
  574. disp_type_s = param_attr_s = param_attr = qstr_s = qstr = param_val_s = nil
  575. # 5.1 Variables Used by Ragel
  576. p = 0
  577. eof = pe = data.length
  578. stack = []
  579. begin
  580. p ||= 0
  581. pe ||= data.length
  582. cs = start
  583. top = 0
  584. end
  585. begin
  586. testEof = false
  587. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  588. _goto_level = 0
  589. _resume = 10
  590. _eof_trans = 15
  591. _again = 20
  592. _test_eof = 30
  593. _out = 40
  594. while true
  595. if _goto_level <= 0
  596. if p == pe
  597. _goto_level = _test_eof
  598. next
  599. end
  600. if cs == 0
  601. _goto_level = _out
  602. next
  603. end
  604. end
  605. if _goto_level <= _resume
  606. _keys = cs << 1
  607. _inds = _index_offsets[cs]
  608. _slen = _key_spans[cs]
  609. _wide = data[p].ord
  610. _trans = if (_slen > 0 &&
  611. _trans_keys[_keys] <= _wide &&
  612. _wide <= _trans_keys[_keys + 1])
  613. _indicies[_inds + _wide - _trans_keys[_keys]]
  614. else
  615. _indicies[_inds + _slen]
  616. end
  617. cs = _trans_targs[_trans]
  618. if _trans_actions[_trans] != 0
  619. case _trans_actions[_trans]
  620. when 13
  621. begin
  622. qstr_s = p
  623. end
  624. when 3
  625. begin
  626. content_location.location = chars(data, qstr_s, p - 1)
  627. end
  628. when 1
  629. begin
  630. token_string_s = p
  631. end
  632. when 11
  633. begin
  634. content_location.location = chars(data, token_string_s, p - 1)
  635. end
  636. when 4
  637. begin
  638. end
  639. when 7
  640. begin
  641. end
  642. when 2
  643. begin
  644. begin
  645. stack[top] = cs
  646. top += 1
  647. cs = 20
  648. _goto_level = _again
  649. next
  650. end
  651. end
  652. when 10
  653. begin
  654. begin
  655. top -= 1
  656. cs = stack[top]
  657. _goto_level = _again
  658. next
  659. end
  660. end
  661. when 15
  662. begin
  663. qstr_s = p
  664. end
  665. begin
  666. content_location.location = chars(data, qstr_s, p - 1)
  667. end
  668. when 14
  669. begin
  670. qstr_s = p
  671. end
  672. begin
  673. content_location.location = chars(data, token_string_s, p - 1)
  674. end
  675. when 12
  676. begin
  677. content_location.location = chars(data, token_string_s, p - 1)
  678. end
  679. begin
  680. begin
  681. stack[top] = cs
  682. top += 1
  683. cs = 20
  684. _goto_level = _again
  685. next
  686. end
  687. end
  688. when 5
  689. begin
  690. end
  691. begin
  692. token_string_s = p
  693. end
  694. when 6
  695. begin
  696. end
  697. begin
  698. begin
  699. stack[top] = cs
  700. top += 1
  701. cs = 20
  702. _goto_level = _again
  703. next
  704. end
  705. end
  706. when 8
  707. begin
  708. end
  709. begin
  710. begin
  711. stack[top] = cs
  712. top += 1
  713. cs = 20
  714. _goto_level = _again
  715. next
  716. end
  717. end
  718. when 9
  719. begin
  720. end
  721. begin
  722. begin
  723. top -= 1
  724. cs = stack[top]
  725. _goto_level = _again
  726. next
  727. end
  728. end
  729. when 17
  730. begin
  731. begin
  732. stack[top] = cs
  733. top += 1
  734. cs = 20
  735. _goto_level = _again
  736. next
  737. end
  738. end
  739. begin
  740. content_location.location = chars(data, token_string_s, p - 1)
  741. end
  742. when 16
  743. begin
  744. qstr_s = p
  745. end
  746. begin
  747. content_location.location = chars(data, token_string_s, p - 1)
  748. end
  749. begin
  750. begin
  751. stack[top] = cs
  752. top += 1
  753. cs = 20
  754. _goto_level = _again
  755. next
  756. end
  757. end
  758. end
  759. end
  760. end
  761. if _goto_level <= _again
  762. if cs == 0
  763. _goto_level = _out
  764. next
  765. end
  766. p += 1
  767. if p != pe
  768. _goto_level = _resume
  769. next
  770. end
  771. end
  772. if _goto_level <= _test_eof
  773. if p == eof
  774. case _eof_actions[cs]
  775. when 11
  776. begin
  777. content_location.location = chars(data, token_string_s, p - 1)
  778. end
  779. when 4
  780. begin
  781. end
  782. end
  783. end
  784. end
  785. if _goto_level <= _out
  786. break
  787. end
  788. end
  789. end
  790. if p != eof || cs < 32
  791. raise Mail::Field::IncompleteParseError.new(Mail::ContentLocationElement, data, p)
  792. end
  793. content_location
  794. end
  795. end
  796. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_transfer_encoding_parser.rb

30.67% lines covered

163 relevant lines. 50 lines covered and 113 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module ContentTransferEncodingParser
  6. 1 extend Mail::ParserTools
  7. 1 ContentTransferEncodingStruct = Struct.new(:encoding, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 126, 10, 10,
  14. 9, 32, 10, 10, 9,
  15. 32, 10, 10, 9, 32,
  16. 9, 126, 1, 244, 1, 244,
  17. 10, 10, 9, 32, 0,
  18. 244, 128, 191, 160, 191,
  19. 128, 191, 128, 159, 144, 191,
  20. 128, 191, 128, 143, 9,
  21. 126, 9, 59, 9, 59,
  22. 9, 40, 9, 40, 0, 0,
  23. 0,
  24. ]
  25. 1 class << self
  26. 1 attr_accessor :_key_spans
  27. 1 private :_key_spans, :_key_spans=
  28. end
  29. 1 self._key_spans = [
  30. 0, 118, 1, 24, 1, 24, 1, 24,
  31. 118, 244, 244, 1, 24, 245, 64, 32,
  32. 64, 32, 48, 64, 16, 118, 51, 51,
  33. 32, 32, 0,
  34. ]
  35. 1 class << self
  36. 1 attr_accessor :_index_offsets
  37. 1 private :_index_offsets, :_index_offsets=
  38. end
  39. 1 self._index_offsets = [
  40. 0, 0, 119, 121, 146, 148, 173, 175,
  41. 200, 319, 564, 809, 811, 836, 1082, 1147,
  42. 1180, 1245, 1278, 1327, 1392, 1409, 1528, 1580,
  43. 1632, 1665, 1698,
  44. ]
  45. 1 class << self
  46. 1 attr_accessor :_indicies
  47. 1 private :_indicies, :_indicies=
  48. end
  49. 1 self._indicies = [
  50. 0, 1, 1, 1, 2, 1, 1, 1,
  51. 1, 1, 1, 1, 1, 1, 1, 1,
  52. 1, 1, 1, 1, 1, 1, 1, 0,
  53. 3, 3, 3, 3, 3, 3, 3, 4,
  54. 1, 3, 3, 3, 3, 3, 1, 3,
  55. 3, 3, 3, 3, 3, 3, 3, 3,
  56. 3, 1, 1, 1, 1, 1, 1, 1,
  57. 3, 3, 3, 3, 3, 3, 3, 3,
  58. 3, 3, 3, 3, 3, 3, 3, 3,
  59. 3, 3, 3, 3, 3, 3, 3, 3,
  60. 3, 3, 1, 1, 1, 3, 3, 3,
  61. 3, 3, 3, 3, 3, 3, 3, 3,
  62. 3, 3, 3, 3, 3, 3, 3, 3,
  63. 3, 3, 3, 3, 3, 3, 3, 3,
  64. 3, 3, 3, 3, 3, 3, 1, 5,
  65. 1, 0, 1, 1, 1, 1, 1, 1,
  66. 1, 1, 1, 1, 1, 1, 1, 1,
  67. 1, 1, 1, 1, 1, 1, 1, 1,
  68. 0, 1, 6, 1, 7, 1, 1, 1,
  69. 1, 1, 1, 1, 1, 1, 1, 1,
  70. 1, 1, 1, 1, 1, 1, 1, 1,
  71. 1, 1, 1, 7, 1, 8, 1, 9,
  72. 1, 1, 1, 1, 1, 1, 1, 1,
  73. 1, 1, 1, 1, 1, 1, 1, 1,
  74. 1, 1, 1, 1, 1, 1, 9, 1,
  75. 10, 1, 1, 1, 11, 1, 1, 1,
  76. 1, 1, 1, 1, 1, 1, 1, 1,
  77. 1, 1, 1, 1, 1, 1, 1, 10,
  78. 12, 12, 12, 12, 12, 12, 12, 13,
  79. 1, 12, 12, 12, 12, 12, 1, 12,
  80. 12, 12, 12, 12, 12, 12, 12, 12,
  81. 12, 1, 1, 1, 1, 1, 1, 1,
  82. 12, 12, 12, 12, 12, 12, 12, 12,
  83. 12, 12, 12, 12, 12, 12, 12, 12,
  84. 12, 12, 12, 12, 12, 12, 12, 12,
  85. 12, 12, 1, 1, 1, 12, 12, 12,
  86. 12, 12, 12, 12, 12, 12, 12, 12,
  87. 12, 12, 12, 12, 12, 12, 12, 12,
  88. 12, 12, 12, 12, 12, 12, 12, 12,
  89. 12, 12, 12, 12, 12, 12, 1, 14,
  90. 14, 14, 14, 14, 14, 14, 14, 14,
  91. 1, 14, 14, 15, 14, 14, 14, 14,
  92. 14, 14, 14, 14, 14, 14, 14, 14,
  93. 14, 14, 14, 14, 14, 14, 14, 14,
  94. 14, 14, 14, 14, 14, 14, 16, 17,
  95. 14, 14, 14, 14, 14, 14, 14, 14,
  96. 14, 14, 14, 14, 14, 14, 14, 14,
  97. 14, 14, 14, 14, 14, 14, 14, 14,
  98. 14, 14, 14, 14, 14, 14, 14, 14,
  99. 14, 14, 14, 14, 14, 14, 14, 14,
  100. 14, 14, 14, 14, 14, 14, 14, 14,
  101. 14, 14, 18, 14, 14, 14, 14, 14,
  102. 14, 14, 14, 14, 14, 14, 14, 14,
  103. 14, 14, 14, 14, 14, 14, 14, 14,
  104. 14, 14, 14, 14, 14, 14, 14, 14,
  105. 14, 14, 14, 14, 14, 14, 1, 1,
  106. 1, 1, 1, 1, 1, 1, 1, 1,
  107. 1, 1, 1, 1, 1, 1, 1, 1,
  108. 1, 1, 1, 1, 1, 1, 1, 1,
  109. 1, 1, 1, 1, 1, 1, 1, 1,
  110. 1, 1, 1, 1, 1, 1, 1, 1,
  111. 1, 1, 1, 1, 1, 1, 1, 1,
  112. 1, 1, 1, 1, 1, 1, 1, 1,
  113. 1, 1, 1, 1, 1, 1, 1, 1,
  114. 19, 19, 19, 19, 19, 19, 19, 19,
  115. 19, 19, 19, 19, 19, 19, 19, 19,
  116. 19, 19, 19, 19, 19, 19, 19, 19,
  117. 19, 19, 19, 19, 19, 19, 20, 21,
  118. 21, 21, 21, 21, 21, 21, 21, 21,
  119. 21, 21, 21, 22, 21, 21, 23, 24,
  120. 24, 24, 25, 1, 26, 26, 26, 26,
  121. 26, 26, 26, 26, 26, 1, 26, 26,
  122. 27, 26, 26, 26, 26, 26, 26, 26,
  123. 26, 26, 26, 26, 26, 26, 26, 26,
  124. 26, 26, 26, 26, 26, 26, 26, 26,
  125. 26, 26, 26, 28, 29, 26, 26, 26,
  126. 26, 26, 26, 26, 26, 26, 26, 26,
  127. 26, 26, 26, 26, 26, 26, 26, 26,
  128. 26, 26, 26, 26, 26, 26, 26, 26,
  129. 26, 26, 26, 26, 26, 26, 26, 26,
  130. 26, 26, 26, 26, 26, 26, 26, 26,
  131. 26, 26, 26, 26, 26, 26, 26, 30,
  132. 26, 26, 26, 26, 26, 26, 26, 26,
  133. 26, 26, 26, 26, 26, 26, 26, 26,
  134. 26, 26, 26, 26, 26, 26, 26, 26,
  135. 26, 26, 26, 26, 26, 26, 26, 26,
  136. 26, 26, 26, 1, 1, 1, 1, 1,
  137. 1, 1, 1, 1, 1, 1, 1, 1,
  138. 1, 1, 1, 1, 1, 1, 1, 1,
  139. 1, 1, 1, 1, 1, 1, 1, 1,
  140. 1, 1, 1, 1, 1, 1, 1, 1,
  141. 1, 1, 1, 1, 1, 1, 1, 1,
  142. 1, 1, 1, 1, 1, 1, 1, 1,
  143. 1, 1, 1, 1, 1, 1, 1, 1,
  144. 1, 1, 1, 1, 1, 31, 31, 31,
  145. 31, 31, 31, 31, 31, 31, 31, 31,
  146. 31, 31, 31, 31, 31, 31, 31, 31,
  147. 31, 31, 31, 31, 31, 31, 31, 31,
  148. 31, 31, 31, 32, 33, 33, 33, 33,
  149. 33, 33, 33, 33, 33, 33, 33, 33,
  150. 34, 33, 33, 35, 36, 36, 36, 37,
  151. 1, 38, 1, 26, 1, 1, 1, 1,
  152. 1, 1, 1, 1, 1, 1, 1, 1,
  153. 1, 1, 1, 1, 1, 1, 1, 1,
  154. 1, 1, 26, 1, 26, 26, 26, 26,
  155. 26, 26, 26, 26, 26, 26, 26, 26,
  156. 26, 26, 26, 26, 26, 26, 26, 26,
  157. 26, 26, 26, 26, 26, 26, 26, 26,
  158. 26, 26, 26, 26, 26, 26, 26, 26,
  159. 26, 26, 26, 26, 26, 26, 26, 26,
  160. 26, 26, 26, 26, 26, 26, 26, 26,
  161. 26, 26, 26, 26, 26, 26, 26, 26,
  162. 26, 26, 26, 26, 26, 26, 26, 26,
  163. 26, 26, 26, 26, 26, 26, 26, 26,
  164. 26, 26, 26, 26, 26, 26, 26, 26,
  165. 26, 26, 26, 26, 26, 26, 26, 26,
  166. 26, 26, 26, 26, 26, 26, 26, 26,
  167. 26, 26, 26, 26, 26, 26, 26, 26,
  168. 26, 26, 26, 26, 26, 26, 26, 26,
  169. 26, 26, 26, 26, 26, 26, 26, 26,
  170. 26, 26, 26, 26, 1, 1, 1, 1,
  171. 1, 1, 1, 1, 1, 1, 1, 1,
  172. 1, 1, 1, 1, 1, 1, 1, 1,
  173. 1, 1, 1, 1, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 1, 1, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 1, 1,
  177. 1, 1, 1, 1, 1, 1, 1, 1,
  178. 1, 1, 1, 1, 1, 1, 31, 31,
  179. 31, 31, 31, 31, 31, 31, 31, 31,
  180. 31, 31, 31, 31, 31, 31, 31, 31,
  181. 31, 31, 31, 31, 31, 31, 31, 31,
  182. 31, 31, 31, 31, 32, 33, 33, 33,
  183. 33, 33, 33, 33, 33, 33, 33, 33,
  184. 33, 34, 33, 33, 35, 36, 36, 36,
  185. 37, 1, 26, 26, 26, 26, 26, 26,
  186. 26, 26, 26, 26, 26, 26, 26, 26,
  187. 26, 26, 26, 26, 26, 26, 26, 26,
  188. 26, 26, 26, 26, 26, 26, 26, 26,
  189. 26, 26, 26, 26, 26, 26, 26, 26,
  190. 26, 26, 26, 26, 26, 26, 26, 26,
  191. 26, 26, 26, 26, 26, 26, 26, 26,
  192. 26, 26, 26, 26, 26, 26, 26, 26,
  193. 26, 26, 1, 31, 31, 31, 31, 31,
  194. 31, 31, 31, 31, 31, 31, 31, 31,
  195. 31, 31, 31, 31, 31, 31, 31, 31,
  196. 31, 31, 31, 31, 31, 31, 31, 31,
  197. 31, 31, 31, 1, 31, 31, 31, 31,
  198. 31, 31, 31, 31, 31, 31, 31, 31,
  199. 31, 31, 31, 31, 31, 31, 31, 31,
  200. 31, 31, 31, 31, 31, 31, 31, 31,
  201. 31, 31, 31, 31, 31, 31, 31, 31,
  202. 31, 31, 31, 31, 31, 31, 31, 31,
  203. 31, 31, 31, 31, 31, 31, 31, 31,
  204. 31, 31, 31, 31, 31, 31, 31, 31,
  205. 31, 31, 31, 31, 1, 31, 31, 31,
  206. 31, 31, 31, 31, 31, 31, 31, 31,
  207. 31, 31, 31, 31, 31, 31, 31, 31,
  208. 31, 31, 31, 31, 31, 31, 31, 31,
  209. 31, 31, 31, 31, 31, 1, 33, 33,
  210. 33, 33, 33, 33, 33, 33, 33, 33,
  211. 33, 33, 33, 33, 33, 33, 33, 33,
  212. 33, 33, 33, 33, 33, 33, 33, 33,
  213. 33, 33, 33, 33, 33, 33, 33, 33,
  214. 33, 33, 33, 33, 33, 33, 33, 33,
  215. 33, 33, 33, 33, 33, 33, 1, 33,
  216. 33, 33, 33, 33, 33, 33, 33, 33,
  217. 33, 33, 33, 33, 33, 33, 33, 33,
  218. 33, 33, 33, 33, 33, 33, 33, 33,
  219. 33, 33, 33, 33, 33, 33, 33, 33,
  220. 33, 33, 33, 33, 33, 33, 33, 33,
  221. 33, 33, 33, 33, 33, 33, 33, 33,
  222. 33, 33, 33, 33, 33, 33, 33, 33,
  223. 33, 33, 33, 33, 33, 33, 33, 1,
  224. 33, 33, 33, 33, 33, 33, 33, 33,
  225. 33, 33, 33, 33, 33, 33, 33, 33,
  226. 1, 39, 1, 1, 1, 40, 1, 1,
  227. 1, 1, 1, 1, 1, 1, 1, 1,
  228. 1, 1, 1, 1, 1, 1, 1, 1,
  229. 39, 41, 41, 41, 41, 41, 41, 41,
  230. 42, 1, 41, 41, 41, 41, 41, 1,
  231. 41, 41, 41, 41, 41, 41, 41, 41,
  232. 41, 41, 1, 43, 1, 1, 1, 1,
  233. 1, 41, 41, 41, 41, 41, 41, 41,
  234. 41, 41, 41, 41, 41, 41, 41, 41,
  235. 41, 41, 41, 41, 41, 41, 41, 41,
  236. 41, 41, 41, 1, 1, 1, 41, 41,
  237. 41, 41, 41, 41, 41, 41, 41, 41,
  238. 41, 41, 41, 41, 41, 41, 41, 41,
  239. 41, 41, 41, 41, 41, 41, 41, 41,
  240. 41, 41, 41, 41, 41, 41, 41, 1,
  241. 7, 1, 1, 1, 44, 1, 1, 1,
  242. 1, 1, 1, 1, 1, 1, 1, 1,
  243. 1, 1, 1, 1, 1, 1, 1, 7,
  244. 1, 1, 1, 1, 1, 1, 1, 45,
  245. 1, 1, 1, 1, 1, 1, 1, 1,
  246. 1, 1, 1, 1, 1, 1, 1, 1,
  247. 1, 1, 9, 1, 46, 1, 1, 1,
  248. 47, 1, 1, 1, 1, 1, 1, 1,
  249. 1, 1, 1, 1, 1, 1, 1, 1,
  250. 1, 1, 1, 46, 1, 1, 1, 1,
  251. 1, 1, 1, 48, 1, 1, 1, 1,
  252. 1, 1, 1, 1, 1, 1, 1, 1,
  253. 1, 1, 1, 1, 1, 1, 49, 1,
  254. 9, 1, 1, 1, 50, 1, 1, 1,
  255. 1, 1, 1, 1, 1, 1, 1, 1,
  256. 1, 1, 1, 1, 1, 1, 1, 9,
  257. 1, 1, 1, 1, 1, 1, 1, 51,
  258. 1, 49, 1, 1, 1, 52, 1, 1,
  259. 1, 1, 1, 1, 1, 1, 1, 1,
  260. 1, 1, 1, 1, 1, 1, 1, 1,
  261. 49, 1, 1, 1, 1, 1, 1, 1,
  262. 53, 1, 1, 0,
  263. ]
  264. 1 class << self
  265. 1 attr_accessor :_trans_targs
  266. 1 private :_trans_targs, :_trans_targs=
  267. end
  268. 1 self._trans_targs = [
  269. 1, 0, 2, 21, 8, 3, 5, 22,
  270. 7, 24, 1, 2, 21, 8, 10, 11,
  271. 10, 26, 13, 14, 15, 16, 17, 18,
  272. 19, 20, 10, 11, 10, 26, 13, 14,
  273. 15, 16, 17, 18, 19, 20, 12, 22,
  274. 4, 21, 23, 24, 4, 23, 22, 4,
  275. 23, 24, 6, 25, 6, 25,
  276. ]
  277. 1 class << self
  278. 1 attr_accessor :_trans_actions
  279. 1 private :_trans_actions, :_trans_actions=
  280. end
  281. 1 self._trans_actions = [
  282. 0, 0, 0, 1, 2, 0, 0, 0,
  283. 0, 0, 3, 3, 4, 5, 6, 6,
  284. 7, 8, 6, 6, 6, 6, 6, 6,
  285. 6, 6, 0, 0, 2, 9, 0, 0,
  286. 0, 0, 0, 0, 0, 0, 0, 10,
  287. 10, 0, 11, 10, 0, 2, 3, 3,
  288. 5, 3, 0, 2, 3, 5,
  289. ]
  290. 1 class << self
  291. 1 attr_accessor :_eof_actions
  292. 1 private :_eof_actions, :_eof_actions=
  293. end
  294. 1 self._eof_actions = [
  295. 0, 0, 0, 0, 0, 0, 0, 0,
  296. 0, 0, 0, 0, 0, 0, 0, 0,
  297. 0, 0, 0, 0, 0, 10, 0, 3,
  298. 0, 3, 0,
  299. ]
  300. 1 class << self
  301. 1 attr_accessor :start
  302. end
  303. 1 self.start = 1
  304. 1 class << self
  305. 1 attr_accessor :first_final
  306. end
  307. 1 self.first_final = 21
  308. 1 class << self
  309. 1 attr_accessor :error
  310. end
  311. 1 self.error = 0
  312. 1 class << self
  313. 1 attr_accessor :en_comment_tail
  314. end
  315. 1 self.en_comment_tail = 9
  316. 1 class << self
  317. 1 attr_accessor :en_main
  318. end
  319. 1 self.en_main = 1
  320. 1 def self.parse(data)
  321. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  322. content_transfer_encoding = ContentTransferEncodingStruct.new("")
  323. return content_transfer_encoding if Mail::Utilities.blank?(data)
  324. # Parser state
  325. encoding_s = nil
  326. # 5.1 Variables Used by Ragel
  327. p = 0
  328. eof = pe = data.length
  329. stack = []
  330. begin
  331. p ||= 0
  332. pe ||= data.length
  333. cs = start
  334. top = 0
  335. end
  336. begin
  337. testEof = false
  338. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  339. _goto_level = 0
  340. _resume = 10
  341. _eof_trans = 15
  342. _again = 20
  343. _test_eof = 30
  344. _out = 40
  345. while true
  346. if _goto_level <= 0
  347. if p == pe
  348. _goto_level = _test_eof
  349. next
  350. end
  351. if cs == 0
  352. _goto_level = _out
  353. next
  354. end
  355. end
  356. if _goto_level <= _resume
  357. _keys = cs << 1
  358. _inds = _index_offsets[cs]
  359. _slen = _key_spans[cs]
  360. _wide = data[p].ord
  361. _trans = if (_slen > 0 &&
  362. _trans_keys[_keys] <= _wide &&
  363. _wide <= _trans_keys[_keys + 1])
  364. _indicies[_inds + _wide - _trans_keys[_keys]]
  365. else
  366. _indicies[_inds + _slen]
  367. end
  368. cs = _trans_targs[_trans]
  369. if _trans_actions[_trans] != 0
  370. case _trans_actions[_trans]
  371. when 1
  372. begin
  373. encoding_s = p
  374. end
  375. when 10
  376. begin
  377. content_transfer_encoding.encoding = chars(data, encoding_s, p - 1).downcase
  378. end
  379. when 3
  380. begin
  381. end
  382. when 6
  383. begin
  384. end
  385. when 2
  386. begin
  387. begin
  388. stack[top] = cs
  389. top += 1
  390. cs = 9
  391. _goto_level = _again
  392. next
  393. end
  394. end
  395. when 9
  396. begin
  397. begin
  398. top -= 1
  399. cs = stack[top]
  400. _goto_level = _again
  401. next
  402. end
  403. end
  404. when 11
  405. begin
  406. content_transfer_encoding.encoding = chars(data, encoding_s, p - 1).downcase
  407. end
  408. begin
  409. begin
  410. stack[top] = cs
  411. top += 1
  412. cs = 9
  413. _goto_level = _again
  414. next
  415. end
  416. end
  417. when 4
  418. begin
  419. end
  420. begin
  421. encoding_s = p
  422. end
  423. when 5
  424. begin
  425. end
  426. begin
  427. begin
  428. stack[top] = cs
  429. top += 1
  430. cs = 9
  431. _goto_level = _again
  432. next
  433. end
  434. end
  435. when 7
  436. begin
  437. end
  438. begin
  439. begin
  440. stack[top] = cs
  441. top += 1
  442. cs = 9
  443. _goto_level = _again
  444. next
  445. end
  446. end
  447. when 8
  448. begin
  449. end
  450. begin
  451. begin
  452. top -= 1
  453. cs = stack[top]
  454. _goto_level = _again
  455. next
  456. end
  457. end
  458. end
  459. end
  460. end
  461. if _goto_level <= _again
  462. if cs == 0
  463. _goto_level = _out
  464. next
  465. end
  466. p += 1
  467. if p != pe
  468. _goto_level = _resume
  469. next
  470. end
  471. end
  472. if _goto_level <= _test_eof
  473. if p == eof
  474. case _eof_actions[cs]
  475. when 10
  476. begin
  477. content_transfer_encoding.encoding = chars(data, encoding_s, p - 1).downcase
  478. end
  479. when 3
  480. begin
  481. end
  482. end
  483. end
  484. end
  485. if _goto_level <= _out
  486. break
  487. end
  488. end
  489. end
  490. if p != eof || cs < 21
  491. raise Mail::Field::IncompleteParseError.new(Mail::ContentTransferEncodingElement, data, p)
  492. end
  493. content_transfer_encoding
  494. end
  495. end
  496. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/content_type_parser.rb

18.94% lines covered

264 relevant lines. 50 lines covered and 214 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module ContentTypeParser
  6. 1 extend Mail::ParserTools
  7. 1 ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 33, 126, 33, 126,
  14. 33, 126, 9, 126, 10,
  15. 10, 9, 32, 33, 126,
  16. 9, 126, 9, 40, 10, 10,
  17. 9, 32, 1, 244, 1,
  18. 244, 10, 10, 9, 32,
  19. 10, 10, 9, 32, 9, 126,
  20. 9, 126, 10, 10, 9,
  21. 32, 9, 126, 0, 244,
  22. 128, 191, 160, 191, 128, 191,
  23. 128, 159, 144, 191, 128,
  24. 191, 128, 143, 9, 40,
  25. 10, 10, 9, 32, 9, 126,
  26. 1, 244, 1, 244, 10,
  27. 10, 9, 32, 0, 244,
  28. 128, 191, 160, 191, 128, 191,
  29. 128, 159, 144, 191, 128,
  30. 191, 128, 143, 9, 126,
  31. 9, 59, 9, 126, 9, 126,
  32. 9, 126, 9, 126, 9,
  33. 126, 0, 0, 0,
  34. ]
  35. 1 class << self
  36. 1 attr_accessor :_key_spans
  37. 1 private :_key_spans, :_key_spans=
  38. end
  39. 1 self._key_spans = [
  40. 0, 94, 94, 94, 118, 1, 24, 94,
  41. 118, 32, 1, 24, 244, 244, 1, 24,
  42. 1, 24, 118, 118, 1, 24, 118, 245,
  43. 64, 32, 64, 32, 48, 64, 16, 32,
  44. 1, 24, 118, 244, 244, 1, 24, 245,
  45. 64, 32, 64, 32, 48, 64, 16, 118,
  46. 51, 118, 118, 118, 118, 118, 0,
  47. ]
  48. 1 class << self
  49. 1 attr_accessor :_index_offsets
  50. 1 private :_index_offsets, :_index_offsets=
  51. end
  52. 1 self._index_offsets = [
  53. 0, 0, 95, 190, 285, 404, 406, 431,
  54. 526, 645, 678, 680, 705, 950, 1195, 1197,
  55. 1222, 1224, 1249, 1368, 1487, 1489, 1514, 1633,
  56. 1879, 1944, 1977, 2042, 2075, 2124, 2189, 2206,
  57. 2239, 2241, 2266, 2385, 2630, 2875, 2877, 2902,
  58. 3148, 3213, 3246, 3311, 3344, 3393, 3458, 3475,
  59. 3594, 3646, 3765, 3884, 4003, 4122, 4241,
  60. ]
  61. 1 class << self
  62. 1 attr_accessor :_indicies
  63. 1 private :_indicies, :_indicies=
  64. end
  65. 1 self._indicies = [
  66. 0, 0, 0, 0, 0, 0, 0, 1,
  67. 1, 0, 0, 0, 0, 0, 1, 0,
  68. 0, 0, 0, 0, 0, 0, 0, 0,
  69. 0, 1, 1, 1, 1, 1, 1, 1,
  70. 0, 0, 0, 0, 0, 0, 0, 0,
  71. 0, 0, 0, 0, 0, 0, 0, 0,
  72. 0, 0, 0, 0, 0, 0, 0, 0,
  73. 0, 0, 1, 1, 1, 0, 0, 0,
  74. 0, 0, 0, 0, 0, 0, 0, 0,
  75. 0, 0, 0, 0, 0, 0, 0, 0,
  76. 0, 0, 0, 0, 0, 0, 0, 0,
  77. 0, 0, 0, 0, 0, 0, 1, 2,
  78. 2, 2, 2, 2, 2, 2, 1, 1,
  79. 2, 2, 2, 2, 2, 3, 2, 2,
  80. 2, 2, 2, 2, 2, 2, 2, 2,
  81. 1, 1, 1, 1, 1, 1, 1, 2,
  82. 2, 2, 2, 2, 2, 2, 2, 2,
  83. 2, 2, 2, 2, 2, 2, 2, 2,
  84. 2, 2, 2, 2, 2, 2, 2, 2,
  85. 2, 1, 1, 1, 2, 2, 2, 2,
  86. 2, 2, 2, 2, 2, 2, 2, 2,
  87. 2, 2, 2, 2, 2, 2, 2, 2,
  88. 2, 2, 2, 2, 2, 2, 2, 2,
  89. 2, 2, 2, 2, 2, 1, 4, 4,
  90. 4, 4, 4, 4, 4, 1, 1, 4,
  91. 4, 4, 4, 4, 1, 4, 4, 4,
  92. 4, 4, 4, 4, 4, 4, 4, 1,
  93. 1, 1, 1, 1, 1, 1, 4, 4,
  94. 4, 4, 4, 4, 4, 4, 4, 4,
  95. 4, 4, 4, 4, 4, 4, 4, 4,
  96. 4, 4, 4, 4, 4, 4, 4, 4,
  97. 1, 1, 1, 4, 4, 4, 4, 4,
  98. 4, 4, 4, 4, 4, 4, 4, 4,
  99. 4, 4, 4, 4, 4, 4, 4, 4,
  100. 4, 4, 4, 4, 4, 4, 4, 4,
  101. 4, 4, 4, 4, 1, 5, 1, 1,
  102. 1, 6, 1, 1, 1, 1, 1, 1,
  103. 1, 1, 1, 1, 1, 1, 1, 1,
  104. 1, 1, 1, 1, 5, 7, 7, 7,
  105. 7, 7, 7, 7, 8, 1, 7, 7,
  106. 7, 7, 7, 1, 7, 7, 7, 7,
  107. 7, 7, 7, 7, 7, 7, 1, 9,
  108. 1, 1, 1, 1, 1, 7, 7, 7,
  109. 7, 7, 7, 7, 7, 7, 7, 7,
  110. 7, 7, 7, 7, 7, 7, 7, 7,
  111. 7, 7, 7, 7, 7, 7, 7, 1,
  112. 1, 1, 7, 7, 7, 7, 7, 7,
  113. 7, 7, 7, 7, 7, 7, 7, 7,
  114. 7, 7, 7, 7, 7, 7, 7, 7,
  115. 7, 7, 7, 7, 7, 7, 7, 7,
  116. 7, 7, 7, 1, 10, 1, 5, 1,
  117. 1, 1, 1, 1, 1, 1, 1, 1,
  118. 1, 1, 1, 1, 1, 1, 1, 1,
  119. 1, 1, 1, 1, 1, 5, 1, 11,
  120. 11, 11, 11, 11, 11, 11, 1, 1,
  121. 11, 11, 11, 11, 11, 1, 11, 11,
  122. 11, 11, 11, 11, 11, 11, 11, 11,
  123. 1, 1, 1, 12, 1, 1, 1, 11,
  124. 11, 11, 11, 11, 11, 11, 11, 11,
  125. 11, 11, 11, 11, 11, 11, 11, 11,
  126. 11, 11, 11, 11, 11, 11, 11, 11,
  127. 11, 1, 1, 1, 11, 11, 11, 11,
  128. 11, 11, 11, 11, 11, 11, 11, 11,
  129. 11, 11, 11, 11, 11, 11, 11, 11,
  130. 11, 11, 11, 11, 11, 11, 11, 11,
  131. 11, 11, 11, 11, 11, 1, 13, 1,
  132. 1, 1, 14, 1, 1, 1, 1, 1,
  133. 1, 1, 1, 1, 1, 1, 1, 1,
  134. 1, 1, 1, 1, 1, 13, 15, 16,
  135. 15, 15, 15, 15, 15, 17, 1, 15,
  136. 15, 15, 15, 15, 1, 15, 15, 15,
  137. 15, 15, 15, 15, 15, 15, 15, 1,
  138. 1, 1, 15, 1, 1, 1, 15, 15,
  139. 15, 15, 15, 15, 15, 15, 15, 15,
  140. 15, 15, 15, 15, 15, 15, 15, 15,
  141. 15, 15, 15, 15, 15, 15, 15, 15,
  142. 1, 1, 1, 15, 15, 15, 15, 15,
  143. 15, 15, 15, 15, 15, 15, 15, 15,
  144. 15, 15, 15, 15, 15, 15, 15, 15,
  145. 15, 15, 15, 15, 15, 15, 15, 15,
  146. 15, 15, 15, 15, 1, 18, 1, 1,
  147. 1, 19, 1, 1, 1, 1, 1, 1,
  148. 1, 1, 1, 1, 1, 1, 1, 1,
  149. 1, 1, 1, 1, 18, 1, 20, 1,
  150. 1, 1, 1, 1, 21, 1, 22, 1,
  151. 18, 1, 1, 1, 1, 1, 1, 1,
  152. 1, 1, 1, 1, 1, 1, 1, 1,
  153. 1, 1, 1, 1, 1, 1, 1, 18,
  154. 1, 23, 23, 23, 23, 23, 23, 23,
  155. 23, 23, 1, 23, 23, 24, 23, 23,
  156. 23, 23, 23, 23, 23, 23, 23, 23,
  157. 23, 23, 23, 23, 23, 23, 23, 23,
  158. 23, 23, 25, 23, 23, 23, 23, 23,
  159. 23, 23, 23, 23, 23, 23, 23, 23,
  160. 23, 23, 23, 23, 23, 23, 23, 23,
  161. 23, 23, 23, 23, 23, 23, 23, 23,
  162. 23, 23, 23, 23, 23, 23, 23, 23,
  163. 23, 23, 23, 23, 23, 23, 23, 23,
  164. 23, 23, 23, 23, 23, 23, 23, 23,
  165. 23, 23, 23, 23, 26, 23, 23, 23,
  166. 23, 23, 23, 23, 23, 23, 23, 23,
  167. 23, 23, 23, 23, 23, 23, 23, 23,
  168. 23, 23, 23, 23, 23, 23, 23, 23,
  169. 23, 23, 23, 23, 23, 23, 23, 23,
  170. 1, 1, 1, 1, 1, 1, 1, 1,
  171. 1, 1, 1, 1, 1, 1, 1, 1,
  172. 1, 1, 1, 1, 1, 1, 1, 1,
  173. 1, 1, 1, 1, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 1, 1, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 1, 1,
  177. 1, 1, 1, 1, 1, 1, 1, 1,
  178. 1, 1, 27, 27, 27, 27, 27, 27,
  179. 27, 27, 27, 27, 27, 27, 27, 27,
  180. 27, 27, 27, 27, 27, 27, 27, 27,
  181. 27, 27, 27, 27, 27, 27, 27, 27,
  182. 28, 29, 29, 29, 29, 29, 29, 29,
  183. 29, 29, 29, 29, 29, 30, 29, 29,
  184. 31, 32, 32, 32, 33, 1, 34, 34,
  185. 34, 34, 34, 34, 34, 34, 34, 1,
  186. 34, 34, 35, 34, 34, 34, 34, 34,
  187. 34, 34, 34, 34, 34, 34, 34, 34,
  188. 34, 34, 34, 34, 34, 34, 34, 36,
  189. 34, 34, 34, 34, 34, 34, 34, 34,
  190. 34, 34, 34, 34, 34, 34, 34, 34,
  191. 34, 34, 34, 34, 34, 34, 34, 34,
  192. 34, 34, 34, 34, 34, 34, 34, 34,
  193. 34, 34, 34, 34, 34, 34, 34, 34,
  194. 34, 34, 34, 34, 34, 34, 34, 34,
  195. 34, 34, 34, 34, 34, 34, 34, 34,
  196. 34, 37, 34, 34, 34, 34, 34, 34,
  197. 34, 34, 34, 34, 34, 34, 34, 34,
  198. 34, 34, 34, 34, 34, 34, 34, 34,
  199. 34, 34, 34, 34, 34, 34, 34, 34,
  200. 34, 34, 34, 34, 34, 1, 1, 1,
  201. 1, 1, 1, 1, 1, 1, 1, 1,
  202. 1, 1, 1, 1, 1, 1, 1, 1,
  203. 1, 1, 1, 1, 1, 1, 1, 1,
  204. 1, 1, 1, 1, 1, 1, 1, 1,
  205. 1, 1, 1, 1, 1, 1, 1, 1,
  206. 1, 1, 1, 1, 1, 1, 1, 1,
  207. 1, 1, 1, 1, 1, 1, 1, 1,
  208. 1, 1, 1, 1, 1, 1, 1, 38,
  209. 38, 38, 38, 38, 38, 38, 38, 38,
  210. 38, 38, 38, 38, 38, 38, 38, 38,
  211. 38, 38, 38, 38, 38, 38, 38, 38,
  212. 38, 38, 38, 38, 38, 39, 40, 40,
  213. 40, 40, 40, 40, 40, 40, 40, 40,
  214. 40, 40, 41, 40, 40, 42, 43, 43,
  215. 43, 44, 1, 45, 1, 34, 1, 1,
  216. 1, 1, 1, 1, 1, 1, 1, 1,
  217. 1, 1, 1, 1, 1, 1, 1, 1,
  218. 1, 1, 1, 1, 34, 1, 46, 1,
  219. 47, 1, 1, 1, 1, 1, 1, 1,
  220. 1, 1, 1, 1, 1, 1, 1, 1,
  221. 1, 1, 1, 1, 1, 1, 1, 47,
  222. 1, 48, 1, 1, 1, 49, 1, 1,
  223. 1, 1, 1, 1, 1, 1, 1, 1,
  224. 1, 1, 1, 1, 1, 1, 1, 1,
  225. 48, 7, 7, 7, 7, 7, 7, 7,
  226. 50, 1, 7, 7, 7, 7, 7, 1,
  227. 7, 7, 7, 7, 7, 7, 7, 7,
  228. 7, 7, 1, 9, 1, 1, 1, 1,
  229. 1, 7, 7, 7, 7, 7, 7, 7,
  230. 7, 7, 7, 7, 7, 7, 7, 7,
  231. 7, 7, 7, 7, 7, 7, 7, 7,
  232. 7, 7, 7, 1, 1, 1, 7, 7,
  233. 7, 7, 7, 7, 7, 7, 7, 7,
  234. 7, 7, 7, 7, 7, 7, 7, 7,
  235. 7, 7, 7, 7, 7, 7, 7, 7,
  236. 7, 7, 7, 7, 7, 7, 7, 1,
  237. 48, 1, 1, 1, 49, 1, 1, 1,
  238. 1, 1, 1, 1, 1, 1, 1, 1,
  239. 1, 1, 1, 1, 1, 1, 1, 48,
  240. 7, 7, 7, 7, 7, 7, 7, 50,
  241. 1, 7, 7, 7, 7, 7, 1, 7,
  242. 7, 7, 7, 7, 7, 7, 7, 7,
  243. 7, 1, 1, 1, 1, 1, 1, 1,
  244. 7, 7, 7, 7, 7, 7, 7, 7,
  245. 7, 7, 7, 7, 7, 7, 7, 7,
  246. 7, 7, 7, 7, 7, 7, 7, 7,
  247. 7, 7, 1, 1, 1, 7, 7, 7,
  248. 7, 7, 7, 7, 7, 7, 7, 7,
  249. 7, 7, 7, 7, 7, 7, 7, 7,
  250. 7, 7, 7, 7, 7, 7, 7, 7,
  251. 7, 7, 7, 7, 7, 7, 1, 51,
  252. 1, 48, 1, 1, 1, 1, 1, 1,
  253. 1, 1, 1, 1, 1, 1, 1, 1,
  254. 1, 1, 1, 1, 1, 1, 1, 1,
  255. 48, 1, 52, 1, 1, 1, 53, 1,
  256. 1, 1, 1, 1, 1, 1, 1, 1,
  257. 1, 1, 1, 1, 1, 1, 1, 1,
  258. 1, 52, 54, 54, 54, 54, 54, 54,
  259. 54, 55, 1, 54, 54, 54, 54, 54,
  260. 1, 54, 54, 54, 54, 54, 54, 54,
  261. 54, 54, 54, 1, 1, 1, 1, 1,
  262. 1, 1, 54, 54, 54, 54, 54, 54,
  263. 54, 54, 54, 54, 54, 54, 54, 54,
  264. 54, 54, 54, 54, 54, 54, 54, 54,
  265. 54, 54, 54, 54, 1, 1, 1, 54,
  266. 54, 54, 54, 54, 54, 54, 54, 54,
  267. 54, 54, 54, 54, 54, 54, 54, 54,
  268. 54, 54, 54, 54, 54, 54, 54, 54,
  269. 54, 54, 54, 54, 54, 54, 54, 54,
  270. 1, 34, 34, 34, 34, 34, 34, 34,
  271. 34, 34, 34, 34, 34, 34, 34, 34,
  272. 34, 34, 34, 34, 34, 34, 34, 34,
  273. 34, 34, 34, 34, 34, 34, 34, 34,
  274. 34, 34, 34, 34, 34, 34, 34, 34,
  275. 34, 34, 34, 34, 34, 34, 34, 34,
  276. 34, 34, 34, 34, 34, 34, 34, 34,
  277. 34, 34, 34, 34, 34, 34, 34, 34,
  278. 34, 34, 34, 34, 34, 34, 34, 34,
  279. 34, 34, 34, 34, 34, 34, 34, 34,
  280. 34, 34, 34, 34, 34, 34, 34, 34,
  281. 34, 34, 34, 34, 34, 34, 34, 34,
  282. 34, 34, 34, 34, 34, 34, 34, 34,
  283. 34, 34, 34, 34, 34, 34, 34, 34,
  284. 34, 34, 34, 34, 34, 34, 34, 34,
  285. 34, 34, 34, 34, 34, 34, 34, 34,
  286. 34, 1, 1, 1, 1, 1, 1, 1,
  287. 1, 1, 1, 1, 1, 1, 1, 1,
  288. 1, 1, 1, 1, 1, 1, 1, 1,
  289. 1, 1, 1, 1, 1, 1, 1, 1,
  290. 1, 1, 1, 1, 1, 1, 1, 1,
  291. 1, 1, 1, 1, 1, 1, 1, 1,
  292. 1, 1, 1, 1, 1, 1, 1, 1,
  293. 1, 1, 1, 1, 1, 1, 1, 1,
  294. 1, 1, 1, 38, 38, 38, 38, 38,
  295. 38, 38, 38, 38, 38, 38, 38, 38,
  296. 38, 38, 38, 38, 38, 38, 38, 38,
  297. 38, 38, 38, 38, 38, 38, 38, 38,
  298. 38, 39, 40, 40, 40, 40, 40, 40,
  299. 40, 40, 40, 40, 40, 40, 41, 40,
  300. 40, 42, 43, 43, 43, 44, 1, 34,
  301. 34, 34, 34, 34, 34, 34, 34, 34,
  302. 34, 34, 34, 34, 34, 34, 34, 34,
  303. 34, 34, 34, 34, 34, 34, 34, 34,
  304. 34, 34, 34, 34, 34, 34, 34, 34,
  305. 34, 34, 34, 34, 34, 34, 34, 34,
  306. 34, 34, 34, 34, 34, 34, 34, 34,
  307. 34, 34, 34, 34, 34, 34, 34, 34,
  308. 34, 34, 34, 34, 34, 34, 34, 1,
  309. 38, 38, 38, 38, 38, 38, 38, 38,
  310. 38, 38, 38, 38, 38, 38, 38, 38,
  311. 38, 38, 38, 38, 38, 38, 38, 38,
  312. 38, 38, 38, 38, 38, 38, 38, 38,
  313. 1, 38, 38, 38, 38, 38, 38, 38,
  314. 38, 38, 38, 38, 38, 38, 38, 38,
  315. 38, 38, 38, 38, 38, 38, 38, 38,
  316. 38, 38, 38, 38, 38, 38, 38, 38,
  317. 38, 38, 38, 38, 38, 38, 38, 38,
  318. 38, 38, 38, 38, 38, 38, 38, 38,
  319. 38, 38, 38, 38, 38, 38, 38, 38,
  320. 38, 38, 38, 38, 38, 38, 38, 38,
  321. 38, 1, 38, 38, 38, 38, 38, 38,
  322. 38, 38, 38, 38, 38, 38, 38, 38,
  323. 38, 38, 38, 38, 38, 38, 38, 38,
  324. 38, 38, 38, 38, 38, 38, 38, 38,
  325. 38, 38, 1, 40, 40, 40, 40, 40,
  326. 40, 40, 40, 40, 40, 40, 40, 40,
  327. 40, 40, 40, 40, 40, 40, 40, 40,
  328. 40, 40, 40, 40, 40, 40, 40, 40,
  329. 40, 40, 40, 40, 40, 40, 40, 40,
  330. 40, 40, 40, 40, 40, 40, 40, 40,
  331. 40, 40, 40, 1, 40, 40, 40, 40,
  332. 40, 40, 40, 40, 40, 40, 40, 40,
  333. 40, 40, 40, 40, 40, 40, 40, 40,
  334. 40, 40, 40, 40, 40, 40, 40, 40,
  335. 40, 40, 40, 40, 40, 40, 40, 40,
  336. 40, 40, 40, 40, 40, 40, 40, 40,
  337. 40, 40, 40, 40, 40, 40, 40, 40,
  338. 40, 40, 40, 40, 40, 40, 40, 40,
  339. 40, 40, 40, 40, 1, 40, 40, 40,
  340. 40, 40, 40, 40, 40, 40, 40, 40,
  341. 40, 40, 40, 40, 40, 1, 56, 1,
  342. 1, 1, 57, 1, 1, 1, 1, 1,
  343. 1, 1, 1, 1, 1, 1, 1, 1,
  344. 1, 1, 1, 1, 1, 56, 1, 58,
  345. 1, 1, 1, 1, 1, 59, 1, 60,
  346. 1, 61, 1, 1, 1, 1, 1, 1,
  347. 1, 1, 1, 1, 1, 1, 1, 1,
  348. 1, 1, 1, 1, 1, 1, 1, 1,
  349. 61, 1, 62, 1, 1, 1, 63, 1,
  350. 1, 1, 1, 1, 1, 1, 1, 1,
  351. 1, 1, 1, 1, 1, 1, 1, 1,
  352. 1, 62, 54, 54, 54, 54, 54, 54,
  353. 54, 64, 1, 54, 54, 54, 54, 54,
  354. 1, 54, 54, 54, 54, 54, 54, 54,
  355. 54, 54, 54, 1, 65, 1, 1, 1,
  356. 1, 1, 54, 54, 54, 54, 54, 54,
  357. 54, 54, 54, 54, 54, 54, 54, 54,
  358. 54, 54, 54, 54, 54, 54, 54, 54,
  359. 54, 54, 54, 54, 1, 1, 1, 54,
  360. 54, 54, 54, 54, 54, 54, 54, 54,
  361. 54, 54, 54, 54, 54, 54, 54, 54,
  362. 54, 54, 54, 54, 54, 54, 54, 54,
  363. 54, 54, 54, 54, 54, 54, 54, 54,
  364. 1, 66, 66, 66, 66, 66, 66, 66,
  365. 66, 66, 1, 66, 66, 67, 66, 66,
  366. 66, 66, 66, 66, 66, 66, 66, 66,
  367. 66, 66, 66, 66, 66, 66, 66, 66,
  368. 66, 66, 66, 66, 66, 66, 66, 66,
  369. 68, 69, 66, 66, 66, 66, 66, 66,
  370. 66, 66, 66, 66, 66, 66, 66, 66,
  371. 66, 66, 66, 66, 66, 66, 66, 66,
  372. 66, 66, 66, 66, 66, 66, 66, 66,
  373. 66, 66, 66, 66, 66, 66, 66, 66,
  374. 66, 66, 66, 66, 66, 66, 66, 66,
  375. 66, 66, 66, 66, 70, 66, 66, 66,
  376. 66, 66, 66, 66, 66, 66, 66, 66,
  377. 66, 66, 66, 66, 66, 66, 66, 66,
  378. 66, 66, 66, 66, 66, 66, 66, 66,
  379. 66, 66, 66, 66, 66, 66, 66, 66,
  380. 1, 1, 1, 1, 1, 1, 1, 1,
  381. 1, 1, 1, 1, 1, 1, 1, 1,
  382. 1, 1, 1, 1, 1, 1, 1, 1,
  383. 1, 1, 1, 1, 1, 1, 1, 1,
  384. 1, 1, 1, 1, 1, 1, 1, 1,
  385. 1, 1, 1, 1, 1, 1, 1, 1,
  386. 1, 1, 1, 1, 1, 1, 1, 1,
  387. 1, 1, 1, 1, 1, 1, 1, 1,
  388. 1, 1, 71, 71, 71, 71, 71, 71,
  389. 71, 71, 71, 71, 71, 71, 71, 71,
  390. 71, 71, 71, 71, 71, 71, 71, 71,
  391. 71, 71, 71, 71, 71, 71, 71, 71,
  392. 72, 73, 73, 73, 73, 73, 73, 73,
  393. 73, 73, 73, 73, 73, 74, 73, 73,
  394. 75, 76, 76, 76, 77, 1, 78, 78,
  395. 78, 78, 78, 78, 78, 78, 78, 1,
  396. 78, 78, 79, 78, 78, 78, 78, 78,
  397. 78, 78, 78, 78, 78, 78, 78, 78,
  398. 78, 78, 78, 78, 78, 78, 78, 78,
  399. 78, 78, 78, 78, 78, 80, 81, 78,
  400. 78, 78, 78, 78, 78, 78, 78, 78,
  401. 78, 78, 78, 78, 78, 78, 78, 78,
  402. 78, 78, 78, 78, 78, 78, 78, 78,
  403. 78, 78, 78, 78, 78, 78, 78, 78,
  404. 78, 78, 78, 78, 78, 78, 78, 78,
  405. 78, 78, 78, 78, 78, 78, 78, 78,
  406. 78, 82, 78, 78, 78, 78, 78, 78,
  407. 78, 78, 78, 78, 78, 78, 78, 78,
  408. 78, 78, 78, 78, 78, 78, 78, 78,
  409. 78, 78, 78, 78, 78, 78, 78, 78,
  410. 78, 78, 78, 78, 78, 1, 1, 1,
  411. 1, 1, 1, 1, 1, 1, 1, 1,
  412. 1, 1, 1, 1, 1, 1, 1, 1,
  413. 1, 1, 1, 1, 1, 1, 1, 1,
  414. 1, 1, 1, 1, 1, 1, 1, 1,
  415. 1, 1, 1, 1, 1, 1, 1, 1,
  416. 1, 1, 1, 1, 1, 1, 1, 1,
  417. 1, 1, 1, 1, 1, 1, 1, 1,
  418. 1, 1, 1, 1, 1, 1, 1, 83,
  419. 83, 83, 83, 83, 83, 83, 83, 83,
  420. 83, 83, 83, 83, 83, 83, 83, 83,
  421. 83, 83, 83, 83, 83, 83, 83, 83,
  422. 83, 83, 83, 83, 83, 84, 85, 85,
  423. 85, 85, 85, 85, 85, 85, 85, 85,
  424. 85, 85, 86, 85, 85, 87, 88, 88,
  425. 88, 89, 1, 90, 1, 78, 1, 1,
  426. 1, 1, 1, 1, 1, 1, 1, 1,
  427. 1, 1, 1, 1, 1, 1, 1, 1,
  428. 1, 1, 1, 1, 78, 1, 78, 78,
  429. 78, 78, 78, 78, 78, 78, 78, 78,
  430. 78, 78, 78, 78, 78, 78, 78, 78,
  431. 78, 78, 78, 78, 78, 78, 78, 78,
  432. 78, 78, 78, 78, 78, 78, 78, 78,
  433. 78, 78, 78, 78, 78, 78, 78, 78,
  434. 78, 78, 78, 78, 78, 78, 78, 78,
  435. 78, 78, 78, 78, 78, 78, 78, 78,
  436. 78, 78, 78, 78, 78, 78, 78, 78,
  437. 78, 78, 78, 78, 78, 78, 78, 78,
  438. 78, 78, 78, 78, 78, 78, 78, 78,
  439. 78, 78, 78, 78, 78, 78, 78, 78,
  440. 78, 78, 78, 78, 78, 78, 78, 78,
  441. 78, 78, 78, 78, 78, 78, 78, 78,
  442. 78, 78, 78, 78, 78, 78, 78, 78,
  443. 78, 78, 78, 78, 78, 78, 78, 78,
  444. 78, 78, 78, 78, 78, 78, 1, 1,
  445. 1, 1, 1, 1, 1, 1, 1, 1,
  446. 1, 1, 1, 1, 1, 1, 1, 1,
  447. 1, 1, 1, 1, 1, 1, 1, 1,
  448. 1, 1, 1, 1, 1, 1, 1, 1,
  449. 1, 1, 1, 1, 1, 1, 1, 1,
  450. 1, 1, 1, 1, 1, 1, 1, 1,
  451. 1, 1, 1, 1, 1, 1, 1, 1,
  452. 1, 1, 1, 1, 1, 1, 1, 1,
  453. 83, 83, 83, 83, 83, 83, 83, 83,
  454. 83, 83, 83, 83, 83, 83, 83, 83,
  455. 83, 83, 83, 83, 83, 83, 83, 83,
  456. 83, 83, 83, 83, 83, 83, 84, 85,
  457. 85, 85, 85, 85, 85, 85, 85, 85,
  458. 85, 85, 85, 86, 85, 85, 87, 88,
  459. 88, 88, 89, 1, 78, 78, 78, 78,
  460. 78, 78, 78, 78, 78, 78, 78, 78,
  461. 78, 78, 78, 78, 78, 78, 78, 78,
  462. 78, 78, 78, 78, 78, 78, 78, 78,
  463. 78, 78, 78, 78, 78, 78, 78, 78,
  464. 78, 78, 78, 78, 78, 78, 78, 78,
  465. 78, 78, 78, 78, 78, 78, 78, 78,
  466. 78, 78, 78, 78, 78, 78, 78, 78,
  467. 78, 78, 78, 78, 1, 83, 83, 83,
  468. 83, 83, 83, 83, 83, 83, 83, 83,
  469. 83, 83, 83, 83, 83, 83, 83, 83,
  470. 83, 83, 83, 83, 83, 83, 83, 83,
  471. 83, 83, 83, 83, 83, 1, 83, 83,
  472. 83, 83, 83, 83, 83, 83, 83, 83,
  473. 83, 83, 83, 83, 83, 83, 83, 83,
  474. 83, 83, 83, 83, 83, 83, 83, 83,
  475. 83, 83, 83, 83, 83, 83, 83, 83,
  476. 83, 83, 83, 83, 83, 83, 83, 83,
  477. 83, 83, 83, 83, 83, 83, 83, 83,
  478. 83, 83, 83, 83, 83, 83, 83, 83,
  479. 83, 83, 83, 83, 83, 83, 1, 83,
  480. 83, 83, 83, 83, 83, 83, 83, 83,
  481. 83, 83, 83, 83, 83, 83, 83, 83,
  482. 83, 83, 83, 83, 83, 83, 83, 83,
  483. 83, 83, 83, 83, 83, 83, 83, 1,
  484. 85, 85, 85, 85, 85, 85, 85, 85,
  485. 85, 85, 85, 85, 85, 85, 85, 85,
  486. 85, 85, 85, 85, 85, 85, 85, 85,
  487. 85, 85, 85, 85, 85, 85, 85, 85,
  488. 85, 85, 85, 85, 85, 85, 85, 85,
  489. 85, 85, 85, 85, 85, 85, 85, 85,
  490. 1, 85, 85, 85, 85, 85, 85, 85,
  491. 85, 85, 85, 85, 85, 85, 85, 85,
  492. 85, 85, 85, 85, 85, 85, 85, 85,
  493. 85, 85, 85, 85, 85, 85, 85, 85,
  494. 85, 85, 85, 85, 85, 85, 85, 85,
  495. 85, 85, 85, 85, 85, 85, 85, 85,
  496. 85, 85, 85, 85, 85, 85, 85, 85,
  497. 85, 85, 85, 85, 85, 85, 85, 85,
  498. 85, 1, 85, 85, 85, 85, 85, 85,
  499. 85, 85, 85, 85, 85, 85, 85, 85,
  500. 85, 85, 1, 91, 1, 1, 1, 92,
  501. 1, 1, 1, 1, 1, 1, 1, 1,
  502. 1, 1, 1, 1, 1, 1, 1, 1,
  503. 1, 1, 91, 93, 93, 93, 93, 93,
  504. 93, 93, 94, 1, 93, 93, 93, 93,
  505. 93, 1, 93, 93, 93, 93, 93, 93,
  506. 93, 93, 93, 93, 1, 95, 1, 1,
  507. 1, 1, 1, 93, 93, 93, 93, 93,
  508. 93, 93, 93, 93, 93, 93, 93, 93,
  509. 93, 93, 93, 93, 93, 93, 93, 93,
  510. 93, 93, 93, 93, 93, 1, 1, 1,
  511. 93, 93, 93, 93, 93, 93, 93, 93,
  512. 93, 93, 93, 93, 93, 93, 93, 93,
  513. 93, 93, 93, 93, 93, 93, 93, 93,
  514. 93, 93, 93, 93, 93, 93, 93, 93,
  515. 93, 1, 96, 1, 1, 1, 97, 1,
  516. 1, 1, 1, 1, 1, 1, 1, 1,
  517. 1, 1, 1, 1, 1, 1, 1, 1,
  518. 1, 96, 1, 1, 1, 1, 1, 1,
  519. 1, 98, 1, 1, 1, 1, 1, 1,
  520. 1, 1, 1, 1, 1, 1, 1, 1,
  521. 1, 1, 1, 1, 99, 1, 96, 1,
  522. 1, 1, 97, 1, 1, 1, 1, 1,
  523. 1, 1, 1, 1, 1, 1, 1, 1,
  524. 1, 1, 1, 1, 1, 96, 7, 7,
  525. 7, 7, 7, 7, 7, 98, 1, 7,
  526. 7, 7, 7, 7, 1, 7, 7, 7,
  527. 7, 7, 7, 7, 7, 7, 7, 1,
  528. 99, 1, 1, 1, 1, 1, 7, 7,
  529. 7, 7, 7, 7, 7, 7, 7, 7,
  530. 7, 7, 7, 7, 7, 7, 7, 7,
  531. 7, 7, 7, 7, 7, 7, 7, 7,
  532. 1, 1, 1, 7, 7, 7, 7, 7,
  533. 7, 7, 7, 7, 7, 7, 7, 7,
  534. 7, 7, 7, 7, 7, 7, 7, 7,
  535. 7, 7, 7, 7, 7, 7, 7, 7,
  536. 7, 7, 7, 7, 1, 100, 1, 1,
  537. 1, 101, 1, 1, 1, 1, 1, 1,
  538. 1, 1, 1, 1, 1, 1, 1, 1,
  539. 1, 1, 1, 1, 100, 54, 54, 54,
  540. 54, 54, 54, 54, 102, 1, 54, 54,
  541. 54, 54, 54, 1, 54, 54, 54, 54,
  542. 54, 54, 54, 54, 54, 54, 1, 103,
  543. 1, 1, 1, 1, 1, 54, 54, 54,
  544. 54, 54, 54, 54, 54, 54, 54, 54,
  545. 54, 54, 54, 54, 54, 54, 54, 54,
  546. 54, 54, 54, 54, 54, 54, 54, 1,
  547. 1, 1, 54, 54, 54, 54, 54, 54,
  548. 54, 54, 54, 54, 54, 54, 54, 54,
  549. 54, 54, 54, 54, 54, 54, 54, 54,
  550. 54, 54, 54, 54, 54, 54, 54, 54,
  551. 54, 54, 54, 1, 104, 1, 1, 1,
  552. 105, 1, 1, 1, 1, 1, 1, 1,
  553. 1, 1, 1, 1, 1, 1, 1, 1,
  554. 1, 1, 1, 104, 106, 1, 106, 106,
  555. 106, 106, 106, 107, 1, 106, 106, 106,
  556. 106, 106, 1, 106, 106, 106, 106, 106,
  557. 106, 106, 106, 106, 106, 1, 99, 1,
  558. 106, 1, 1, 1, 106, 106, 106, 106,
  559. 106, 106, 106, 106, 106, 106, 106, 106,
  560. 106, 106, 106, 106, 106, 106, 106, 106,
  561. 106, 106, 106, 106, 106, 106, 1, 1,
  562. 1, 106, 106, 106, 106, 106, 106, 106,
  563. 106, 106, 106, 106, 106, 106, 106, 106,
  564. 106, 106, 106, 106, 106, 106, 106, 106,
  565. 106, 106, 106, 106, 106, 106, 106, 106,
  566. 106, 106, 1, 61, 1, 1, 1, 108,
  567. 1, 1, 1, 1, 1, 1, 1, 1,
  568. 1, 1, 1, 1, 1, 1, 1, 1,
  569. 1, 1, 61, 7, 7, 7, 7, 7,
  570. 7, 7, 109, 1, 7, 7, 7, 7,
  571. 7, 1, 7, 7, 7, 7, 7, 7,
  572. 7, 7, 7, 7, 1, 9, 1, 1,
  573. 1, 1, 1, 7, 7, 7, 7, 7,
  574. 7, 7, 7, 7, 7, 7, 7, 7,
  575. 7, 7, 7, 7, 7, 7, 7, 7,
  576. 7, 7, 7, 7, 7, 1, 1, 1,
  577. 7, 7, 7, 7, 7, 7, 7, 7,
  578. 7, 7, 7, 7, 7, 7, 7, 7,
  579. 7, 7, 7, 7, 7, 7, 7, 7,
  580. 7, 7, 7, 7, 7, 7, 7, 7,
  581. 7, 1, 110, 1, 1, 1, 111, 1,
  582. 1, 1, 1, 1, 1, 1, 1, 1,
  583. 1, 1, 1, 1, 1, 1, 1, 1,
  584. 1, 110, 54, 54, 54, 54, 54, 54,
  585. 54, 112, 1, 54, 54, 54, 54, 54,
  586. 1, 54, 54, 54, 54, 54, 54, 54,
  587. 54, 54, 54, 1, 65, 1, 1, 1,
  588. 1, 1, 54, 54, 54, 54, 54, 54,
  589. 54, 54, 54, 54, 54, 54, 54, 54,
  590. 54, 54, 54, 54, 54, 54, 54, 54,
  591. 54, 54, 54, 54, 1, 1, 1, 54,
  592. 54, 54, 54, 54, 54, 54, 54, 54,
  593. 54, 54, 54, 54, 54, 54, 54, 54,
  594. 54, 54, 54, 54, 54, 54, 54, 54,
  595. 54, 54, 54, 54, 54, 54, 54, 54,
  596. 1, 1, 0,
  597. ]
  598. 1 class << self
  599. 1 attr_accessor :_trans_targs
  600. 1 private :_trans_targs, :_trans_targs=
  601. end
  602. 1 self._trans_targs = [
  603. 2, 0, 2, 3, 47, 4, 5, 7,
  604. 34, 18, 6, 7, 8, 9, 10, 51,
  605. 12, 31, 9, 10, 12, 31, 11, 13,
  606. 14, 48, 23, 24, 25, 26, 27, 28,
  607. 29, 30, 13, 14, 48, 23, 24, 25,
  608. 26, 27, 28, 29, 30, 15, 17, 49,
  609. 19, 20, 22, 21, 19, 20, 7, 22,
  610. 9, 10, 12, 31, 33, 52, 4, 5,
  611. 34, 18, 36, 37, 36, 54, 39, 40,
  612. 41, 42, 43, 44, 45, 46, 36, 37,
  613. 36, 54, 39, 40, 41, 42, 43, 44,
  614. 45, 46, 38, 4, 5, 47, 34, 18,
  615. 49, 16, 50, 18, 49, 16, 50, 18,
  616. 52, 32, 51, 53, 32, 53, 52, 32,
  617. 53,
  618. ]
  619. 1 class << self
  620. 1 attr_accessor :_trans_actions
  621. 1 private :_trans_actions, :_trans_actions=
  622. end
  623. 1 self._trans_actions = [
  624. 1, 0, 0, 2, 3, 0, 0, 4,
  625. 5, 0, 0, 0, 6, 7, 7, 7,
  626. 7, 8, 0, 0, 0, 5, 0, 9,
  627. 9, 10, 9, 9, 9, 9, 9, 9,
  628. 9, 9, 0, 0, 11, 0, 0, 0,
  629. 0, 0, 0, 0, 0, 0, 0, 0,
  630. 0, 0, 5, 0, 12, 12, 13, 14,
  631. 12, 12, 12, 14, 0, 0, 12, 12,
  632. 14, 12, 15, 15, 16, 17, 15, 15,
  633. 15, 15, 15, 15, 15, 15, 0, 0,
  634. 5, 18, 0, 0, 0, 0, 0, 0,
  635. 0, 0, 0, 19, 19, 0, 20, 19,
  636. 21, 21, 22, 21, 23, 23, 24, 23,
  637. 21, 21, 0, 25, 0, 5, 12, 12,
  638. 14,
  639. ]
  640. 1 class << self
  641. 1 attr_accessor :_eof_actions
  642. 1 private :_eof_actions, :_eof_actions=
  643. end
  644. 1 self._eof_actions = [
  645. 0, 0, 0, 0, 0, 0, 0, 0,
  646. 0, 0, 0, 0, 0, 0, 0, 0,
  647. 0, 0, 0, 0, 0, 0, 0, 0,
  648. 0, 0, 0, 0, 0, 0, 0, 0,
  649. 0, 0, 0, 0, 0, 0, 0, 0,
  650. 0, 0, 0, 0, 0, 0, 0, 19,
  651. 21, 21, 23, 21, 0, 12, 0,
  652. ]
  653. 1 class << self
  654. 1 attr_accessor :start
  655. end
  656. 1 self.start = 1
  657. 1 class << self
  658. 1 attr_accessor :first_final
  659. end
  660. 1 self.first_final = 47
  661. 1 class << self
  662. 1 attr_accessor :error
  663. end
  664. 1 self.error = 0
  665. 1 class << self
  666. 1 attr_accessor :en_comment_tail
  667. end
  668. 1 self.en_comment_tail = 35
  669. 1 class << self
  670. 1 attr_accessor :en_main
  671. end
  672. 1 self.en_main = 1
  673. 1 def self.parse(data)
  674. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  675. return ContentTypeStruct.new("text", "plain", []) if Mail::Utilities.blank?(data)
  676. content_type = ContentTypeStruct.new(nil, nil, [])
  677. # Parser state
  678. main_type_s = sub_type_s = param_attr_s = param_attr = nil
  679. qstr_s = qstr = param_val_s = nil
  680. # 5.1 Variables Used by Ragel
  681. p = 0
  682. eof = pe = data.length
  683. stack = []
  684. begin
  685. p ||= 0
  686. pe ||= data.length
  687. cs = start
  688. top = 0
  689. end
  690. begin
  691. testEof = false
  692. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  693. _goto_level = 0
  694. _resume = 10
  695. _eof_trans = 15
  696. _again = 20
  697. _test_eof = 30
  698. _out = 40
  699. while true
  700. if _goto_level <= 0
  701. if p == pe
  702. _goto_level = _test_eof
  703. next
  704. end
  705. if cs == 0
  706. _goto_level = _out
  707. next
  708. end
  709. end
  710. if _goto_level <= _resume
  711. _keys = cs << 1
  712. _inds = _index_offsets[cs]
  713. _slen = _key_spans[cs]
  714. _wide = data[p].ord
  715. _trans = if (_slen > 0 &&
  716. _trans_keys[_keys] <= _wide &&
  717. _wide <= _trans_keys[_keys + 1])
  718. _indicies[_inds + _wide - _trans_keys[_keys]]
  719. else
  720. _indicies[_inds + _slen]
  721. end
  722. cs = _trans_targs[_trans]
  723. if _trans_actions[_trans] != 0
  724. case _trans_actions[_trans]
  725. when 1
  726. begin
  727. main_type_s = p
  728. end
  729. when 2
  730. begin
  731. content_type.main_type = chars(data, main_type_s, p - 1).downcase
  732. end
  733. when 3
  734. begin
  735. sub_type_s = p
  736. end
  737. when 19
  738. begin
  739. content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
  740. end
  741. when 4
  742. begin
  743. param_attr_s = p
  744. end
  745. when 6
  746. begin
  747. param_attr = chars(data, param_attr_s, p - 1)
  748. end
  749. when 9
  750. begin
  751. qstr_s = p
  752. end
  753. when 11
  754. begin
  755. qstr = chars(data, qstr_s, p - 1)
  756. end
  757. when 7
  758. begin
  759. param_val_s = p
  760. end
  761. when 21
  762. begin
  763. if param_attr.nil?
  764. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  765. end
  766. # Use quoted s value if one exists, otherwise use parameter value
  767. value = qstr || chars(data, param_val_s, p - 1)
  768. content_type.parameters << {param_attr => value}
  769. param_attr = nil
  770. qstr = nil
  771. end
  772. when 12
  773. begin
  774. end
  775. when 15
  776. begin
  777. end
  778. when 5
  779. begin
  780. begin
  781. stack[top] = cs
  782. top += 1
  783. cs = 35
  784. _goto_level = _again
  785. next
  786. end
  787. end
  788. when 18
  789. begin
  790. begin
  791. top -= 1
  792. cs = stack[top]
  793. _goto_level = _again
  794. next
  795. end
  796. end
  797. when 20
  798. begin
  799. content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
  800. end
  801. begin
  802. begin
  803. stack[top] = cs
  804. top += 1
  805. cs = 35
  806. _goto_level = _again
  807. next
  808. end
  809. end
  810. when 10
  811. begin
  812. qstr_s = p
  813. end
  814. begin
  815. qstr = chars(data, qstr_s, p - 1)
  816. end
  817. when 8
  818. begin
  819. param_val_s = p
  820. end
  821. begin
  822. begin
  823. stack[top] = cs
  824. top += 1
  825. cs = 35
  826. _goto_level = _again
  827. next
  828. end
  829. end
  830. when 25
  831. begin
  832. if param_attr.nil?
  833. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  834. end
  835. # Use quoted s value if one exists, otherwise use parameter value
  836. value = qstr || chars(data, param_val_s, p - 1)
  837. content_type.parameters << {param_attr => value}
  838. param_attr = nil
  839. qstr = nil
  840. end
  841. begin
  842. begin
  843. stack[top] = cs
  844. top += 1
  845. cs = 35
  846. _goto_level = _again
  847. next
  848. end
  849. end
  850. when 13
  851. begin
  852. end
  853. begin
  854. param_attr_s = p
  855. end
  856. when 23
  857. begin
  858. end
  859. begin
  860. if param_attr.nil?
  861. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  862. end
  863. # Use quoted s value if one exists, otherwise use parameter value
  864. value = qstr || chars(data, param_val_s, p - 1)
  865. content_type.parameters << {param_attr => value}
  866. param_attr = nil
  867. qstr = nil
  868. end
  869. when 14
  870. begin
  871. end
  872. begin
  873. begin
  874. stack[top] = cs
  875. top += 1
  876. cs = 35
  877. _goto_level = _again
  878. next
  879. end
  880. end
  881. when 16
  882. begin
  883. end
  884. begin
  885. begin
  886. stack[top] = cs
  887. top += 1
  888. cs = 35
  889. _goto_level = _again
  890. next
  891. end
  892. end
  893. when 17
  894. begin
  895. end
  896. begin
  897. begin
  898. top -= 1
  899. cs = stack[top]
  900. _goto_level = _again
  901. next
  902. end
  903. end
  904. when 22
  905. begin
  906. begin
  907. stack[top] = cs
  908. top += 1
  909. cs = 35
  910. _goto_level = _again
  911. next
  912. end
  913. end
  914. begin
  915. if param_attr.nil?
  916. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  917. end
  918. # Use quoted s value if one exists, otherwise use parameter value
  919. value = qstr || chars(data, param_val_s, p - 1)
  920. content_type.parameters << {param_attr => value}
  921. param_attr = nil
  922. qstr = nil
  923. end
  924. when 24
  925. begin
  926. end
  927. begin
  928. begin
  929. stack[top] = cs
  930. top += 1
  931. cs = 35
  932. _goto_level = _again
  933. next
  934. end
  935. end
  936. begin
  937. if param_attr.nil?
  938. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  939. end
  940. # Use quoted s value if one exists, otherwise use parameter value
  941. value = qstr || chars(data, param_val_s, p - 1)
  942. content_type.parameters << {param_attr => value}
  943. param_attr = nil
  944. qstr = nil
  945. end
  946. end
  947. end
  948. end
  949. if _goto_level <= _again
  950. if cs == 0
  951. _goto_level = _out
  952. next
  953. end
  954. p += 1
  955. if p != pe
  956. _goto_level = _resume
  957. next
  958. end
  959. end
  960. if _goto_level <= _test_eof
  961. if p == eof
  962. case _eof_actions[cs]
  963. when 19
  964. begin
  965. content_type.sub_type = chars(data, sub_type_s, p - 1).downcase
  966. end
  967. when 21
  968. begin
  969. if param_attr.nil?
  970. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  971. end
  972. # Use quoted s value if one exists, otherwise use parameter value
  973. value = qstr || chars(data, param_val_s, p - 1)
  974. content_type.parameters << {param_attr => value}
  975. param_attr = nil
  976. qstr = nil
  977. end
  978. when 12
  979. begin
  980. end
  981. when 23
  982. begin
  983. end
  984. begin
  985. if param_attr.nil?
  986. raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
  987. end
  988. # Use quoted s value if one exists, otherwise use parameter value
  989. value = qstr || chars(data, param_val_s, p - 1)
  990. content_type.parameters << {param_attr => value}
  991. param_attr = nil
  992. qstr = nil
  993. end
  994. end
  995. end
  996. end
  997. if _goto_level <= _out
  998. break
  999. end
  1000. end
  1001. end
  1002. if p != eof || cs < 47
  1003. raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
  1004. end
  1005. content_type
  1006. end
  1007. end
  1008. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/date_time_parser.rb

26.74% lines covered

187 relevant lines. 50 lines covered and 137 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module DateTimeParser
  6. 1 extend Mail::ParserTools
  7. 1 DateTimeStruct = Struct.new(:date_string, :time_string, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 87, 9, 87,
  14. 10, 10, 9, 32, 9,
  15. 87, 9, 83, 9, 83,
  16. 10, 10, 9, 32, 9, 83,
  17. 112, 117, 114, 114, 9,
  18. 57, 10, 10, 9, 32,
  19. 9, 57, 48, 57, 9, 57,
  20. 9, 57, 10, 10, 9,
  21. 32, 9, 57, 48, 57,
  22. 9, 58, 10, 10, 9, 32,
  23. 9, 58, 9, 57, 10,
  24. 10, 9, 32, 9, 57,
  25. 48, 57, 9, 58, 9, 122,
  26. 10, 10, 9, 32, 9,
  27. 58, 9, 57, 10, 10,
  28. 9, 32, 9, 57, 48, 57,
  29. 9, 40, 9, 122, 10,
  30. 10, 9, 32, 9, 40,
  31. 48, 57, 48, 57, 48, 57,
  32. 48, 57, 10, 10, 9,
  33. 32, 84, 84, 103, 103,
  34. 101, 101, 99, 99, 101, 101,
  35. 98, 98, 97, 117, 110,
  36. 110, 108, 110, 97, 97,
  37. 114, 121, 111, 111, 118, 118,
  38. 99, 99, 116, 116, 101,
  39. 101, 112, 112, 114, 114,
  40. 105, 105, 9, 44, 10, 10,
  41. 9, 32, 9, 44, 9,
  42. 57, 9, 57, 10, 10,
  43. 9, 32, 9, 57, 111, 111,
  44. 110, 110, 97, 117, 116,
  45. 116, 104, 117, 117, 117,
  46. 101, 101, 101, 101, 100, 100,
  47. 1, 244, 1, 244, 10,
  48. 10, 9, 32, 0, 244,
  49. 128, 191, 160, 191, 128, 191,
  50. 128, 159, 144, 191, 128,
  51. 191, 128, 143, 9, 40,
  52. 9, 40, 9, 40, 9, 83,
  53. 9, 77, 9, 84, 0,
  54. 0, 0,
  55. ]
  56. 1 class << self
  57. 1 attr_accessor :_key_spans
  58. 1 private :_key_spans, :_key_spans=
  59. end
  60. 1 self._key_spans = [
  61. 0, 79, 79, 1, 24, 79, 75, 75,
  62. 1, 24, 75, 6, 1, 49, 1, 24,
  63. 49, 10, 49, 49, 1, 24, 49, 10,
  64. 50, 1, 24, 50, 49, 1, 24, 49,
  65. 10, 50, 114, 1, 24, 50, 49, 1,
  66. 24, 49, 10, 32, 114, 1, 24, 32,
  67. 10, 10, 10, 10, 1, 24, 1, 1,
  68. 1, 1, 1, 1, 21, 1, 3, 1,
  69. 8, 1, 1, 1, 1, 1, 1, 1,
  70. 1, 36, 1, 24, 36, 49, 49, 1,
  71. 24, 49, 1, 1, 21, 1, 14, 1,
  72. 1, 1, 1, 244, 244, 1, 24, 245,
  73. 64, 32, 64, 32, 48, 64, 16, 32,
  74. 32, 32, 75, 69, 76, 0,
  75. ]
  76. 1 class << self
  77. 1 attr_accessor :_index_offsets
  78. 1 private :_index_offsets, :_index_offsets=
  79. end
  80. 1 self._index_offsets = [
  81. 0, 0, 80, 160, 162, 187, 267, 343,
  82. 419, 421, 446, 522, 529, 531, 581, 583,
  83. 608, 658, 669, 719, 769, 771, 796, 846,
  84. 857, 908, 910, 935, 986, 1036, 1038, 1063,
  85. 1113, 1124, 1175, 1290, 1292, 1317, 1368, 1418,
  86. 1420, 1445, 1495, 1506, 1539, 1654, 1656, 1681,
  87. 1714, 1725, 1736, 1747, 1758, 1760, 1785, 1787,
  88. 1789, 1791, 1793, 1795, 1797, 1819, 1821, 1825,
  89. 1827, 1836, 1838, 1840, 1842, 1844, 1846, 1848,
  90. 1850, 1852, 1889, 1891, 1916, 1953, 2003, 2053,
  91. 2055, 2080, 2130, 2132, 2134, 2156, 2158, 2173,
  92. 2175, 2177, 2179, 2181, 2426, 2671, 2673, 2698,
  93. 2944, 3009, 3042, 3107, 3140, 3189, 3254, 3271,
  94. 3304, 3337, 3370, 3446, 3516, 3593,
  95. ]
  96. 1 class << self
  97. 1 attr_accessor :_indicies
  98. 1 private :_indicies, :_indicies=
  99. end
  100. 1 self._indicies = [
  101. 0, 1, 1, 1, 2, 1, 1, 1,
  102. 1, 1, 1, 1, 1, 1, 1, 1,
  103. 1, 1, 1, 1, 1, 1, 1, 0,
  104. 1, 1, 1, 1, 1, 1, 1, 3,
  105. 1, 1, 1, 1, 1, 1, 1, 4,
  106. 4, 4, 4, 4, 4, 4, 4, 4,
  107. 4, 1, 1, 1, 1, 1, 1, 1,
  108. 1, 1, 1, 1, 1, 5, 1, 1,
  109. 1, 1, 1, 1, 6, 1, 1, 1,
  110. 1, 1, 7, 8, 1, 1, 9, 1,
  111. 10, 1, 1, 1, 11, 1, 1, 1,
  112. 1, 1, 1, 1, 1, 1, 1, 1,
  113. 1, 1, 1, 1, 1, 1, 1, 10,
  114. 1, 1, 1, 1, 1, 1, 1, 12,
  115. 1, 1, 1, 1, 1, 1, 1, 13,
  116. 13, 13, 13, 13, 13, 13, 13, 13,
  117. 13, 1, 1, 1, 1, 1, 1, 1,
  118. 1, 1, 1, 1, 1, 5, 1, 1,
  119. 1, 1, 1, 1, 6, 1, 1, 1,
  120. 1, 1, 7, 8, 1, 1, 9, 1,
  121. 14, 1, 10, 1, 1, 1, 1, 1,
  122. 1, 1, 1, 1, 1, 1, 1, 1,
  123. 1, 1, 1, 1, 1, 1, 1, 1,
  124. 1, 10, 1, 15, 1, 1, 1, 16,
  125. 1, 1, 1, 1, 1, 1, 1, 1,
  126. 1, 1, 1, 1, 1, 1, 1, 1,
  127. 1, 1, 15, 1, 1, 1, 1, 1,
  128. 1, 1, 17, 1, 1, 1, 1, 1,
  129. 1, 1, 18, 18, 18, 18, 18, 18,
  130. 18, 18, 18, 18, 1, 1, 1, 1,
  131. 1, 1, 1, 1, 1, 1, 1, 1,
  132. 19, 1, 1, 1, 1, 1, 1, 20,
  133. 1, 1, 1, 1, 1, 21, 22, 1,
  134. 1, 23, 1, 24, 1, 1, 1, 25,
  135. 1, 1, 1, 1, 1, 1, 1, 1,
  136. 1, 1, 1, 1, 1, 1, 1, 1,
  137. 1, 1, 24, 1, 1, 1, 1, 1,
  138. 1, 1, 26, 1, 1, 1, 1, 1,
  139. 1, 1, 24, 24, 24, 24, 24, 24,
  140. 24, 24, 24, 24, 1, 1, 1, 1,
  141. 1, 1, 1, 27, 1, 1, 28, 1,
  142. 29, 1, 1, 1, 30, 1, 1, 31,
  143. 32, 33, 1, 1, 1, 34, 1, 24,
  144. 1, 1, 1, 25, 1, 1, 1, 1,
  145. 1, 1, 1, 1, 1, 1, 1, 1,
  146. 1, 1, 1, 1, 1, 1, 24, 1,
  147. 1, 1, 1, 1, 1, 1, 26, 1,
  148. 1, 1, 1, 1, 1, 1, 1, 1,
  149. 1, 1, 1, 1, 1, 1, 1, 1,
  150. 1, 1, 1, 1, 1, 1, 1, 27,
  151. 1, 1, 28, 1, 29, 1, 1, 1,
  152. 30, 1, 1, 31, 32, 33, 1, 1,
  153. 1, 34, 1, 35, 1, 24, 1, 1,
  154. 1, 1, 1, 1, 1, 1, 1, 1,
  155. 1, 1, 1, 1, 1, 1, 1, 1,
  156. 1, 1, 1, 1, 24, 1, 36, 1,
  157. 1, 1, 37, 1, 1, 1, 1, 1,
  158. 1, 1, 1, 1, 1, 1, 1, 1,
  159. 1, 1, 1, 1, 1, 36, 1, 1,
  160. 1, 1, 1, 1, 1, 38, 1, 1,
  161. 1, 1, 1, 1, 1, 1, 1, 1,
  162. 1, 1, 1, 1, 1, 1, 1, 1,
  163. 1, 1, 1, 1, 1, 1, 39, 1,
  164. 1, 40, 1, 41, 1, 1, 1, 42,
  165. 1, 1, 43, 44, 45, 1, 1, 1,
  166. 46, 1, 47, 1, 1, 1, 1, 48,
  167. 1, 49, 1, 49, 1, 1, 1, 50,
  168. 1, 1, 1, 1, 1, 1, 1, 1,
  169. 1, 1, 1, 1, 1, 1, 1, 1,
  170. 1, 1, 49, 1, 1, 1, 1, 1,
  171. 1, 1, 51, 1, 1, 1, 1, 1,
  172. 1, 1, 52, 52, 52, 52, 52, 52,
  173. 52, 52, 52, 52, 1, 53, 1, 49,
  174. 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 1, 1, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 49, 1,
  177. 54, 1, 1, 1, 55, 1, 1, 1,
  178. 1, 1, 1, 1, 1, 1, 1, 1,
  179. 1, 1, 1, 1, 1, 1, 1, 54,
  180. 1, 1, 1, 1, 1, 1, 1, 56,
  181. 1, 1, 1, 1, 1, 1, 1, 57,
  182. 57, 57, 57, 57, 57, 57, 57, 57,
  183. 57, 1, 58, 58, 58, 58, 58, 58,
  184. 58, 58, 58, 58, 1, 59, 1, 1,
  185. 1, 60, 1, 1, 1, 1, 1, 1,
  186. 1, 1, 1, 1, 1, 1, 1, 1,
  187. 1, 1, 1, 1, 59, 1, 1, 1,
  188. 1, 1, 1, 1, 61, 1, 1, 1,
  189. 1, 1, 1, 1, 58, 58, 58, 58,
  190. 58, 58, 58, 58, 58, 58, 1, 59,
  191. 1, 1, 1, 60, 1, 1, 1, 1,
  192. 1, 1, 1, 1, 1, 1, 1, 1,
  193. 1, 1, 1, 1, 1, 1, 59, 1,
  194. 1, 1, 1, 1, 1, 1, 61, 1,
  195. 1, 1, 1, 1, 1, 1, 62, 62,
  196. 62, 62, 62, 62, 62, 62, 62, 62,
  197. 1, 63, 1, 59, 1, 1, 1, 1,
  198. 1, 1, 1, 1, 1, 1, 1, 1,
  199. 1, 1, 1, 1, 1, 1, 1, 1,
  200. 1, 1, 59, 1, 64, 1, 1, 1,
  201. 65, 1, 1, 1, 1, 1, 1, 1,
  202. 1, 1, 1, 1, 1, 1, 1, 1,
  203. 1, 1, 1, 64, 1, 1, 1, 1,
  204. 1, 1, 1, 66, 1, 1, 1, 1,
  205. 1, 1, 1, 67, 67, 67, 67, 67,
  206. 67, 67, 67, 67, 67, 1, 68, 68,
  207. 68, 68, 68, 68, 68, 68, 68, 68,
  208. 1, 68, 1, 1, 1, 69, 1, 1,
  209. 1, 1, 1, 1, 1, 1, 1, 1,
  210. 1, 1, 1, 1, 1, 1, 1, 1,
  211. 68, 1, 1, 1, 1, 1, 1, 1,
  212. 70, 1, 1, 1, 1, 1, 1, 1,
  213. 1, 1, 1, 1, 1, 1, 1, 1,
  214. 1, 1, 71, 1, 72, 1, 68, 1,
  215. 1, 1, 1, 1, 1, 1, 1, 1,
  216. 1, 1, 1, 1, 1, 1, 1, 1,
  217. 1, 1, 1, 1, 1, 68, 1, 73,
  218. 1, 1, 1, 74, 1, 1, 1, 1,
  219. 1, 1, 1, 1, 1, 1, 1, 1,
  220. 1, 1, 1, 1, 1, 1, 73, 1,
  221. 1, 1, 1, 1, 1, 1, 75, 1,
  222. 1, 1, 1, 1, 1, 1, 1, 1,
  223. 1, 1, 1, 1, 1, 1, 1, 1,
  224. 76, 1, 71, 1, 1, 1, 77, 1,
  225. 1, 1, 1, 1, 1, 1, 1, 1,
  226. 1, 1, 1, 1, 1, 1, 1, 1,
  227. 1, 71, 1, 1, 1, 1, 1, 1,
  228. 1, 78, 1, 1, 1, 1, 1, 1,
  229. 1, 79, 79, 79, 79, 79, 79, 79,
  230. 79, 79, 79, 1, 80, 1, 71, 1,
  231. 1, 1, 1, 1, 1, 1, 1, 1,
  232. 1, 1, 1, 1, 1, 1, 1, 1,
  233. 1, 1, 1, 1, 1, 71, 1, 76,
  234. 1, 1, 1, 81, 1, 1, 1, 1,
  235. 1, 1, 1, 1, 1, 1, 1, 1,
  236. 1, 1, 1, 1, 1, 1, 76, 1,
  237. 1, 1, 1, 1, 1, 1, 82, 1,
  238. 1, 1, 1, 1, 1, 1, 83, 83,
  239. 83, 83, 83, 83, 83, 83, 83, 83,
  240. 1, 84, 84, 84, 84, 84, 84, 84,
  241. 84, 84, 84, 1, 85, 1, 1, 1,
  242. 86, 1, 1, 1, 1, 1, 1, 1,
  243. 1, 1, 1, 1, 1, 1, 1, 1,
  244. 1, 1, 1, 85, 1, 1, 1, 1,
  245. 1, 1, 1, 87, 1, 1, 1, 1,
  246. 1, 1, 1, 1, 1, 1, 1, 1,
  247. 1, 1, 1, 1, 1, 88, 1, 85,
  248. 1, 1, 1, 86, 1, 1, 1, 1,
  249. 1, 1, 1, 1, 1, 1, 1, 1,
  250. 1, 1, 1, 1, 1, 1, 85, 1,
  251. 1, 1, 1, 1, 1, 1, 87, 1,
  252. 1, 89, 1, 89, 1, 1, 1, 1,
  253. 1, 1, 1, 1, 1, 1, 1, 1,
  254. 88, 1, 1, 1, 1, 1, 1, 90,
  255. 90, 91, 90, 91, 90, 92, 90, 90,
  256. 1, 90, 90, 91, 90, 90, 91, 90,
  257. 90, 90, 90, 93, 90, 90, 90, 90,
  258. 90, 1, 1, 1, 1, 1, 1, 90,
  259. 90, 90, 90, 90, 90, 90, 90, 90,
  260. 1, 90, 90, 90, 90, 90, 90, 90,
  261. 90, 90, 90, 90, 90, 90, 90, 90,
  262. 90, 1, 94, 1, 85, 1, 1, 1,
  263. 1, 1, 1, 1, 1, 1, 1, 1,
  264. 1, 1, 1, 1, 1, 1, 1, 1,
  265. 1, 1, 1, 85, 1, 95, 1, 1,
  266. 1, 96, 1, 1, 1, 1, 1, 1,
  267. 1, 1, 1, 1, 1, 1, 1, 1,
  268. 1, 1, 1, 1, 95, 1, 1, 1,
  269. 1, 1, 1, 1, 97, 1, 1, 1,
  270. 1, 1, 1, 1, 1, 1, 1, 1,
  271. 1, 1, 1, 1, 1, 1, 98, 1,
  272. 88, 1, 1, 1, 99, 1, 1, 1,
  273. 1, 1, 1, 1, 1, 1, 1, 1,
  274. 1, 1, 1, 1, 1, 1, 1, 88,
  275. 1, 1, 1, 1, 1, 1, 1, 100,
  276. 1, 1, 1, 1, 1, 1, 1, 101,
  277. 101, 101, 101, 101, 101, 101, 101, 101,
  278. 101, 1, 102, 1, 88, 1, 1, 1,
  279. 1, 1, 1, 1, 1, 1, 1, 1,
  280. 1, 1, 1, 1, 1, 1, 1, 1,
  281. 1, 1, 1, 88, 1, 98, 1, 1,
  282. 1, 103, 1, 1, 1, 1, 1, 1,
  283. 1, 1, 1, 1, 1, 1, 1, 1,
  284. 1, 1, 1, 1, 98, 1, 1, 1,
  285. 1, 1, 1, 1, 104, 1, 1, 1,
  286. 1, 1, 1, 1, 105, 105, 105, 105,
  287. 105, 105, 105, 105, 105, 105, 1, 106,
  288. 106, 106, 106, 106, 106, 106, 106, 106,
  289. 106, 1, 107, 1, 1, 1, 108, 1,
  290. 1, 1, 1, 1, 1, 1, 1, 1,
  291. 1, 1, 1, 1, 1, 1, 1, 1,
  292. 1, 107, 1, 1, 1, 1, 1, 1,
  293. 1, 109, 1, 107, 1, 1, 1, 108,
  294. 1, 1, 1, 1, 1, 1, 1, 1,
  295. 1, 1, 1, 1, 1, 1, 1, 1,
  296. 1, 1, 107, 1, 1, 1, 1, 1,
  297. 1, 1, 109, 1, 1, 89, 1, 89,
  298. 1, 1, 1, 1, 1, 1, 1, 1,
  299. 1, 1, 1, 1, 1, 1, 1, 1,
  300. 1, 1, 1, 90, 90, 91, 90, 91,
  301. 90, 92, 90, 90, 1, 90, 90, 91,
  302. 90, 90, 91, 90, 90, 90, 90, 93,
  303. 90, 90, 90, 90, 90, 1, 1, 1,
  304. 1, 1, 1, 90, 90, 90, 90, 90,
  305. 90, 90, 90, 90, 1, 90, 90, 90,
  306. 90, 90, 90, 90, 90, 90, 90, 90,
  307. 90, 90, 90, 90, 90, 1, 110, 1,
  308. 107, 1, 1, 1, 1, 1, 1, 1,
  309. 1, 1, 1, 1, 1, 1, 1, 1,
  310. 1, 1, 1, 1, 1, 1, 1, 107,
  311. 1, 111, 1, 1, 1, 112, 1, 1,
  312. 1, 1, 1, 1, 1, 1, 1, 1,
  313. 1, 1, 1, 1, 1, 1, 1, 1,
  314. 111, 1, 1, 1, 1, 1, 1, 1,
  315. 113, 1, 114, 114, 114, 114, 114, 114,
  316. 114, 114, 114, 114, 1, 115, 115, 115,
  317. 115, 115, 115, 115, 115, 115, 115, 1,
  318. 116, 116, 116, 116, 116, 116, 116, 116,
  319. 116, 116, 1, 90, 90, 90, 90, 90,
  320. 90, 90, 90, 90, 90, 1, 117, 1,
  321. 118, 1, 1, 1, 1, 1, 1, 1,
  322. 1, 1, 1, 1, 1, 1, 1, 1,
  323. 1, 1, 1, 1, 1, 1, 1, 118,
  324. 1, 90, 1, 49, 1, 119, 1, 49,
  325. 1, 120, 1, 49, 1, 121, 1, 1,
  326. 1, 1, 1, 1, 1, 1, 1, 1,
  327. 1, 1, 1, 1, 1, 1, 1, 1,
  328. 1, 122, 1, 49, 1, 49, 1, 49,
  329. 1, 123, 1, 49, 1, 1, 1, 1,
  330. 1, 1, 49, 1, 124, 1, 49, 1,
  331. 125, 1, 49, 1, 126, 1, 49, 1,
  332. 127, 1, 128, 1, 128, 1, 1, 1,
  333. 129, 1, 1, 1, 1, 1, 1, 1,
  334. 1, 1, 1, 1, 1, 1, 1, 1,
  335. 1, 1, 1, 128, 1, 1, 1, 1,
  336. 1, 1, 1, 130, 1, 1, 1, 131,
  337. 1, 132, 1, 128, 1, 1, 1, 1,
  338. 1, 1, 1, 1, 1, 1, 1, 1,
  339. 1, 1, 1, 1, 1, 1, 1, 1,
  340. 1, 1, 128, 1, 133, 1, 1, 1,
  341. 134, 1, 1, 1, 1, 1, 1, 1,
  342. 1, 1, 1, 1, 1, 1, 1, 1,
  343. 1, 1, 1, 133, 1, 1, 1, 1,
  344. 1, 1, 1, 135, 1, 1, 1, 136,
  345. 1, 137, 1, 1, 1, 138, 1, 1,
  346. 1, 1, 1, 1, 1, 1, 1, 1,
  347. 1, 1, 1, 1, 1, 1, 1, 1,
  348. 137, 1, 1, 1, 1, 1, 1, 1,
  349. 139, 1, 1, 1, 1, 1, 1, 1,
  350. 4, 4, 4, 4, 4, 4, 4, 4,
  351. 4, 4, 1, 140, 1, 1, 1, 141,
  352. 1, 1, 1, 1, 1, 1, 1, 1,
  353. 1, 1, 1, 1, 1, 1, 1, 1,
  354. 1, 1, 140, 1, 1, 1, 1, 1,
  355. 1, 1, 142, 1, 1, 1, 1, 1,
  356. 1, 1, 13, 13, 13, 13, 13, 13,
  357. 13, 13, 13, 13, 1, 143, 1, 140,
  358. 1, 1, 1, 1, 1, 1, 1, 1,
  359. 1, 1, 1, 1, 1, 1, 1, 1,
  360. 1, 1, 1, 1, 1, 1, 140, 1,
  361. 144, 1, 1, 1, 145, 1, 1, 1,
  362. 1, 1, 1, 1, 1, 1, 1, 1,
  363. 1, 1, 1, 1, 1, 1, 1, 144,
  364. 1, 1, 1, 1, 1, 1, 1, 146,
  365. 1, 1, 1, 1, 1, 1, 1, 18,
  366. 18, 18, 18, 18, 18, 18, 18, 18,
  367. 18, 1, 147, 1, 128, 1, 148, 1,
  368. 1, 1, 1, 1, 1, 1, 1, 1,
  369. 1, 1, 1, 1, 1, 1, 1, 1,
  370. 1, 1, 147, 1, 128, 1, 149, 1,
  371. 1, 1, 1, 1, 1, 1, 1, 1,
  372. 1, 1, 1, 150, 1, 128, 1, 128,
  373. 1, 151, 1, 128, 1, 152, 152, 152,
  374. 152, 152, 152, 152, 152, 152, 1, 152,
  375. 152, 153, 152, 152, 152, 152, 152, 152,
  376. 152, 152, 152, 152, 152, 152, 152, 152,
  377. 152, 152, 152, 152, 152, 152, 152, 152,
  378. 152, 152, 152, 152, 154, 155, 152, 152,
  379. 152, 152, 152, 152, 152, 152, 152, 152,
  380. 152, 152, 152, 152, 152, 152, 152, 152,
  381. 152, 152, 152, 152, 152, 152, 152, 152,
  382. 152, 152, 152, 152, 152, 152, 152, 152,
  383. 152, 152, 152, 152, 152, 152, 152, 152,
  384. 152, 152, 152, 152, 152, 152, 152, 152,
  385. 156, 152, 152, 152, 152, 152, 152, 152,
  386. 152, 152, 152, 152, 152, 152, 152, 152,
  387. 152, 152, 152, 152, 152, 152, 152, 152,
  388. 152, 152, 152, 152, 152, 152, 152, 152,
  389. 152, 152, 152, 152, 1, 1, 1, 1,
  390. 1, 1, 1, 1, 1, 1, 1, 1,
  391. 1, 1, 1, 1, 1, 1, 1, 1,
  392. 1, 1, 1, 1, 1, 1, 1, 1,
  393. 1, 1, 1, 1, 1, 1, 1, 1,
  394. 1, 1, 1, 1, 1, 1, 1, 1,
  395. 1, 1, 1, 1, 1, 1, 1, 1,
  396. 1, 1, 1, 1, 1, 1, 1, 1,
  397. 1, 1, 1, 1, 1, 1, 157, 157,
  398. 157, 157, 157, 157, 157, 157, 157, 157,
  399. 157, 157, 157, 157, 157, 157, 157, 157,
  400. 157, 157, 157, 157, 157, 157, 157, 157,
  401. 157, 157, 157, 157, 158, 159, 159, 159,
  402. 159, 159, 159, 159, 159, 159, 159, 159,
  403. 159, 160, 159, 159, 161, 162, 162, 162,
  404. 163, 1, 164, 164, 164, 164, 164, 164,
  405. 164, 164, 164, 1, 164, 164, 165, 164,
  406. 164, 164, 164, 164, 164, 164, 164, 164,
  407. 164, 164, 164, 164, 164, 164, 164, 164,
  408. 164, 164, 164, 164, 164, 164, 164, 164,
  409. 164, 166, 167, 164, 164, 164, 164, 164,
  410. 164, 164, 164, 164, 164, 164, 164, 164,
  411. 164, 164, 164, 164, 164, 164, 164, 164,
  412. 164, 164, 164, 164, 164, 164, 164, 164,
  413. 164, 164, 164, 164, 164, 164, 164, 164,
  414. 164, 164, 164, 164, 164, 164, 164, 164,
  415. 164, 164, 164, 164, 164, 168, 164, 164,
  416. 164, 164, 164, 164, 164, 164, 164, 164,
  417. 164, 164, 164, 164, 164, 164, 164, 164,
  418. 164, 164, 164, 164, 164, 164, 164, 164,
  419. 164, 164, 164, 164, 164, 164, 164, 164,
  420. 164, 1, 1, 1, 1, 1, 1, 1,
  421. 1, 1, 1, 1, 1, 1, 1, 1,
  422. 1, 1, 1, 1, 1, 1, 1, 1,
  423. 1, 1, 1, 1, 1, 1, 1, 1,
  424. 1, 1, 1, 1, 1, 1, 1, 1,
  425. 1, 1, 1, 1, 1, 1, 1, 1,
  426. 1, 1, 1, 1, 1, 1, 1, 1,
  427. 1, 1, 1, 1, 1, 1, 1, 1,
  428. 1, 1, 1, 169, 169, 169, 169, 169,
  429. 169, 169, 169, 169, 169, 169, 169, 169,
  430. 169, 169, 169, 169, 169, 169, 169, 169,
  431. 169, 169, 169, 169, 169, 169, 169, 169,
  432. 169, 170, 171, 171, 171, 171, 171, 171,
  433. 171, 171, 171, 171, 171, 171, 172, 171,
  434. 171, 173, 174, 174, 174, 175, 1, 176,
  435. 1, 164, 1, 1, 1, 1, 1, 1,
  436. 1, 1, 1, 1, 1, 1, 1, 1,
  437. 1, 1, 1, 1, 1, 1, 1, 1,
  438. 164, 1, 164, 164, 164, 164, 164, 164,
  439. 164, 164, 164, 164, 164, 164, 164, 164,
  440. 164, 164, 164, 164, 164, 164, 164, 164,
  441. 164, 164, 164, 164, 164, 164, 164, 164,
  442. 164, 164, 164, 164, 164, 164, 164, 164,
  443. 164, 164, 164, 164, 164, 164, 164, 164,
  444. 164, 164, 164, 164, 164, 164, 164, 164,
  445. 164, 164, 164, 164, 164, 164, 164, 164,
  446. 164, 164, 164, 164, 164, 164, 164, 164,
  447. 164, 164, 164, 164, 164, 164, 164, 164,
  448. 164, 164, 164, 164, 164, 164, 164, 164,
  449. 164, 164, 164, 164, 164, 164, 164, 164,
  450. 164, 164, 164, 164, 164, 164, 164, 164,
  451. 164, 164, 164, 164, 164, 164, 164, 164,
  452. 164, 164, 164, 164, 164, 164, 164, 164,
  453. 164, 164, 164, 164, 164, 164, 164, 164,
  454. 164, 164, 1, 1, 1, 1, 1, 1,
  455. 1, 1, 1, 1, 1, 1, 1, 1,
  456. 1, 1, 1, 1, 1, 1, 1, 1,
  457. 1, 1, 1, 1, 1, 1, 1, 1,
  458. 1, 1, 1, 1, 1, 1, 1, 1,
  459. 1, 1, 1, 1, 1, 1, 1, 1,
  460. 1, 1, 1, 1, 1, 1, 1, 1,
  461. 1, 1, 1, 1, 1, 1, 1, 1,
  462. 1, 1, 1, 1, 169, 169, 169, 169,
  463. 169, 169, 169, 169, 169, 169, 169, 169,
  464. 169, 169, 169, 169, 169, 169, 169, 169,
  465. 169, 169, 169, 169, 169, 169, 169, 169,
  466. 169, 169, 170, 171, 171, 171, 171, 171,
  467. 171, 171, 171, 171, 171, 171, 171, 172,
  468. 171, 171, 173, 174, 174, 174, 175, 1,
  469. 164, 164, 164, 164, 164, 164, 164, 164,
  470. 164, 164, 164, 164, 164, 164, 164, 164,
  471. 164, 164, 164, 164, 164, 164, 164, 164,
  472. 164, 164, 164, 164, 164, 164, 164, 164,
  473. 164, 164, 164, 164, 164, 164, 164, 164,
  474. 164, 164, 164, 164, 164, 164, 164, 164,
  475. 164, 164, 164, 164, 164, 164, 164, 164,
  476. 164, 164, 164, 164, 164, 164, 164, 164,
  477. 1, 169, 169, 169, 169, 169, 169, 169,
  478. 169, 169, 169, 169, 169, 169, 169, 169,
  479. 169, 169, 169, 169, 169, 169, 169, 169,
  480. 169, 169, 169, 169, 169, 169, 169, 169,
  481. 169, 1, 169, 169, 169, 169, 169, 169,
  482. 169, 169, 169, 169, 169, 169, 169, 169,
  483. 169, 169, 169, 169, 169, 169, 169, 169,
  484. 169, 169, 169, 169, 169, 169, 169, 169,
  485. 169, 169, 169, 169, 169, 169, 169, 169,
  486. 169, 169, 169, 169, 169, 169, 169, 169,
  487. 169, 169, 169, 169, 169, 169, 169, 169,
  488. 169, 169, 169, 169, 169, 169, 169, 169,
  489. 169, 169, 1, 169, 169, 169, 169, 169,
  490. 169, 169, 169, 169, 169, 169, 169, 169,
  491. 169, 169, 169, 169, 169, 169, 169, 169,
  492. 169, 169, 169, 169, 169, 169, 169, 169,
  493. 169, 169, 169, 1, 171, 171, 171, 171,
  494. 171, 171, 171, 171, 171, 171, 171, 171,
  495. 171, 171, 171, 171, 171, 171, 171, 171,
  496. 171, 171, 171, 171, 171, 171, 171, 171,
  497. 171, 171, 171, 171, 171, 171, 171, 171,
  498. 171, 171, 171, 171, 171, 171, 171, 171,
  499. 171, 171, 171, 171, 1, 171, 171, 171,
  500. 171, 171, 171, 171, 171, 171, 171, 171,
  501. 171, 171, 171, 171, 171, 171, 171, 171,
  502. 171, 171, 171, 171, 171, 171, 171, 171,
  503. 171, 171, 171, 171, 171, 171, 171, 171,
  504. 171, 171, 171, 171, 171, 171, 171, 171,
  505. 171, 171, 171, 171, 171, 171, 171, 171,
  506. 171, 171, 171, 171, 171, 171, 171, 171,
  507. 171, 171, 171, 171, 171, 1, 171, 171,
  508. 171, 171, 171, 171, 171, 171, 171, 171,
  509. 171, 171, 171, 171, 171, 171, 1, 177,
  510. 1, 1, 1, 178, 1, 1, 1, 1,
  511. 1, 1, 1, 1, 1, 1, 1, 1,
  512. 1, 1, 1, 1, 1, 1, 177, 1,
  513. 1, 1, 1, 1, 1, 1, 179, 1,
  514. 118, 1, 1, 1, 180, 1, 1, 1,
  515. 1, 1, 1, 1, 1, 1, 1, 1,
  516. 1, 1, 1, 1, 1, 1, 1, 118,
  517. 1, 1, 1, 1, 1, 1, 1, 181,
  518. 1, 182, 1, 1, 1, 183, 1, 1,
  519. 1, 1, 1, 1, 1, 1, 1, 1,
  520. 1, 1, 1, 1, 1, 1, 1, 1,
  521. 182, 1, 1, 1, 1, 1, 1, 1,
  522. 184, 1, 177, 1, 1, 1, 178, 1,
  523. 1, 1, 1, 1, 1, 1, 1, 1,
  524. 1, 1, 1, 1, 1, 1, 1, 1,
  525. 1, 177, 1, 1, 1, 1, 1, 1,
  526. 1, 179, 1, 1, 1, 1, 1, 1,
  527. 1, 1, 1, 1, 1, 1, 1, 1,
  528. 1, 1, 1, 1, 1, 1, 1, 1,
  529. 1, 1, 1, 1, 1, 185, 1, 1,
  530. 1, 1, 1, 1, 1, 1, 1, 1,
  531. 1, 1, 1, 1, 185, 1, 177, 1,
  532. 1, 1, 178, 1, 1, 1, 1, 1,
  533. 1, 1, 1, 1, 1, 1, 1, 1,
  534. 1, 1, 1, 1, 1, 177, 1, 1,
  535. 1, 1, 1, 1, 1, 179, 1, 1,
  536. 1, 1, 1, 1, 1, 1, 1, 1,
  537. 1, 1, 1, 1, 1, 1, 1, 1,
  538. 1, 1, 1, 1, 1, 1, 1, 1,
  539. 1, 1, 1, 1, 1, 1, 1, 1,
  540. 1, 1, 185, 1, 177, 1, 1, 1,
  541. 178, 1, 1, 1, 1, 1, 1, 1,
  542. 1, 1, 1, 1, 1, 1, 1, 1,
  543. 1, 1, 1, 177, 1, 1, 1, 1,
  544. 1, 1, 1, 179, 1, 1, 1, 1,
  545. 1, 1, 1, 1, 1, 1, 1, 1,
  546. 1, 1, 1, 1, 1, 1, 1, 1,
  547. 1, 1, 1, 1, 1, 1, 1, 1,
  548. 1, 1, 1, 1, 1, 1, 1, 1,
  549. 1, 1, 1, 1, 1, 1, 1, 90,
  550. 1, 1, 0,
  551. ]
  552. 1 class << self
  553. 1 attr_accessor :_trans_targs
  554. 1 private :_trans_targs, :_trans_targs=
  555. end
  556. 1 self._trans_targs = [
  557. 2, 0, 3, 5, 6, 71, 82, 84,
  558. 86, 89, 2, 3, 5, 6, 4, 2,
  559. 3, 5, 6, 71, 82, 84, 86, 89,
  560. 7, 8, 10, 11, 56, 58, 60, 63,
  561. 65, 67, 69, 9, 7, 8, 10, 11,
  562. 56, 58, 60, 63, 65, 67, 69, 12,
  563. 55, 13, 14, 16, 17, 15, 13, 14,
  564. 16, 17, 18, 19, 20, 22, 23, 21,
  565. 19, 20, 22, 23, 24, 25, 27, 28,
  566. 26, 24, 25, 27, 28, 29, 31, 32,
  567. 30, 29, 31, 32, 33, 34, 35, 37,
  568. 38, 48, 103, 106, 107, 108, 36, 34,
  569. 35, 37, 38, 39, 41, 42, 40, 39,
  570. 41, 42, 43, 44, 45, 47, 46, 44,
  571. 45, 47, 49, 50, 51, 53, 104, 57,
  572. 59, 61, 62, 64, 66, 68, 70, 72,
  573. 73, 74, 76, 77, 75, 73, 74, 76,
  574. 77, 78, 79, 81, 78, 79, 81, 80,
  575. 78, 79, 81, 83, 85, 87, 88, 90,
  576. 92, 93, 92, 109, 95, 96, 97, 98,
  577. 99, 100, 101, 102, 92, 93, 92, 109,
  578. 95, 96, 97, 98, 99, 100, 101, 102,
  579. 94, 104, 52, 105, 52, 105, 104, 52,
  580. 105, 54,
  581. ]
  582. 1 class << self
  583. 1 attr_accessor :_trans_actions
  584. 1 private :_trans_actions, :_trans_actions=
  585. end
  586. 1 self._trans_actions = [
  587. 1, 0, 1, 2, 1, 0, 0, 0,
  588. 0, 0, 0, 0, 3, 0, 0, 4,
  589. 4, 5, 4, 4, 4, 4, 4, 4,
  590. 0, 0, 3, 0, 0, 0, 0, 0,
  591. 0, 0, 0, 0, 4, 4, 5, 4,
  592. 4, 4, 4, 4, 4, 4, 4, 0,
  593. 0, 0, 0, 3, 0, 0, 4, 4,
  594. 5, 4, 0, 0, 0, 3, 6, 0,
  595. 4, 4, 5, 7, 0, 0, 3, 0,
  596. 0, 4, 4, 5, 4, 0, 3, 0,
  597. 0, 4, 5, 4, 0, 0, 0, 3,
  598. 0, 0, 0, 0, 0, 0, 0, 4,
  599. 4, 5, 4, 0, 3, 0, 0, 4,
  600. 5, 4, 0, 0, 0, 3, 0, 4,
  601. 4, 5, 0, 0, 0, 0, 0, 0,
  602. 0, 0, 0, 0, 0, 0, 0, 0,
  603. 0, 0, 3, 0, 0, 4, 4, 5,
  604. 4, 1, 1, 8, 0, 0, 3, 0,
  605. 4, 4, 5, 0, 0, 0, 0, 0,
  606. 9, 9, 10, 11, 9, 9, 9, 9,
  607. 9, 9, 9, 9, 0, 0, 3, 12,
  608. 0, 0, 0, 0, 0, 0, 0, 0,
  609. 0, 13, 13, 14, 0, 3, 4, 4,
  610. 5, 0,
  611. ]
  612. 1 class << self
  613. 1 attr_accessor :_eof_actions
  614. 1 private :_eof_actions, :_eof_actions=
  615. end
  616. 1 self._eof_actions = [
  617. 0, 0, 0, 0, 0, 0, 0, 0,
  618. 0, 0, 0, 0, 0, 0, 0, 0,
  619. 0, 0, 0, 0, 0, 0, 0, 0,
  620. 0, 0, 0, 0, 0, 0, 0, 0,
  621. 0, 0, 0, 0, 0, 0, 0, 0,
  622. 0, 0, 0, 0, 0, 0, 0, 0,
  623. 0, 0, 0, 0, 0, 0, 0, 0,
  624. 0, 0, 0, 0, 0, 0, 0, 0,
  625. 0, 0, 0, 0, 0, 0, 0, 0,
  626. 0, 0, 0, 0, 0, 0, 0, 0,
  627. 0, 0, 0, 0, 0, 0, 0, 0,
  628. 0, 0, 0, 0, 0, 0, 0, 0,
  629. 0, 0, 0, 0, 0, 0, 0, 13,
  630. 0, 4, 13, 13, 13, 0,
  631. ]
  632. 1 class << self
  633. 1 attr_accessor :start
  634. end
  635. 1 self.start = 1
  636. 1 class << self
  637. 1 attr_accessor :first_final
  638. end
  639. 1 self.first_final = 103
  640. 1 class << self
  641. 1 attr_accessor :error
  642. end
  643. 1 self.error = 0
  644. 1 class << self
  645. 1 attr_accessor :en_comment_tail
  646. end
  647. 1 self.en_comment_tail = 91
  648. 1 class << self
  649. 1 attr_accessor :en_main
  650. end
  651. 1 self.en_main = 1
  652. 1 def self.parse(data)
  653. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  654. raise Mail::Field::NilParseError.new(Mail::DateTimeElement) if data.nil?
  655. date_time = DateTimeStruct.new([])
  656. # Parser state
  657. date_s = time_s = nil
  658. # 5.1 Variables Used by Ragel
  659. p = 0
  660. eof = pe = data.length
  661. stack = []
  662. begin
  663. p ||= 0
  664. pe ||= data.length
  665. cs = start
  666. top = 0
  667. end
  668. begin
  669. testEof = false
  670. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  671. _goto_level = 0
  672. _resume = 10
  673. _eof_trans = 15
  674. _again = 20
  675. _test_eof = 30
  676. _out = 40
  677. while true
  678. if _goto_level <= 0
  679. if p == pe
  680. _goto_level = _test_eof
  681. next
  682. end
  683. if cs == 0
  684. _goto_level = _out
  685. next
  686. end
  687. end
  688. if _goto_level <= _resume
  689. _keys = cs << 1
  690. _inds = _index_offsets[cs]
  691. _slen = _key_spans[cs]
  692. _wide = data[p].ord
  693. _trans = if (_slen > 0 &&
  694. _trans_keys[_keys] <= _wide &&
  695. _wide <= _trans_keys[_keys + 1])
  696. _indicies[_inds + _wide - _trans_keys[_keys]]
  697. else
  698. _indicies[_inds + _slen]
  699. end
  700. cs = _trans_targs[_trans]
  701. if _trans_actions[_trans] != 0
  702. case _trans_actions[_trans]
  703. when 1
  704. begin
  705. date_s = p
  706. end
  707. when 13
  708. begin
  709. date_time.time_string = chars(data, time_s, p - 1)
  710. end
  711. when 9
  712. begin
  713. end
  714. when 4
  715. begin
  716. end
  717. when 3
  718. begin
  719. begin
  720. stack[top] = cs
  721. top += 1
  722. cs = 91
  723. _goto_level = _again
  724. next
  725. end
  726. end
  727. when 12
  728. begin
  729. begin
  730. top -= 1
  731. cs = stack[top]
  732. _goto_level = _again
  733. next
  734. end
  735. end
  736. when 8
  737. begin
  738. date_s = p
  739. end
  740. begin
  741. begin
  742. stack[top] = cs
  743. top += 1
  744. cs = 91
  745. _goto_level = _again
  746. next
  747. end
  748. end
  749. when 6
  750. begin
  751. date_time.date_string = chars(data, date_s, p - 1)
  752. end
  753. begin
  754. time_s = p
  755. end
  756. when 14
  757. begin
  758. date_time.time_string = chars(data, time_s, p - 1)
  759. end
  760. begin
  761. begin
  762. stack[top] = cs
  763. top += 1
  764. cs = 91
  765. _goto_level = _again
  766. next
  767. end
  768. end
  769. when 10
  770. begin
  771. end
  772. begin
  773. begin
  774. stack[top] = cs
  775. top += 1
  776. cs = 91
  777. _goto_level = _again
  778. next
  779. end
  780. end
  781. when 11
  782. begin
  783. end
  784. begin
  785. begin
  786. top -= 1
  787. cs = stack[top]
  788. _goto_level = _again
  789. next
  790. end
  791. end
  792. when 5
  793. begin
  794. end
  795. begin
  796. begin
  797. stack[top] = cs
  798. top += 1
  799. cs = 91
  800. _goto_level = _again
  801. next
  802. end
  803. end
  804. when 2
  805. begin
  806. begin
  807. stack[top] = cs
  808. top += 1
  809. cs = 91
  810. _goto_level = _again
  811. next
  812. end
  813. end
  814. begin
  815. date_s = p
  816. end
  817. when 7
  818. begin
  819. end
  820. begin
  821. date_time.date_string = chars(data, date_s, p - 1)
  822. end
  823. begin
  824. time_s = p
  825. end
  826. end
  827. end
  828. end
  829. if _goto_level <= _again
  830. if cs == 0
  831. _goto_level = _out
  832. next
  833. end
  834. p += 1
  835. if p != pe
  836. _goto_level = _resume
  837. next
  838. end
  839. end
  840. if _goto_level <= _test_eof
  841. if p == eof
  842. case _eof_actions[cs]
  843. when 13
  844. begin
  845. date_time.time_string = chars(data, time_s, p - 1)
  846. end
  847. when 4
  848. begin
  849. end
  850. end
  851. end
  852. end
  853. if _goto_level <= _out
  854. break
  855. end
  856. end
  857. end
  858. if p != eof || cs < 103
  859. raise Mail::Field::IncompleteParseError.new(Mail::DateTimeElement, data, p)
  860. end
  861. date_time
  862. end
  863. end
  864. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/envelope_from_parser.rb

19.92% lines covered

251 relevant lines. 50 lines covered and 201 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module EnvelopeFromParser
  6. 1 extend Mail::ParserTools
  7. 1 EnvelopeFromStruct = Struct.new(:address, :ctime_date, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 244, 9, 244,
  14. 10, 10, 9, 32, 9,
  15. 244, 9, 64, 10, 10,
  16. 9, 32, 9, 87, 9, 64,
  17. 9, 244, 10, 10, 9,
  18. 32, 9, 244, 9, 64,
  19. 10, 10, 9, 32, 9, 87,
  20. 9, 64, 9, 244, 9,
  21. 244, 10, 10, 9, 32,
  22. 9, 244, 9, 46, 10, 10,
  23. 9, 32, 9, 87, 9,
  24. 46, 9, 244, 10, 10,
  25. 9, 32, 9, 244, 128, 191,
  26. 160, 191, 128, 191, 128,
  27. 159, 144, 191, 128, 191,
  28. 128, 143, 9, 244, 114, 114,
  29. 105, 105, 32, 32, 32,
  30. 83, 112, 117, 114, 114,
  31. 32, 32, 9, 57, 10, 10,
  32. 9, 32, 9, 57, 9,
  33. 57, 9, 40, 10, 10,
  34. 9, 32, 9, 57, 10, 10,
  35. 9, 32, 9, 57, 48,
  36. 57, 9, 58, 10, 10,
  37. 9, 32, 9, 58, 9, 57,
  38. 10, 10, 9, 32, 9,
  39. 57, 48, 57, 9, 58,
  40. 10, 10, 9, 32, 9, 58,
  41. 10, 10, 9, 32, 9,
  42. 58, 48, 57, 10, 10,
  43. 9, 32, 9, 57, 10, 10,
  44. 9, 32, 9, 57, 48,
  45. 57, 9, 40, 10, 10,
  46. 9, 32, 9, 57, 10, 10,
  47. 9, 32, 9, 57, 9,
  48. 40, 9, 58, 9, 40,
  49. 103, 103, 101, 101, 99, 99,
  50. 101, 101, 98, 98, 97,
  51. 117, 110, 110, 108, 110,
  52. 97, 97, 114, 121, 111, 111,
  53. 118, 118, 99, 99, 116,
  54. 116, 101, 101, 112, 112,
  55. 111, 111, 110, 110, 97, 117,
  56. 116, 116, 104, 117, 117,
  57. 117, 101, 101, 101, 101,
  58. 100, 100, 1, 244, 1, 244,
  59. 10, 10, 9, 32, 9,
  60. 244, 9, 40, 10, 10,
  61. 9, 32, 9, 87, 9, 40,
  62. 33, 244, 128, 191, 160,
  63. 191, 128, 191, 128, 159,
  64. 144, 191, 128, 191, 128, 143,
  65. 0, 244, 128, 191, 160,
  66. 191, 128, 191, 128, 159,
  67. 144, 191, 128, 191, 128, 143,
  68. 10, 10, 9, 32, 9,
  69. 244, 128, 191, 160, 191,
  70. 128, 191, 128, 159, 144, 191,
  71. 128, 191, 128, 143, 9,
  72. 244, 1, 244, 10, 10,
  73. 9, 32, 0, 244, 128, 191,
  74. 160, 191, 128, 191, 128,
  75. 159, 144, 191, 128, 191,
  76. 128, 143, 128, 191, 160, 191,
  77. 128, 191, 128, 159, 144,
  78. 191, 128, 191, 128, 143,
  79. 1, 244, 1, 244, 10, 10,
  80. 9, 32, 0, 244, 128,
  81. 191, 160, 191, 128, 191,
  82. 128, 159, 144, 191, 128, 191,
  83. 128, 143, 9, 244, 1,
  84. 244, 1, 244, 10, 10,
  85. 9, 32, 9, 244, 9, 64,
  86. 10, 10, 9, 32, 9,
  87. 87, 9, 64, 128, 191,
  88. 160, 191, 128, 191, 128, 159,
  89. 144, 191, 128, 191, 128,
  90. 143, 0, 244, 128, 191,
  91. 160, 191, 128, 191, 128, 159,
  92. 144, 191, 128, 191, 128,
  93. 143, 10, 10, 9, 32,
  94. 9, 244, 9, 244, 10, 10,
  95. 9, 32, 9, 244, 9,
  96. 244, 9, 244, 9, 244,
  97. 9, 244, 9, 87, 101, 114,
  98. 97, 111, 97, 117, 9,
  99. 244, 9, 244, 9, 244,
  100. 9, 244, 9, 244, 9, 244,
  101. 9, 244, 9, 244, 9,
  102. 244, 1, 244, 1, 244,
  103. 10, 10, 9, 32, 9, 244,
  104. 0, 244, 128, 191, 160,
  105. 191, 128, 191, 128, 159,
  106. 144, 191, 128, 191, 128, 143,
  107. 1, 244, 10, 10, 9,
  108. 32, 128, 191, 160, 191,
  109. 128, 191, 128, 159, 144, 191,
  110. 128, 191, 128, 143, 1,
  111. 244, 1, 244, 10, 10,
  112. 9, 32, 9, 244, 9, 64,
  113. 10, 10, 9, 32, 9,
  114. 87, 9, 64, 0, 244,
  115. 128, 191, 160, 191, 128, 191,
  116. 128, 159, 144, 191, 128,
  117. 191, 128, 143, 1, 244,
  118. 10, 10, 9, 32, 9, 64,
  119. 10, 10, 9, 32, 9,
  120. 87, 9, 64, 9, 244,
  121. 33, 244, 62, 62, 32, 32,
  122. 32, 87, 70, 87, 1,
  123. 244, 1, 244, 10, 10,
  124. 9, 32, 0, 244, 128, 191,
  125. 160, 191, 128, 191, 128,
  126. 159, 144, 191, 128, 191,
  127. 128, 143, 9, 57, 9, 40,
  128. 9, 40, 0, 0, 0,
  129. ]
  130. 1 class << self
  131. 1 attr_accessor :_key_spans
  132. 1 private :_key_spans, :_key_spans=
  133. end
  134. 1 self._key_spans = [
  135. 0, 236, 236, 1, 24, 236, 56, 1,
  136. 24, 79, 56, 236, 1, 24, 236, 56,
  137. 1, 24, 79, 56, 236, 236, 1, 24,
  138. 236, 38, 1, 24, 79, 38, 236, 1,
  139. 24, 236, 64, 32, 64, 32, 48, 64,
  140. 16, 236, 1, 1, 1, 52, 6, 1,
  141. 1, 49, 1, 24, 49, 49, 32, 1,
  142. 24, 49, 1, 24, 49, 10, 50, 1,
  143. 24, 50, 49, 1, 24, 49, 10, 50,
  144. 1, 24, 50, 1, 24, 50, 10, 1,
  145. 24, 49, 1, 24, 49, 10, 32, 1,
  146. 24, 49, 1, 24, 49, 32, 50, 32,
  147. 1, 1, 1, 1, 1, 21, 1, 3,
  148. 1, 8, 1, 1, 1, 1, 1, 1,
  149. 1, 1, 21, 1, 14, 1, 1, 1,
  150. 1, 244, 244, 1, 24, 236, 32, 1,
  151. 24, 79, 32, 212, 64, 32, 64, 32,
  152. 48, 64, 16, 245, 64, 32, 64, 32,
  153. 48, 64, 16, 1, 24, 236, 64, 32,
  154. 64, 32, 48, 64, 16, 236, 244, 1,
  155. 24, 245, 64, 32, 64, 32, 48, 64,
  156. 16, 64, 32, 64, 32, 48, 64, 16,
  157. 244, 244, 1, 24, 245, 64, 32, 64,
  158. 32, 48, 64, 16, 236, 244, 244, 1,
  159. 24, 236, 56, 1, 24, 79, 56, 64,
  160. 32, 64, 32, 48, 64, 16, 245, 64,
  161. 32, 64, 32, 48, 64, 16, 1, 24,
  162. 236, 236, 1, 24, 236, 236, 236, 236,
  163. 236, 79, 14, 15, 21, 236, 236, 236,
  164. 236, 236, 236, 236, 236, 236, 244, 244,
  165. 1, 24, 236, 245, 64, 32, 64, 32,
  166. 48, 64, 16, 244, 1, 24, 64, 32,
  167. 64, 32, 48, 64, 16, 244, 244, 1,
  168. 24, 236, 56, 1, 24, 79, 56, 245,
  169. 64, 32, 64, 32, 48, 64, 16, 244,
  170. 1, 24, 56, 1, 24, 79, 56, 236,
  171. 212, 1, 1, 56, 18, 244, 244, 1,
  172. 24, 245, 64, 32, 64, 32, 48, 64,
  173. 16, 49, 32, 32, 0,
  174. ]
  175. 1 class << self
  176. 1 attr_accessor :_index_offsets
  177. 1 private :_index_offsets, :_index_offsets=
  178. end
  179. 1 self._index_offsets = [
  180. 0, 0, 237, 474, 476, 501, 738, 795,
  181. 797, 822, 902, 959, 1196, 1198, 1223, 1460,
  182. 1517, 1519, 1544, 1624, 1681, 1918, 2155, 2157,
  183. 2182, 2419, 2458, 2460, 2485, 2565, 2604, 2841,
  184. 2843, 2868, 3105, 3170, 3203, 3268, 3301, 3350,
  185. 3415, 3432, 3669, 3671, 3673, 3675, 3728, 3735,
  186. 3737, 3739, 3789, 3791, 3816, 3866, 3916, 3949,
  187. 3951, 3976, 4026, 4028, 4053, 4103, 4114, 4165,
  188. 4167, 4192, 4243, 4293, 4295, 4320, 4370, 4381,
  189. 4432, 4434, 4459, 4510, 4512, 4537, 4588, 4599,
  190. 4601, 4626, 4676, 4678, 4703, 4753, 4764, 4797,
  191. 4799, 4824, 4874, 4876, 4901, 4951, 4984, 5035,
  192. 5068, 5070, 5072, 5074, 5076, 5078, 5100, 5102,
  193. 5106, 5108, 5117, 5119, 5121, 5123, 5125, 5127,
  194. 5129, 5131, 5133, 5155, 5157, 5172, 5174, 5176,
  195. 5178, 5180, 5425, 5670, 5672, 5697, 5934, 5967,
  196. 5969, 5994, 6074, 6107, 6320, 6385, 6418, 6483,
  197. 6516, 6565, 6630, 6647, 6893, 6958, 6991, 7056,
  198. 7089, 7138, 7203, 7220, 7222, 7247, 7484, 7549,
  199. 7582, 7647, 7680, 7729, 7794, 7811, 8048, 8293,
  200. 8295, 8320, 8566, 8631, 8664, 8729, 8762, 8811,
  201. 8876, 8893, 8958, 8991, 9056, 9089, 9138, 9203,
  202. 9220, 9465, 9710, 9712, 9737, 9983, 10048, 10081,
  203. 10146, 10179, 10228, 10293, 10310, 10547, 10792, 11037,
  204. 11039, 11064, 11301, 11358, 11360, 11385, 11465, 11522,
  205. 11587, 11620, 11685, 11718, 11767, 11832, 11849, 12095,
  206. 12160, 12193, 12258, 12291, 12340, 12405, 12422, 12424,
  207. 12449, 12686, 12923, 12925, 12950, 13187, 13424, 13661,
  208. 13898, 14135, 14215, 14230, 14246, 14268, 14505, 14742,
  209. 14979, 15216, 15453, 15690, 15927, 16164, 16401, 16646,
  210. 16891, 16893, 16918, 17155, 17401, 17466, 17499, 17564,
  211. 17597, 17646, 17711, 17728, 17973, 17975, 18000, 18065,
  212. 18098, 18163, 18196, 18245, 18310, 18327, 18572, 18817,
  213. 18819, 18844, 19081, 19138, 19140, 19165, 19245, 19302,
  214. 19548, 19613, 19646, 19711, 19744, 19793, 19858, 19875,
  215. 20120, 20122, 20147, 20204, 20206, 20231, 20311, 20368,
  216. 20605, 20818, 20820, 20822, 20879, 20898, 21143, 21388,
  217. 21390, 21415, 21661, 21726, 21759, 21824, 21857, 21906,
  218. 21971, 21988, 22038, 22071, 22104,
  219. ]
  220. 1 class << self
  221. 1 attr_accessor :_indicies
  222. 1 private :_indicies, :_indicies=
  223. end
  224. 1 self._indicies = [
  225. 0, 1, 1, 1, 2, 1, 1, 1,
  226. 1, 1, 1, 1, 1, 1, 1, 1,
  227. 1, 1, 1, 1, 1, 1, 1, 0,
  228. 3, 4, 3, 3, 3, 3, 3, 5,
  229. 1, 3, 3, 1, 3, 6, 3, 3,
  230. 3, 3, 3, 3, 3, 3, 3, 3,
  231. 3, 1, 1, 7, 3, 1, 3, 1,
  232. 3, 3, 3, 3, 3, 3, 3, 3,
  233. 3, 3, 3, 3, 3, 3, 3, 3,
  234. 3, 3, 3, 3, 3, 3, 3, 3,
  235. 3, 3, 1, 1, 1, 3, 3, 3,
  236. 3, 3, 3, 3, 3, 3, 3, 3,
  237. 3, 3, 3, 3, 3, 3, 3, 3,
  238. 3, 3, 3, 3, 3, 3, 3, 3,
  239. 3, 3, 3, 3, 3, 3, 1, 1,
  240. 1, 1, 1, 1, 1, 1, 1, 1,
  241. 1, 1, 1, 1, 1, 1, 1, 1,
  242. 1, 1, 1, 1, 1, 1, 1, 1,
  243. 1, 1, 1, 1, 1, 1, 1, 1,
  244. 1, 1, 1, 1, 1, 1, 1, 1,
  245. 1, 1, 1, 1, 1, 1, 1, 1,
  246. 1, 1, 1, 1, 1, 1, 1, 1,
  247. 1, 1, 1, 1, 1, 1, 1, 1,
  248. 1, 8, 8, 8, 8, 8, 8, 8,
  249. 8, 8, 8, 8, 8, 8, 8, 8,
  250. 8, 8, 8, 8, 8, 8, 8, 8,
  251. 8, 8, 8, 8, 8, 8, 8, 9,
  252. 10, 10, 10, 10, 10, 10, 10, 10,
  253. 10, 10, 10, 10, 11, 10, 10, 12,
  254. 13, 13, 13, 14, 1, 15, 1, 1,
  255. 1, 16, 1, 1, 1, 1, 1, 1,
  256. 1, 1, 1, 1, 1, 1, 1, 1,
  257. 1, 1, 1, 1, 15, 17, 18, 17,
  258. 17, 17, 17, 17, 19, 1, 17, 17,
  259. 1, 17, 20, 17, 17, 17, 17, 17,
  260. 17, 17, 17, 17, 17, 17, 1, 1,
  261. 1, 17, 1, 17, 1, 17, 17, 17,
  262. 17, 17, 17, 17, 17, 17, 17, 17,
  263. 17, 17, 17, 17, 17, 17, 17, 17,
  264. 17, 17, 17, 17, 17, 17, 17, 1,
  265. 1, 1, 17, 17, 17, 17, 17, 17,
  266. 17, 17, 17, 17, 17, 17, 17, 17,
  267. 17, 17, 17, 17, 17, 17, 17, 17,
  268. 17, 17, 17, 17, 17, 17, 17, 17,
  269. 17, 17, 17, 1, 1, 1, 1, 1,
  270. 1, 1, 1, 1, 1, 1, 1, 1,
  271. 1, 1, 1, 1, 1, 1, 1, 1,
  272. 1, 1, 1, 1, 1, 1, 1, 1,
  273. 1, 1, 1, 1, 1, 1, 1, 1,
  274. 1, 1, 1, 1, 1, 1, 1, 1,
  275. 1, 1, 1, 1, 1, 1, 1, 1,
  276. 1, 1, 1, 1, 1, 1, 1, 1,
  277. 1, 1, 1, 1, 1, 1, 21, 21,
  278. 21, 21, 21, 21, 21, 21, 21, 21,
  279. 21, 21, 21, 21, 21, 21, 21, 21,
  280. 21, 21, 21, 21, 21, 21, 21, 21,
  281. 21, 21, 21, 21, 22, 23, 23, 23,
  282. 23, 23, 23, 23, 23, 23, 23, 23,
  283. 23, 24, 23, 23, 25, 26, 26, 26,
  284. 27, 1, 28, 1, 15, 1, 1, 1,
  285. 1, 1, 1, 1, 1, 1, 1, 1,
  286. 1, 1, 1, 1, 1, 1, 1, 1,
  287. 1, 1, 1, 15, 1, 29, 1, 1,
  288. 1, 30, 1, 1, 1, 1, 1, 1,
  289. 1, 1, 1, 1, 1, 1, 1, 1,
  290. 1, 1, 1, 1, 31, 32, 33, 32,
  291. 32, 32, 32, 32, 34, 1, 32, 32,
  292. 1, 32, 35, 32, 32, 32, 32, 32,
  293. 32, 32, 32, 32, 32, 32, 1, 1,
  294. 1, 32, 1, 32, 36, 32, 32, 32,
  295. 32, 32, 32, 32, 32, 32, 32, 32,
  296. 32, 32, 32, 32, 32, 32, 32, 32,
  297. 32, 32, 32, 32, 32, 32, 32, 1,
  298. 1, 1, 32, 32, 32, 32, 32, 32,
  299. 32, 32, 32, 32, 32, 32, 32, 32,
  300. 32, 32, 32, 32, 32, 32, 32, 32,
  301. 32, 32, 32, 32, 32, 32, 32, 32,
  302. 32, 32, 32, 1, 1, 1, 1, 1,
  303. 1, 1, 1, 1, 1, 1, 1, 1,
  304. 1, 1, 1, 1, 1, 1, 1, 1,
  305. 1, 1, 1, 1, 1, 1, 1, 1,
  306. 1, 1, 1, 1, 1, 1, 1, 1,
  307. 1, 1, 1, 1, 1, 1, 1, 1,
  308. 1, 1, 1, 1, 1, 1, 1, 1,
  309. 1, 1, 1, 1, 1, 1, 1, 1,
  310. 1, 1, 1, 1, 1, 1, 37, 37,
  311. 37, 37, 37, 37, 37, 37, 37, 37,
  312. 37, 37, 37, 37, 37, 37, 37, 37,
  313. 37, 37, 37, 37, 37, 37, 37, 37,
  314. 37, 37, 37, 37, 38, 39, 39, 39,
  315. 39, 39, 39, 39, 39, 39, 39, 39,
  316. 39, 40, 39, 39, 41, 42, 42, 42,
  317. 43, 1, 44, 1, 1, 1, 45, 1,
  318. 1, 1, 1, 1, 1, 1, 1, 1,
  319. 1, 1, 1, 1, 1, 1, 1, 1,
  320. 1, 46, 1, 1, 1, 1, 1, 1,
  321. 1, 47, 1, 1, 1, 1, 1, 48,
  322. 1, 1, 1, 1, 1, 1, 1, 1,
  323. 1, 1, 1, 1, 1, 1, 1, 1,
  324. 1, 49, 1, 50, 1, 44, 1, 1,
  325. 1, 1, 1, 1, 1, 1, 1, 1,
  326. 1, 1, 1, 1, 1, 1, 1, 1,
  327. 1, 1, 1, 1, 44, 1, 44, 1,
  328. 1, 1, 45, 1, 1, 1, 1, 1,
  329. 1, 1, 1, 1, 1, 1, 1, 1,
  330. 1, 1, 1, 1, 1, 46, 1, 1,
  331. 1, 1, 1, 1, 1, 47, 1, 1,
  332. 1, 1, 1, 48, 1, 1, 1, 1,
  333. 1, 1, 1, 1, 1, 1, 1, 1,
  334. 1, 1, 1, 1, 1, 49, 1, 1,
  335. 1, 1, 1, 51, 1, 1, 1, 1,
  336. 1, 1, 52, 1, 1, 1, 1, 1,
  337. 53, 54, 1, 1, 55, 1, 56, 1,
  338. 1, 1, 57, 1, 1, 1, 1, 1,
  339. 1, 1, 1, 1, 1, 1, 1, 1,
  340. 1, 1, 1, 1, 1, 58, 1, 1,
  341. 1, 1, 1, 1, 1, 59, 1, 1,
  342. 1, 1, 1, 60, 1, 1, 1, 1,
  343. 1, 1, 1, 1, 1, 1, 1, 1,
  344. 1, 1, 1, 1, 1, 61, 1, 48,
  345. 1, 1, 1, 62, 1, 1, 1, 1,
  346. 1, 1, 1, 1, 1, 1, 1, 1,
  347. 1, 1, 1, 1, 1, 1, 48, 63,
  348. 64, 63, 63, 63, 63, 63, 65, 1,
  349. 63, 63, 1, 63, 1, 63, 63, 63,
  350. 63, 63, 63, 63, 63, 63, 63, 63,
  351. 1, 1, 1, 63, 1, 63, 1, 63,
  352. 63, 63, 63, 63, 63, 63, 63, 63,
  353. 63, 63, 63, 63, 63, 63, 63, 63,
  354. 63, 63, 63, 63, 63, 63, 63, 63,
  355. 63, 1, 1, 1, 63, 63, 63, 63,
  356. 63, 63, 63, 63, 63, 63, 63, 63,
  357. 63, 63, 63, 63, 63, 63, 63, 63,
  358. 63, 63, 63, 63, 63, 63, 63, 63,
  359. 63, 63, 63, 63, 63, 1, 1, 1,
  360. 1, 1, 1, 1, 1, 1, 1, 1,
  361. 1, 1, 1, 1, 1, 1, 1, 1,
  362. 1, 1, 1, 1, 1, 1, 1, 1,
  363. 1, 1, 1, 1, 1, 1, 1, 1,
  364. 1, 1, 1, 1, 1, 1, 1, 1,
  365. 1, 1, 1, 1, 1, 1, 1, 1,
  366. 1, 1, 1, 1, 1, 1, 1, 1,
  367. 1, 1, 1, 1, 1, 1, 1, 1,
  368. 66, 66, 66, 66, 66, 66, 66, 66,
  369. 66, 66, 66, 66, 66, 66, 66, 66,
  370. 66, 66, 66, 66, 66, 66, 66, 66,
  371. 66, 66, 66, 66, 66, 66, 67, 68,
  372. 68, 68, 68, 68, 68, 68, 68, 68,
  373. 68, 68, 68, 69, 68, 68, 70, 71,
  374. 71, 71, 72, 1, 73, 1, 48, 1,
  375. 1, 1, 1, 1, 1, 1, 1, 1,
  376. 1, 1, 1, 1, 1, 1, 1, 1,
  377. 1, 1, 1, 1, 1, 48, 1, 74,
  378. 1, 1, 1, 75, 1, 1, 1, 1,
  379. 1, 1, 1, 1, 1, 1, 1, 1,
  380. 1, 1, 1, 1, 1, 1, 76, 63,
  381. 1, 63, 63, 63, 63, 63, 77, 1,
  382. 63, 63, 1, 63, 48, 63, 63, 63,
  383. 63, 63, 63, 63, 63, 63, 63, 63,
  384. 1, 1, 1, 63, 1, 63, 78, 63,
  385. 63, 63, 63, 63, 63, 63, 63, 63,
  386. 63, 63, 63, 63, 63, 63, 63, 63,
  387. 63, 63, 63, 63, 63, 63, 63, 63,
  388. 63, 1, 1, 1, 63, 63, 63, 63,
  389. 63, 63, 63, 63, 63, 63, 63, 63,
  390. 63, 63, 63, 63, 63, 63, 63, 63,
  391. 63, 63, 63, 63, 63, 63, 63, 63,
  392. 63, 63, 63, 63, 63, 1, 1, 1,
  393. 1, 1, 1, 1, 1, 1, 1, 1,
  394. 1, 1, 1, 1, 1, 1, 1, 1,
  395. 1, 1, 1, 1, 1, 1, 1, 1,
  396. 1, 1, 1, 1, 1, 1, 1, 1,
  397. 1, 1, 1, 1, 1, 1, 1, 1,
  398. 1, 1, 1, 1, 1, 1, 1, 1,
  399. 1, 1, 1, 1, 1, 1, 1, 1,
  400. 1, 1, 1, 1, 1, 1, 1, 1,
  401. 66, 66, 66, 66, 66, 66, 66, 66,
  402. 66, 66, 66, 66, 66, 66, 66, 66,
  403. 66, 66, 66, 66, 66, 66, 66, 66,
  404. 66, 66, 66, 66, 66, 66, 67, 68,
  405. 68, 68, 68, 68, 68, 68, 68, 68,
  406. 68, 68, 68, 69, 68, 68, 70, 71,
  407. 71, 71, 72, 1, 74, 1, 1, 1,
  408. 75, 1, 1, 1, 1, 1, 1, 1,
  409. 1, 1, 1, 1, 1, 1, 1, 1,
  410. 1, 1, 1, 76, 1, 1, 1, 1,
  411. 1, 1, 1, 77, 1, 1, 1, 1,
  412. 1, 48, 1, 1, 1, 1, 1, 1,
  413. 1, 1, 1, 1, 1, 1, 1, 1,
  414. 1, 1, 1, 78, 1, 79, 1, 74,
  415. 1, 1, 1, 1, 1, 1, 1, 1,
  416. 1, 1, 1, 1, 1, 1, 1, 1,
  417. 1, 1, 1, 1, 1, 1, 74, 1,
  418. 74, 1, 1, 1, 75, 1, 1, 1,
  419. 1, 1, 1, 1, 1, 1, 1, 1,
  420. 1, 1, 1, 1, 1, 1, 1, 76,
  421. 1, 1, 1, 1, 1, 1, 1, 77,
  422. 1, 1, 1, 1, 1, 48, 1, 1,
  423. 1, 1, 1, 1, 1, 1, 1, 1,
  424. 1, 1, 1, 1, 1, 1, 1, 78,
  425. 1, 1, 1, 1, 1, 51, 1, 1,
  426. 1, 1, 1, 1, 52, 1, 1, 1,
  427. 1, 1, 53, 54, 1, 1, 55, 1,
  428. 80, 1, 1, 1, 81, 1, 1, 1,
  429. 1, 1, 1, 1, 1, 1, 1, 1,
  430. 1, 1, 1, 1, 1, 1, 1, 82,
  431. 1, 1, 1, 1, 1, 1, 1, 83,
  432. 1, 1, 1, 1, 1, 60, 1, 1,
  433. 1, 1, 1, 1, 1, 1, 1, 1,
  434. 1, 1, 1, 1, 1, 1, 1, 84,
  435. 1, 85, 1, 1, 1, 86, 1, 1,
  436. 1, 1, 1, 1, 1, 1, 1, 1,
  437. 1, 1, 1, 1, 1, 1, 1, 1,
  438. 85, 87, 88, 87, 87, 87, 87, 87,
  439. 89, 1, 87, 87, 1, 87, 90, 87,
  440. 87, 87, 87, 87, 87, 87, 87, 87,
  441. 87, 87, 1, 1, 1, 87, 1, 87,
  442. 1, 87, 87, 87, 87, 87, 87, 87,
  443. 87, 87, 87, 87, 87, 87, 87, 87,
  444. 87, 87, 87, 87, 87, 87, 87, 87,
  445. 87, 87, 87, 91, 1, 1, 87, 87,
  446. 87, 87, 87, 87, 87, 87, 87, 87,
  447. 87, 87, 87, 87, 87, 87, 87, 87,
  448. 87, 87, 87, 87, 87, 87, 87, 87,
  449. 87, 87, 87, 87, 87, 87, 87, 1,
  450. 1, 1, 1, 1, 1, 1, 1, 1,
  451. 1, 1, 1, 1, 1, 1, 1, 1,
  452. 1, 1, 1, 1, 1, 1, 1, 1,
  453. 1, 1, 1, 1, 1, 1, 1, 1,
  454. 1, 1, 1, 1, 1, 1, 1, 1,
  455. 1, 1, 1, 1, 1, 1, 1, 1,
  456. 1, 1, 1, 1, 1, 1, 1, 1,
  457. 1, 1, 1, 1, 1, 1, 1, 1,
  458. 1, 1, 92, 92, 92, 92, 92, 92,
  459. 92, 92, 92, 92, 92, 92, 92, 92,
  460. 92, 92, 92, 92, 92, 92, 92, 92,
  461. 92, 92, 92, 92, 92, 92, 92, 92,
  462. 93, 94, 94, 94, 94, 94, 94, 94,
  463. 94, 94, 94, 94, 94, 95, 94, 94,
  464. 96, 97, 97, 97, 98, 1, 99, 1,
  465. 1, 1, 100, 1, 1, 1, 1, 1,
  466. 1, 1, 1, 1, 1, 1, 1, 1,
  467. 1, 1, 1, 1, 1, 99, 101, 102,
  468. 101, 101, 101, 101, 101, 103, 1, 101,
  469. 101, 1, 101, 104, 101, 101, 101, 101,
  470. 101, 101, 101, 101, 101, 101, 101, 1,
  471. 1, 1, 101, 1, 101, 1, 101, 101,
  472. 101, 101, 101, 101, 101, 101, 101, 101,
  473. 101, 101, 101, 101, 101, 101, 101, 101,
  474. 101, 101, 101, 101, 101, 101, 101, 101,
  475. 105, 1, 1, 101, 101, 101, 101, 101,
  476. 101, 101, 101, 101, 101, 101, 101, 101,
  477. 101, 101, 101, 101, 101, 101, 101, 101,
  478. 101, 101, 101, 101, 101, 101, 101, 101,
  479. 101, 101, 101, 101, 1, 1, 1, 1,
  480. 1, 1, 1, 1, 1, 1, 1, 1,
  481. 1, 1, 1, 1, 1, 1, 1, 1,
  482. 1, 1, 1, 1, 1, 1, 1, 1,
  483. 1, 1, 1, 1, 1, 1, 1, 1,
  484. 1, 1, 1, 1, 1, 1, 1, 1,
  485. 1, 1, 1, 1, 1, 1, 1, 1,
  486. 1, 1, 1, 1, 1, 1, 1, 1,
  487. 1, 1, 1, 1, 1, 1, 1, 106,
  488. 106, 106, 106, 106, 106, 106, 106, 106,
  489. 106, 106, 106, 106, 106, 106, 106, 106,
  490. 106, 106, 106, 106, 106, 106, 106, 106,
  491. 106, 106, 106, 106, 106, 107, 108, 108,
  492. 108, 108, 108, 108, 108, 108, 108, 108,
  493. 108, 108, 109, 108, 108, 110, 111, 111,
  494. 111, 112, 1, 113, 1, 99, 1, 1,
  495. 1, 1, 1, 1, 1, 1, 1, 1,
  496. 1, 1, 1, 1, 1, 1, 1, 1,
  497. 1, 1, 1, 1, 99, 1, 114, 1,
  498. 1, 1, 115, 1, 1, 1, 1, 1,
  499. 1, 1, 1, 1, 1, 1, 1, 1,
  500. 1, 1, 1, 1, 1, 116, 101, 102,
  501. 101, 101, 101, 101, 101, 117, 1, 101,
  502. 101, 1, 101, 118, 101, 101, 101, 101,
  503. 101, 101, 101, 101, 101, 101, 101, 1,
  504. 1, 1, 101, 1, 101, 1, 101, 101,
  505. 101, 101, 101, 101, 101, 101, 101, 101,
  506. 101, 101, 101, 101, 101, 101, 101, 101,
  507. 101, 101, 101, 101, 101, 101, 101, 101,
  508. 1, 1, 1, 101, 101, 101, 101, 101,
  509. 101, 101, 101, 101, 101, 101, 101, 101,
  510. 101, 101, 101, 101, 101, 101, 101, 101,
  511. 101, 101, 101, 101, 101, 101, 101, 101,
  512. 101, 101, 101, 101, 1, 1, 1, 1,
  513. 1, 1, 1, 1, 1, 1, 1, 1,
  514. 1, 1, 1, 1, 1, 1, 1, 1,
  515. 1, 1, 1, 1, 1, 1, 1, 1,
  516. 1, 1, 1, 1, 1, 1, 1, 1,
  517. 1, 1, 1, 1, 1, 1, 1, 1,
  518. 1, 1, 1, 1, 1, 1, 1, 1,
  519. 1, 1, 1, 1, 1, 1, 1, 1,
  520. 1, 1, 1, 1, 1, 1, 1, 106,
  521. 106, 106, 106, 106, 106, 106, 106, 106,
  522. 106, 106, 106, 106, 106, 106, 106, 106,
  523. 106, 106, 106, 106, 106, 106, 106, 106,
  524. 106, 106, 106, 106, 106, 107, 108, 108,
  525. 108, 108, 108, 108, 108, 108, 108, 108,
  526. 108, 108, 109, 108, 108, 110, 111, 111,
  527. 111, 112, 1, 114, 1, 1, 1, 115,
  528. 1, 1, 1, 1, 1, 1, 1, 1,
  529. 1, 1, 1, 1, 1, 1, 1, 1,
  530. 1, 1, 116, 1, 1, 1, 1, 1,
  531. 1, 1, 117, 1, 1, 1, 1, 1,
  532. 119, 1, 120, 1, 114, 1, 1, 1,
  533. 1, 1, 1, 1, 1, 1, 1, 1,
  534. 1, 1, 1, 1, 1, 1, 1, 1,
  535. 1, 1, 1, 114, 1, 114, 1, 1,
  536. 1, 115, 1, 1, 1, 1, 1, 1,
  537. 1, 1, 1, 1, 1, 1, 1, 1,
  538. 1, 1, 1, 1, 116, 1, 1, 1,
  539. 1, 1, 1, 1, 117, 1, 1, 1,
  540. 1, 1, 119, 1, 1, 1, 1, 1,
  541. 1, 1, 1, 1, 1, 1, 1, 1,
  542. 1, 1, 1, 1, 1, 1, 1, 1,
  543. 1, 1, 51, 1, 1, 1, 1, 1,
  544. 1, 52, 1, 1, 1, 1, 1, 53,
  545. 54, 1, 1, 55, 1, 121, 1, 1,
  546. 1, 122, 1, 1, 1, 1, 1, 1,
  547. 1, 1, 1, 1, 1, 1, 1, 1,
  548. 1, 1, 1, 1, 123, 1, 1, 1,
  549. 1, 1, 1, 1, 124, 1, 1, 1,
  550. 1, 1, 125, 1, 119, 1, 1, 1,
  551. 126, 1, 1, 1, 1, 1, 1, 1,
  552. 1, 1, 1, 1, 1, 1, 1, 1,
  553. 1, 1, 1, 119, 127, 1, 127, 127,
  554. 127, 127, 127, 128, 1, 127, 127, 1,
  555. 127, 1, 127, 127, 127, 127, 127, 127,
  556. 127, 127, 127, 127, 127, 1, 1, 1,
  557. 127, 1, 127, 1, 127, 127, 127, 127,
  558. 127, 127, 127, 127, 127, 127, 127, 127,
  559. 127, 127, 127, 127, 127, 127, 127, 127,
  560. 127, 127, 127, 127, 127, 127, 1, 1,
  561. 1, 127, 127, 127, 127, 127, 127, 127,
  562. 127, 127, 127, 127, 127, 127, 127, 127,
  563. 127, 127, 127, 127, 127, 127, 127, 127,
  564. 127, 127, 127, 127, 127, 127, 127, 127,
  565. 127, 127, 1, 1, 1, 1, 1, 1,
  566. 1, 1, 1, 1, 1, 1, 1, 1,
  567. 1, 1, 1, 1, 1, 1, 1, 1,
  568. 1, 1, 1, 1, 1, 1, 1, 1,
  569. 1, 1, 1, 1, 1, 1, 1, 1,
  570. 1, 1, 1, 1, 1, 1, 1, 1,
  571. 1, 1, 1, 1, 1, 1, 1, 1,
  572. 1, 1, 1, 1, 1, 1, 1, 1,
  573. 1, 1, 1, 1, 1, 129, 129, 129,
  574. 129, 129, 129, 129, 129, 129, 129, 129,
  575. 129, 129, 129, 129, 129, 129, 129, 129,
  576. 129, 129, 129, 129, 129, 129, 129, 129,
  577. 129, 129, 129, 130, 131, 131, 131, 131,
  578. 131, 131, 131, 131, 131, 131, 131, 131,
  579. 132, 131, 131, 133, 134, 134, 134, 135,
  580. 1, 136, 1, 119, 1, 1, 1, 1,
  581. 1, 1, 1, 1, 1, 1, 1, 1,
  582. 1, 1, 1, 1, 1, 1, 1, 1,
  583. 1, 1, 119, 1, 114, 1, 1, 1,
  584. 115, 1, 1, 1, 1, 1, 1, 1,
  585. 1, 1, 1, 1, 1, 1, 1, 1,
  586. 1, 1, 1, 116, 127, 1, 127, 127,
  587. 127, 127, 127, 117, 1, 127, 127, 1,
  588. 127, 119, 127, 127, 127, 127, 127, 127,
  589. 127, 127, 127, 127, 127, 1, 1, 1,
  590. 127, 1, 127, 1, 127, 127, 127, 127,
  591. 127, 127, 127, 127, 127, 127, 127, 127,
  592. 127, 127, 127, 127, 127, 127, 127, 127,
  593. 127, 127, 127, 127, 127, 127, 1, 1,
  594. 1, 127, 127, 127, 127, 127, 127, 127,
  595. 127, 127, 127, 127, 127, 127, 127, 127,
  596. 127, 127, 127, 127, 127, 127, 127, 127,
  597. 127, 127, 127, 127, 127, 127, 127, 127,
  598. 127, 127, 1, 1, 1, 1, 1, 1,
  599. 1, 1, 1, 1, 1, 1, 1, 1,
  600. 1, 1, 1, 1, 1, 1, 1, 1,
  601. 1, 1, 1, 1, 1, 1, 1, 1,
  602. 1, 1, 1, 1, 1, 1, 1, 1,
  603. 1, 1, 1, 1, 1, 1, 1, 1,
  604. 1, 1, 1, 1, 1, 1, 1, 1,
  605. 1, 1, 1, 1, 1, 1, 1, 1,
  606. 1, 1, 1, 1, 1, 129, 129, 129,
  607. 129, 129, 129, 129, 129, 129, 129, 129,
  608. 129, 129, 129, 129, 129, 129, 129, 129,
  609. 129, 129, 129, 129, 129, 129, 129, 129,
  610. 129, 129, 129, 130, 131, 131, 131, 131,
  611. 131, 131, 131, 131, 131, 131, 131, 131,
  612. 132, 131, 131, 133, 134, 134, 134, 135,
  613. 1, 127, 127, 127, 127, 127, 127, 127,
  614. 127, 127, 127, 127, 127, 127, 127, 127,
  615. 127, 127, 127, 127, 127, 127, 127, 127,
  616. 127, 127, 127, 127, 127, 127, 127, 127,
  617. 127, 127, 127, 127, 127, 127, 127, 127,
  618. 127, 127, 127, 127, 127, 127, 127, 127,
  619. 127, 127, 127, 127, 127, 127, 127, 127,
  620. 127, 127, 127, 127, 127, 127, 127, 127,
  621. 127, 1, 129, 129, 129, 129, 129, 129,
  622. 129, 129, 129, 129, 129, 129, 129, 129,
  623. 129, 129, 129, 129, 129, 129, 129, 129,
  624. 129, 129, 129, 129, 129, 129, 129, 129,
  625. 129, 129, 1, 129, 129, 129, 129, 129,
  626. 129, 129, 129, 129, 129, 129, 129, 129,
  627. 129, 129, 129, 129, 129, 129, 129, 129,
  628. 129, 129, 129, 129, 129, 129, 129, 129,
  629. 129, 129, 129, 129, 129, 129, 129, 129,
  630. 129, 129, 129, 129, 129, 129, 129, 129,
  631. 129, 129, 129, 129, 129, 129, 129, 129,
  632. 129, 129, 129, 129, 129, 129, 129, 129,
  633. 129, 129, 129, 1, 129, 129, 129, 129,
  634. 129, 129, 129, 129, 129, 129, 129, 129,
  635. 129, 129, 129, 129, 129, 129, 129, 129,
  636. 129, 129, 129, 129, 129, 129, 129, 129,
  637. 129, 129, 129, 129, 1, 131, 131, 131,
  638. 131, 131, 131, 131, 131, 131, 131, 131,
  639. 131, 131, 131, 131, 131, 131, 131, 131,
  640. 131, 131, 131, 131, 131, 131, 131, 131,
  641. 131, 131, 131, 131, 131, 131, 131, 131,
  642. 131, 131, 131, 131, 131, 131, 131, 131,
  643. 131, 131, 131, 131, 131, 1, 131, 131,
  644. 131, 131, 131, 131, 131, 131, 131, 131,
  645. 131, 131, 131, 131, 131, 131, 131, 131,
  646. 131, 131, 131, 131, 131, 131, 131, 131,
  647. 131, 131, 131, 131, 131, 131, 131, 131,
  648. 131, 131, 131, 131, 131, 131, 131, 131,
  649. 131, 131, 131, 131, 131, 131, 131, 131,
  650. 131, 131, 131, 131, 131, 131, 131, 131,
  651. 131, 131, 131, 131, 131, 131, 1, 131,
  652. 131, 131, 131, 131, 131, 131, 131, 131,
  653. 131, 131, 131, 131, 131, 131, 131, 1,
  654. 125, 1, 1, 1, 137, 1, 1, 1,
  655. 1, 1, 1, 1, 1, 1, 1, 1,
  656. 1, 1, 1, 1, 1, 1, 1, 125,
  657. 138, 1, 138, 138, 138, 138, 138, 139,
  658. 1, 138, 138, 1, 138, 1, 138, 138,
  659. 138, 138, 138, 138, 138, 138, 138, 138,
  660. 138, 1, 1, 1, 138, 1, 138, 1,
  661. 138, 138, 138, 138, 138, 138, 138, 138,
  662. 138, 138, 138, 138, 138, 138, 138, 138,
  663. 138, 138, 138, 138, 138, 138, 138, 138,
  664. 138, 138, 1, 1, 1, 138, 138, 138,
  665. 138, 138, 138, 138, 138, 138, 138, 138,
  666. 138, 138, 138, 138, 138, 138, 138, 138,
  667. 138, 138, 138, 138, 138, 138, 138, 138,
  668. 138, 138, 138, 138, 138, 138, 1, 1,
  669. 1, 1, 1, 1, 1, 1, 1, 1,
  670. 1, 1, 1, 1, 1, 1, 1, 1,
  671. 1, 1, 1, 1, 1, 1, 1, 1,
  672. 1, 1, 1, 1, 1, 1, 1, 1,
  673. 1, 1, 1, 1, 1, 1, 1, 1,
  674. 1, 1, 1, 1, 1, 1, 1, 1,
  675. 1, 1, 1, 1, 1, 1, 1, 1,
  676. 1, 1, 1, 1, 1, 1, 1, 1,
  677. 1, 140, 140, 140, 140, 140, 140, 140,
  678. 140, 140, 140, 140, 140, 140, 140, 140,
  679. 140, 140, 140, 140, 140, 140, 140, 140,
  680. 140, 140, 140, 140, 140, 140, 140, 141,
  681. 142, 142, 142, 142, 142, 142, 142, 142,
  682. 142, 142, 142, 142, 143, 142, 142, 144,
  683. 145, 145, 145, 146, 1, 147, 1, 148,
  684. 1, 149, 1, 149, 1, 1, 1, 1,
  685. 1, 1, 1, 1, 1, 1, 1, 1,
  686. 1, 1, 1, 1, 1, 1, 1, 1,
  687. 1, 1, 1, 1, 1, 1, 1, 1,
  688. 1, 1, 1, 1, 150, 1, 1, 151,
  689. 1, 152, 1, 1, 1, 153, 1, 1,
  690. 154, 155, 156, 1, 1, 1, 157, 1,
  691. 158, 1, 1, 1, 1, 159, 1, 160,
  692. 1, 161, 1, 161, 1, 1, 1, 162,
  693. 1, 1, 1, 1, 1, 1, 1, 1,
  694. 1, 1, 1, 1, 1, 1, 1, 1,
  695. 1, 1, 161, 1, 1, 1, 1, 1,
  696. 1, 1, 163, 1, 1, 1, 1, 1,
  697. 1, 1, 164, 164, 164, 164, 164, 164,
  698. 164, 164, 164, 164, 1, 165, 1, 161,
  699. 1, 1, 1, 1, 1, 1, 1, 1,
  700. 1, 1, 1, 1, 1, 1, 1, 1,
  701. 1, 1, 1, 1, 1, 1, 161, 1,
  702. 166, 1, 1, 1, 167, 1, 1, 1,
  703. 1, 1, 1, 1, 1, 1, 1, 1,
  704. 1, 1, 1, 1, 1, 1, 1, 166,
  705. 1, 1, 1, 1, 1, 1, 1, 168,
  706. 1, 1, 1, 1, 1, 1, 1, 169,
  707. 169, 169, 169, 169, 169, 169, 169, 169,
  708. 169, 1, 170, 1, 1, 1, 171, 1,
  709. 1, 1, 1, 1, 1, 1, 1, 1,
  710. 1, 1, 1, 1, 1, 1, 1, 1,
  711. 1, 172, 1, 1, 1, 1, 1, 1,
  712. 1, 173, 1, 1, 1, 1, 1, 1,
  713. 1, 170, 170, 170, 170, 170, 170, 170,
  714. 170, 170, 170, 1, 170, 1, 1, 1,
  715. 171, 1, 1, 1, 1, 1, 1, 1,
  716. 1, 1, 1, 1, 1, 1, 1, 1,
  717. 1, 1, 1, 172, 1, 1, 1, 1,
  718. 1, 1, 1, 173, 1, 174, 1, 170,
  719. 1, 1, 1, 1, 1, 1, 1, 1,
  720. 1, 1, 1, 1, 1, 1, 1, 1,
  721. 1, 1, 1, 1, 1, 1, 170, 1,
  722. 172, 1, 1, 1, 175, 1, 1, 1,
  723. 1, 1, 1, 1, 1, 1, 1, 1,
  724. 1, 1, 1, 1, 1, 1, 1, 172,
  725. 1, 1, 1, 1, 1, 1, 1, 176,
  726. 1, 1, 1, 1, 1, 1, 1, 177,
  727. 177, 177, 177, 177, 177, 177, 177, 177,
  728. 177, 1, 178, 1, 172, 1, 1, 1,
  729. 1, 1, 1, 1, 1, 1, 1, 1,
  730. 1, 1, 1, 1, 1, 1, 1, 1,
  731. 1, 1, 1, 172, 1, 179, 1, 1,
  732. 1, 180, 1, 1, 1, 1, 1, 1,
  733. 1, 1, 1, 1, 1, 1, 1, 1,
  734. 1, 1, 1, 1, 179, 1, 1, 1,
  735. 1, 1, 1, 1, 181, 1, 1, 1,
  736. 1, 1, 1, 1, 182, 182, 182, 182,
  737. 182, 182, 182, 182, 182, 182, 1, 183,
  738. 183, 183, 183, 183, 183, 183, 183, 183,
  739. 183, 1, 183, 1, 1, 1, 184, 1,
  740. 1, 1, 1, 1, 1, 1, 1, 1,
  741. 1, 1, 1, 1, 1, 1, 1, 1,
  742. 1, 183, 1, 1, 1, 1, 1, 1,
  743. 1, 185, 1, 1, 1, 1, 1, 1,
  744. 1, 1, 1, 1, 1, 1, 1, 1,
  745. 1, 1, 1, 186, 1, 187, 1, 183,
  746. 1, 1, 1, 1, 1, 1, 1, 1,
  747. 1, 1, 1, 1, 1, 1, 1, 1,
  748. 1, 1, 1, 1, 1, 1, 183, 1,
  749. 188, 1, 1, 1, 189, 1, 1, 1,
  750. 1, 1, 1, 1, 1, 1, 1, 1,
  751. 1, 1, 1, 1, 1, 1, 1, 188,
  752. 1, 1, 1, 1, 1, 1, 1, 190,
  753. 1, 1, 1, 1, 1, 1, 1, 1,
  754. 1, 1, 1, 1, 1, 1, 1, 1,
  755. 1, 191, 1, 186, 1, 1, 1, 192,
  756. 1, 1, 1, 1, 1, 1, 1, 1,
  757. 1, 1, 1, 1, 1, 1, 1, 1,
  758. 1, 1, 186, 1, 1, 1, 1, 1,
  759. 1, 1, 193, 1, 1, 1, 1, 1,
  760. 1, 1, 194, 194, 194, 194, 194, 194,
  761. 194, 194, 194, 194, 1, 195, 1, 186,
  762. 1, 1, 1, 1, 1, 1, 1, 1,
  763. 1, 1, 1, 1, 1, 1, 1, 1,
  764. 1, 1, 1, 1, 1, 1, 186, 1,
  765. 191, 1, 1, 1, 196, 1, 1, 1,
  766. 1, 1, 1, 1, 1, 1, 1, 1,
  767. 1, 1, 1, 1, 1, 1, 1, 191,
  768. 1, 1, 1, 1, 1, 1, 1, 197,
  769. 1, 1, 1, 1, 1, 1, 1, 198,
  770. 198, 198, 198, 198, 198, 198, 198, 198,
  771. 198, 1, 199, 199, 199, 199, 199, 199,
  772. 199, 199, 199, 199, 1, 199, 1, 1,
  773. 1, 200, 1, 1, 1, 1, 1, 1,
  774. 1, 1, 1, 1, 1, 1, 1, 1,
  775. 1, 1, 1, 1, 201, 1, 1, 1,
  776. 1, 1, 1, 1, 202, 1, 1, 1,
  777. 1, 1, 1, 1, 1, 1, 1, 1,
  778. 1, 1, 1, 1, 1, 1, 203, 1,
  779. 204, 1, 199, 1, 1, 1, 1, 1,
  780. 1, 1, 1, 1, 1, 1, 1, 1,
  781. 1, 1, 1, 1, 1, 1, 1, 1,
  782. 1, 199, 1, 201, 1, 1, 1, 205,
  783. 1, 1, 1, 1, 1, 1, 1, 1,
  784. 1, 1, 1, 1, 1, 1, 1, 1,
  785. 1, 1, 201, 1, 1, 1, 1, 1,
  786. 1, 1, 206, 1, 1, 1, 1, 1,
  787. 1, 1, 207, 207, 207, 207, 207, 207,
  788. 207, 207, 207, 207, 203, 1, 208, 1,
  789. 201, 1, 1, 1, 1, 1, 1, 1,
  790. 1, 1, 1, 1, 1, 1, 1, 1,
  791. 1, 1, 1, 1, 1, 1, 1, 201,
  792. 1, 209, 1, 1, 1, 210, 1, 1,
  793. 1, 1, 1, 1, 1, 1, 1, 1,
  794. 1, 1, 1, 1, 1, 1, 1, 1,
  795. 209, 1, 1, 1, 1, 1, 1, 1,
  796. 211, 1, 1, 1, 1, 1, 1, 1,
  797. 212, 212, 212, 212, 212, 212, 212, 212,
  798. 212, 212, 213, 1, 214, 214, 214, 214,
  799. 214, 214, 214, 214, 214, 214, 1, 215,
  800. 1, 216, 1, 1, 1, 1, 1, 1,
  801. 1, 1, 1, 1, 1, 1, 1, 1,
  802. 1, 1, 1, 1, 1, 1, 1, 1,
  803. 216, 1, 203, 1, 1, 1, 217, 1,
  804. 1, 1, 1, 1, 1, 1, 1, 1,
  805. 1, 1, 1, 1, 1, 1, 1, 1,
  806. 1, 203, 1, 1, 1, 1, 1, 1,
  807. 1, 218, 1, 1, 1, 1, 1, 1,
  808. 1, 219, 219, 219, 219, 219, 219, 219,
  809. 219, 219, 219, 1, 220, 1, 203, 1,
  810. 1, 1, 1, 1, 1, 1, 1, 1,
  811. 1, 1, 1, 1, 1, 1, 1, 1,
  812. 1, 1, 1, 1, 1, 203, 1, 213,
  813. 1, 1, 1, 221, 1, 1, 1, 1,
  814. 1, 1, 1, 1, 1, 1, 1, 1,
  815. 1, 1, 1, 1, 1, 1, 213, 1,
  816. 1, 1, 1, 1, 1, 1, 222, 1,
  817. 1, 1, 1, 1, 1, 1, 223, 223,
  818. 223, 223, 223, 223, 223, 223, 223, 223,
  819. 1, 224, 224, 224, 224, 224, 224, 224,
  820. 224, 224, 224, 1, 224, 1, 1, 1,
  821. 225, 1, 1, 1, 1, 1, 1, 1,
  822. 1, 1, 1, 1, 1, 1, 1, 1,
  823. 1, 1, 1, 226, 1, 1, 1, 1,
  824. 1, 1, 1, 227, 1, 228, 1, 224,
  825. 1, 1, 1, 1, 1, 1, 1, 1,
  826. 1, 1, 1, 1, 1, 1, 1, 1,
  827. 1, 1, 1, 1, 1, 1, 224, 1,
  828. 226, 1, 1, 1, 229, 1, 1, 1,
  829. 1, 1, 1, 1, 1, 1, 1, 1,
  830. 1, 1, 1, 1, 1, 1, 1, 226,
  831. 1, 1, 1, 1, 1, 1, 1, 230,
  832. 1, 1, 1, 1, 1, 1, 1, 207,
  833. 207, 207, 207, 207, 207, 207, 207, 207,
  834. 207, 1, 231, 1, 226, 1, 1, 1,
  835. 1, 1, 1, 1, 1, 1, 1, 1,
  836. 1, 1, 1, 1, 1, 1, 1, 1,
  837. 1, 1, 1, 226, 1, 232, 1, 1,
  838. 1, 233, 1, 1, 1, 1, 1, 1,
  839. 1, 1, 1, 1, 1, 1, 1, 1,
  840. 1, 1, 1, 1, 232, 1, 1, 1,
  841. 1, 1, 1, 1, 234, 1, 1, 1,
  842. 1, 1, 1, 1, 212, 212, 212, 212,
  843. 212, 212, 212, 212, 212, 212, 1, 235,
  844. 1, 1, 1, 236, 1, 1, 1, 1,
  845. 1, 1, 1, 1, 1, 1, 1, 1,
  846. 1, 1, 1, 1, 1, 1, 232, 1,
  847. 1, 1, 1, 1, 1, 1, 237, 1,
  848. 238, 1, 1, 1, 239, 1, 1, 1,
  849. 1, 1, 1, 1, 1, 1, 1, 1,
  850. 1, 1, 1, 1, 1, 1, 1, 209,
  851. 1, 1, 1, 1, 1, 1, 1, 240,
  852. 1, 1, 1, 1, 1, 1, 1, 1,
  853. 1, 1, 1, 1, 1, 1, 1, 1,
  854. 1, 213, 1, 241, 1, 1, 1, 242,
  855. 1, 1, 1, 1, 1, 1, 1, 1,
  856. 1, 1, 1, 1, 1, 1, 1, 1,
  857. 1, 1, 179, 1, 1, 1, 1, 1,
  858. 1, 1, 243, 1, 160, 1, 244, 1,
  859. 160, 1, 245, 1, 160, 1, 246, 1,
  860. 1, 1, 1, 1, 1, 1, 1, 1,
  861. 1, 1, 1, 1, 1, 1, 1, 1,
  862. 1, 1, 247, 1, 160, 1, 160, 1,
  863. 160, 1, 248, 1, 160, 1, 1, 1,
  864. 1, 1, 1, 160, 1, 249, 1, 160,
  865. 1, 250, 1, 160, 1, 251, 1, 160,
  866. 1, 252, 1, 148, 1, 253, 1, 1,
  867. 1, 1, 1, 1, 1, 1, 1, 1,
  868. 1, 1, 1, 1, 1, 1, 1, 1,
  869. 1, 252, 1, 148, 1, 254, 1, 1,
  870. 1, 1, 1, 1, 1, 1, 1, 1,
  871. 1, 1, 255, 1, 148, 1, 148, 1,
  872. 256, 1, 148, 1, 257, 257, 257, 257,
  873. 257, 257, 257, 257, 102, 1, 257, 257,
  874. 258, 257, 257, 257, 257, 257, 257, 257,
  875. 257, 257, 257, 257, 257, 257, 257, 257,
  876. 257, 257, 257, 102, 257, 1, 257, 257,
  877. 257, 257, 257, 257, 257, 257, 257, 257,
  878. 257, 257, 257, 257, 257, 257, 257, 257,
  879. 257, 257, 257, 257, 257, 257, 257, 257,
  880. 257, 257, 257, 257, 257, 257, 257, 257,
  881. 257, 257, 257, 257, 257, 257, 257, 257,
  882. 257, 257, 257, 257, 257, 257, 257, 257,
  883. 257, 257, 257, 257, 257, 257, 257, 259,
  884. 257, 257, 257, 257, 257, 257, 257, 257,
  885. 257, 257, 257, 257, 257, 257, 257, 257,
  886. 257, 257, 257, 257, 257, 257, 257, 257,
  887. 257, 257, 257, 257, 257, 257, 257, 257,
  888. 257, 257, 257, 1, 1, 1, 1, 1,
  889. 1, 1, 1, 1, 1, 1, 1, 1,
  890. 1, 1, 1, 1, 1, 1, 1, 1,
  891. 1, 1, 1, 1, 1, 1, 1, 1,
  892. 1, 1, 1, 1, 1, 1, 1, 1,
  893. 1, 1, 1, 1, 1, 1, 1, 1,
  894. 1, 1, 1, 1, 1, 1, 1, 1,
  895. 1, 1, 1, 1, 1, 1, 1, 1,
  896. 1, 1, 1, 1, 1, 260, 260, 260,
  897. 260, 260, 260, 260, 260, 260, 260, 260,
  898. 260, 260, 260, 260, 260, 260, 260, 260,
  899. 260, 260, 260, 260, 260, 260, 260, 260,
  900. 260, 260, 260, 261, 262, 262, 262, 262,
  901. 262, 262, 262, 262, 262, 262, 262, 262,
  902. 263, 262, 262, 264, 265, 265, 265, 266,
  903. 1, 257, 257, 257, 257, 257, 257, 257,
  904. 257, 257, 1, 257, 257, 267, 257, 257,
  905. 257, 257, 257, 257, 257, 257, 257, 257,
  906. 257, 257, 257, 257, 257, 257, 257, 257,
  907. 257, 257, 268, 257, 257, 257, 257, 257,
  908. 257, 257, 257, 257, 257, 257, 257, 257,
  909. 257, 257, 257, 257, 257, 257, 257, 257,
  910. 257, 257, 257, 257, 257, 257, 257, 257,
  911. 257, 257, 257, 257, 257, 257, 257, 257,
  912. 257, 257, 257, 257, 257, 257, 257, 257,
  913. 257, 257, 257, 257, 257, 257, 257, 257,
  914. 257, 257, 257, 257, 259, 257, 257, 257,
  915. 257, 257, 257, 257, 257, 257, 257, 257,
  916. 257, 257, 257, 257, 257, 257, 257, 257,
  917. 257, 257, 257, 257, 257, 257, 257, 257,
  918. 257, 257, 257, 257, 257, 257, 257, 257,
  919. 1, 1, 1, 1, 1, 1, 1, 1,
  920. 1, 1, 1, 1, 1, 1, 1, 1,
  921. 1, 1, 1, 1, 1, 1, 1, 1,
  922. 1, 1, 1, 1, 1, 1, 1, 1,
  923. 1, 1, 1, 1, 1, 1, 1, 1,
  924. 1, 1, 1, 1, 1, 1, 1, 1,
  925. 1, 1, 1, 1, 1, 1, 1, 1,
  926. 1, 1, 1, 1, 1, 1, 1, 1,
  927. 1, 1, 260, 260, 260, 260, 260, 260,
  928. 260, 260, 260, 260, 260, 260, 260, 260,
  929. 260, 260, 260, 260, 260, 260, 260, 260,
  930. 260, 260, 260, 260, 260, 260, 260, 260,
  931. 261, 262, 262, 262, 262, 262, 262, 262,
  932. 262, 262, 262, 262, 262, 263, 262, 262,
  933. 264, 265, 265, 265, 266, 1, 269, 1,
  934. 257, 1, 1, 1, 1, 1, 1, 1,
  935. 1, 1, 1, 1, 1, 1, 1, 1,
  936. 1, 1, 1, 1, 1, 1, 1, 257,
  937. 1, 270, 1, 1, 1, 271, 1, 1,
  938. 1, 1, 1, 1, 1, 1, 1, 1,
  939. 1, 1, 1, 1, 1, 1, 1, 1,
  940. 272, 268, 102, 268, 268, 268, 268, 268,
  941. 273, 1, 268, 268, 1, 268, 104, 268,
  942. 268, 268, 268, 268, 268, 268, 268, 268,
  943. 268, 268, 1, 1, 1, 268, 1, 268,
  944. 1, 268, 268, 268, 268, 268, 268, 268,
  945. 268, 268, 268, 268, 268, 268, 268, 268,
  946. 268, 268, 268, 268, 268, 268, 268, 268,
  947. 268, 268, 268, 1, 1, 1, 268, 268,
  948. 268, 268, 268, 268, 268, 268, 268, 268,
  949. 268, 268, 268, 268, 268, 268, 268, 268,
  950. 268, 268, 268, 268, 268, 268, 268, 268,
  951. 268, 268, 268, 268, 268, 268, 268, 1,
  952. 1, 1, 1, 1, 1, 1, 1, 1,
  953. 1, 1, 1, 1, 1, 1, 1, 1,
  954. 1, 1, 1, 1, 1, 1, 1, 1,
  955. 1, 1, 1, 1, 1, 1, 1, 1,
  956. 1, 1, 1, 1, 1, 1, 1, 1,
  957. 1, 1, 1, 1, 1, 1, 1, 1,
  958. 1, 1, 1, 1, 1, 1, 1, 1,
  959. 1, 1, 1, 1, 1, 1, 1, 1,
  960. 1, 1, 274, 274, 274, 274, 274, 274,
  961. 274, 274, 274, 274, 274, 274, 274, 274,
  962. 274, 274, 274, 274, 274, 274, 274, 274,
  963. 274, 274, 274, 274, 274, 274, 274, 274,
  964. 275, 276, 276, 276, 276, 276, 276, 276,
  965. 276, 276, 276, 276, 276, 277, 276, 276,
  966. 278, 279, 279, 279, 280, 1, 270, 1,
  967. 1, 1, 271, 1, 1, 1, 1, 1,
  968. 1, 1, 1, 1, 1, 1, 1, 1,
  969. 1, 1, 1, 1, 1, 272, 1, 1,
  970. 1, 1, 1, 1, 1, 273, 1, 281,
  971. 1, 270, 1, 1, 1, 1, 1, 1,
  972. 1, 1, 1, 1, 1, 1, 1, 1,
  973. 1, 1, 1, 1, 1, 1, 1, 1,
  974. 270, 1, 270, 1, 1, 1, 271, 1,
  975. 1, 1, 1, 1, 1, 1, 1, 1,
  976. 1, 1, 1, 1, 1, 1, 1, 1,
  977. 1, 272, 1, 1, 1, 1, 1, 1,
  978. 1, 273, 1, 1, 1, 1, 1, 1,
  979. 1, 1, 1, 1, 1, 1, 1, 1,
  980. 1, 1, 1, 1, 1, 1, 1, 1,
  981. 1, 1, 1, 1, 1, 1, 1, 51,
  982. 1, 1, 1, 1, 1, 1, 52, 1,
  983. 1, 1, 1, 1, 53, 54, 1, 1,
  984. 55, 1, 282, 1, 1, 1, 283, 1,
  985. 1, 1, 1, 1, 1, 1, 1, 1,
  986. 1, 1, 1, 1, 1, 1, 1, 1,
  987. 1, 284, 1, 1, 1, 1, 1, 1,
  988. 1, 285, 1, 268, 102, 268, 268, 268,
  989. 268, 268, 1, 1, 268, 268, 1, 268,
  990. 104, 268, 268, 268, 268, 268, 268, 268,
  991. 268, 268, 268, 268, 1, 1, 1, 268,
  992. 1, 268, 1, 268, 268, 268, 268, 268,
  993. 268, 268, 268, 268, 268, 268, 268, 268,
  994. 268, 268, 268, 268, 268, 268, 268, 268,
  995. 268, 268, 268, 268, 268, 1, 1, 1,
  996. 268, 268, 268, 268, 268, 268, 268, 268,
  997. 268, 268, 268, 268, 268, 268, 268, 268,
  998. 268, 268, 268, 268, 268, 268, 268, 268,
  999. 268, 268, 268, 268, 268, 268, 268, 268,
  1000. 268, 1, 1, 1, 1, 1, 1, 1,
  1001. 1, 1, 1, 1, 1, 1, 1, 1,
  1002. 1, 1, 1, 1, 1, 1, 1, 1,
  1003. 1, 1, 1, 1, 1, 1, 1, 1,
  1004. 1, 1, 1, 1, 1, 1, 1, 1,
  1005. 1, 1, 1, 1, 1, 1, 1, 1,
  1006. 1, 1, 1, 1, 1, 1, 1, 1,
  1007. 1, 1, 1, 1, 1, 1, 1, 1,
  1008. 1, 1, 1, 1, 274, 274, 274, 274,
  1009. 274, 274, 274, 274, 274, 274, 274, 274,
  1010. 274, 274, 274, 274, 274, 274, 274, 274,
  1011. 274, 274, 274, 274, 274, 274, 274, 274,
  1012. 274, 274, 275, 276, 276, 276, 276, 276,
  1013. 276, 276, 276, 276, 276, 276, 276, 277,
  1014. 276, 276, 278, 279, 279, 279, 280, 1,
  1015. 268, 268, 268, 268, 268, 268, 268, 268,
  1016. 268, 268, 268, 268, 268, 268, 268, 268,
  1017. 268, 268, 268, 268, 268, 268, 268, 268,
  1018. 268, 268, 268, 268, 268, 268, 268, 268,
  1019. 268, 268, 268, 268, 268, 268, 268, 268,
  1020. 268, 268, 268, 268, 268, 268, 268, 268,
  1021. 268, 268, 268, 268, 268, 268, 268, 268,
  1022. 268, 268, 268, 268, 268, 268, 268, 268,
  1023. 1, 274, 274, 274, 274, 274, 274, 274,
  1024. 274, 274, 274, 274, 274, 274, 274, 274,
  1025. 274, 274, 274, 274, 274, 274, 274, 274,
  1026. 274, 274, 274, 274, 274, 274, 274, 274,
  1027. 274, 1, 274, 274, 274, 274, 274, 274,
  1028. 274, 274, 274, 274, 274, 274, 274, 274,
  1029. 274, 274, 274, 274, 274, 274, 274, 274,
  1030. 274, 274, 274, 274, 274, 274, 274, 274,
  1031. 274, 274, 274, 274, 274, 274, 274, 274,
  1032. 274, 274, 274, 274, 274, 274, 274, 274,
  1033. 274, 274, 274, 274, 274, 274, 274, 274,
  1034. 274, 274, 274, 274, 274, 274, 274, 274,
  1035. 274, 274, 1, 274, 274, 274, 274, 274,
  1036. 274, 274, 274, 274, 274, 274, 274, 274,
  1037. 274, 274, 274, 274, 274, 274, 274, 274,
  1038. 274, 274, 274, 274, 274, 274, 274, 274,
  1039. 274, 274, 274, 1, 276, 276, 276, 276,
  1040. 276, 276, 276, 276, 276, 276, 276, 276,
  1041. 276, 276, 276, 276, 276, 276, 276, 276,
  1042. 276, 276, 276, 276, 276, 276, 276, 276,
  1043. 276, 276, 276, 276, 276, 276, 276, 276,
  1044. 276, 276, 276, 276, 276, 276, 276, 276,
  1045. 276, 276, 276, 276, 1, 276, 276, 276,
  1046. 276, 276, 276, 276, 276, 276, 276, 276,
  1047. 276, 276, 276, 276, 276, 276, 276, 276,
  1048. 276, 276, 276, 276, 276, 276, 276, 276,
  1049. 276, 276, 276, 276, 276, 276, 276, 276,
  1050. 276, 276, 276, 276, 276, 276, 276, 276,
  1051. 276, 276, 276, 276, 276, 276, 276, 276,
  1052. 276, 276, 276, 276, 276, 276, 276, 276,
  1053. 276, 276, 276, 276, 276, 1, 276, 276,
  1054. 276, 276, 276, 276, 276, 276, 276, 276,
  1055. 276, 276, 276, 276, 276, 276, 1, 257,
  1056. 257, 257, 257, 257, 257, 257, 257, 257,
  1057. 257, 257, 257, 257, 257, 257, 257, 257,
  1058. 257, 257, 257, 257, 257, 257, 257, 257,
  1059. 257, 257, 257, 257, 257, 257, 257, 257,
  1060. 257, 257, 257, 257, 257, 257, 257, 257,
  1061. 257, 257, 257, 257, 257, 257, 257, 257,
  1062. 257, 257, 257, 257, 257, 257, 257, 257,
  1063. 257, 257, 257, 257, 257, 257, 257, 257,
  1064. 257, 257, 257, 257, 257, 257, 257, 257,
  1065. 257, 257, 257, 257, 257, 257, 257, 257,
  1066. 257, 257, 257, 257, 257, 257, 257, 257,
  1067. 257, 257, 257, 257, 257, 257, 257, 257,
  1068. 257, 257, 257, 257, 257, 257, 257, 257,
  1069. 257, 257, 257, 257, 257, 257, 257, 257,
  1070. 257, 257, 257, 257, 257, 257, 257, 257,
  1071. 257, 257, 257, 257, 257, 257, 257, 1,
  1072. 1, 1, 1, 1, 1, 1, 1, 1,
  1073. 1, 1, 1, 1, 1, 1, 1, 1,
  1074. 1, 1, 1, 1, 1, 1, 1, 1,
  1075. 1, 1, 1, 1, 1, 1, 1, 1,
  1076. 1, 1, 1, 1, 1, 1, 1, 1,
  1077. 1, 1, 1, 1, 1, 1, 1, 1,
  1078. 1, 1, 1, 1, 1, 1, 1, 1,
  1079. 1, 1, 1, 1, 1, 1, 1, 1,
  1080. 1, 260, 260, 260, 260, 260, 260, 260,
  1081. 260, 260, 260, 260, 260, 260, 260, 260,
  1082. 260, 260, 260, 260, 260, 260, 260, 260,
  1083. 260, 260, 260, 260, 260, 260, 260, 261,
  1084. 262, 262, 262, 262, 262, 262, 262, 262,
  1085. 262, 262, 262, 262, 263, 262, 262, 264,
  1086. 265, 265, 265, 266, 1, 257, 257, 257,
  1087. 257, 257, 257, 257, 257, 257, 257, 257,
  1088. 257, 257, 257, 257, 257, 257, 257, 257,
  1089. 257, 257, 257, 257, 257, 257, 257, 257,
  1090. 257, 257, 257, 257, 257, 257, 257, 257,
  1091. 257, 257, 257, 257, 257, 257, 257, 257,
  1092. 257, 257, 257, 257, 257, 257, 257, 257,
  1093. 257, 257, 257, 257, 257, 257, 257, 257,
  1094. 257, 257, 257, 257, 257, 1, 260, 260,
  1095. 260, 260, 260, 260, 260, 260, 260, 260,
  1096. 260, 260, 260, 260, 260, 260, 260, 260,
  1097. 260, 260, 260, 260, 260, 260, 260, 260,
  1098. 260, 260, 260, 260, 260, 260, 1, 260,
  1099. 260, 260, 260, 260, 260, 260, 260, 260,
  1100. 260, 260, 260, 260, 260, 260, 260, 260,
  1101. 260, 260, 260, 260, 260, 260, 260, 260,
  1102. 260, 260, 260, 260, 260, 260, 260, 260,
  1103. 260, 260, 260, 260, 260, 260, 260, 260,
  1104. 260, 260, 260, 260, 260, 260, 260, 260,
  1105. 260, 260, 260, 260, 260, 260, 260, 260,
  1106. 260, 260, 260, 260, 260, 260, 260, 1,
  1107. 260, 260, 260, 260, 260, 260, 260, 260,
  1108. 260, 260, 260, 260, 260, 260, 260, 260,
  1109. 260, 260, 260, 260, 260, 260, 260, 260,
  1110. 260, 260, 260, 260, 260, 260, 260, 260,
  1111. 1, 262, 262, 262, 262, 262, 262, 262,
  1112. 262, 262, 262, 262, 262, 262, 262, 262,
  1113. 262, 262, 262, 262, 262, 262, 262, 262,
  1114. 262, 262, 262, 262, 262, 262, 262, 262,
  1115. 262, 262, 262, 262, 262, 262, 262, 262,
  1116. 262, 262, 262, 262, 262, 262, 262, 262,
  1117. 262, 1, 262, 262, 262, 262, 262, 262,
  1118. 262, 262, 262, 262, 262, 262, 262, 262,
  1119. 262, 262, 262, 262, 262, 262, 262, 262,
  1120. 262, 262, 262, 262, 262, 262, 262, 262,
  1121. 262, 262, 262, 262, 262, 262, 262, 262,
  1122. 262, 262, 262, 262, 262, 262, 262, 262,
  1123. 262, 262, 262, 262, 262, 262, 262, 262,
  1124. 262, 262, 262, 262, 262, 262, 262, 262,
  1125. 262, 262, 1, 262, 262, 262, 262, 262,
  1126. 262, 262, 262, 262, 262, 262, 262, 262,
  1127. 262, 262, 262, 1, 286, 1, 102, 1,
  1128. 1, 1, 1, 1, 1, 1, 1, 1,
  1129. 1, 1, 1, 1, 1, 1, 1, 1,
  1130. 1, 1, 1, 1, 1, 102, 1, 119,
  1131. 1, 1, 1, 126, 1, 1, 1, 1,
  1132. 1, 1, 1, 1, 1, 1, 1, 1,
  1133. 1, 1, 1, 1, 1, 1, 119, 101,
  1134. 102, 101, 101, 101, 101, 101, 128, 1,
  1135. 101, 101, 1, 101, 104, 101, 101, 101,
  1136. 101, 101, 101, 101, 101, 101, 101, 101,
  1137. 1, 1, 1, 101, 1, 101, 1, 101,
  1138. 101, 101, 101, 101, 101, 101, 101, 101,
  1139. 101, 101, 101, 101, 101, 101, 101, 101,
  1140. 101, 101, 101, 101, 101, 101, 101, 101,
  1141. 101, 1, 1, 1, 101, 101, 101, 101,
  1142. 101, 101, 101, 101, 101, 101, 101, 101,
  1143. 101, 101, 101, 101, 101, 101, 101, 101,
  1144. 101, 101, 101, 101, 101, 101, 101, 101,
  1145. 101, 101, 101, 101, 101, 1, 1, 1,
  1146. 1, 1, 1, 1, 1, 1, 1, 1,
  1147. 1, 1, 1, 1, 1, 1, 1, 1,
  1148. 1, 1, 1, 1, 1, 1, 1, 1,
  1149. 1, 1, 1, 1, 1, 1, 1, 1,
  1150. 1, 1, 1, 1, 1, 1, 1, 1,
  1151. 1, 1, 1, 1, 1, 1, 1, 1,
  1152. 1, 1, 1, 1, 1, 1, 1, 1,
  1153. 1, 1, 1, 1, 1, 1, 1, 1,
  1154. 106, 106, 106, 106, 106, 106, 106, 106,
  1155. 106, 106, 106, 106, 106, 106, 106, 106,
  1156. 106, 106, 106, 106, 106, 106, 106, 106,
  1157. 106, 106, 106, 106, 106, 106, 107, 108,
  1158. 108, 108, 108, 108, 108, 108, 108, 108,
  1159. 108, 108, 108, 109, 108, 108, 110, 111,
  1160. 111, 111, 112, 1, 101, 101, 101, 101,
  1161. 101, 101, 101, 101, 101, 101, 101, 101,
  1162. 101, 101, 101, 101, 101, 101, 101, 101,
  1163. 101, 101, 101, 101, 101, 101, 101, 101,
  1164. 101, 101, 101, 101, 101, 101, 101, 101,
  1165. 101, 101, 101, 101, 101, 101, 101, 101,
  1166. 101, 101, 101, 101, 101, 101, 101, 101,
  1167. 101, 101, 101, 101, 101, 101, 101, 101,
  1168. 101, 101, 101, 101, 1, 106, 106, 106,
  1169. 106, 106, 106, 106, 106, 106, 106, 106,
  1170. 106, 106, 106, 106, 106, 106, 106, 106,
  1171. 106, 106, 106, 106, 106, 106, 106, 106,
  1172. 106, 106, 106, 106, 106, 1, 106, 106,
  1173. 106, 106, 106, 106, 106, 106, 106, 106,
  1174. 106, 106, 106, 106, 106, 106, 106, 106,
  1175. 106, 106, 106, 106, 106, 106, 106, 106,
  1176. 106, 106, 106, 106, 106, 106, 106, 106,
  1177. 106, 106, 106, 106, 106, 106, 106, 106,
  1178. 106, 106, 106, 106, 106, 106, 106, 106,
  1179. 106, 106, 106, 106, 106, 106, 106, 106,
  1180. 106, 106, 106, 106, 106, 106, 1, 106,
  1181. 106, 106, 106, 106, 106, 106, 106, 106,
  1182. 106, 106, 106, 106, 106, 106, 106, 106,
  1183. 106, 106, 106, 106, 106, 106, 106, 106,
  1184. 106, 106, 106, 106, 106, 106, 106, 1,
  1185. 108, 108, 108, 108, 108, 108, 108, 108,
  1186. 108, 108, 108, 108, 108, 108, 108, 108,
  1187. 108, 108, 108, 108, 108, 108, 108, 108,
  1188. 108, 108, 108, 108, 108, 108, 108, 108,
  1189. 108, 108, 108, 108, 108, 108, 108, 108,
  1190. 108, 108, 108, 108, 108, 108, 108, 108,
  1191. 1, 108, 108, 108, 108, 108, 108, 108,
  1192. 108, 108, 108, 108, 108, 108, 108, 108,
  1193. 108, 108, 108, 108, 108, 108, 108, 108,
  1194. 108, 108, 108, 108, 108, 108, 108, 108,
  1195. 108, 108, 108, 108, 108, 108, 108, 108,
  1196. 108, 108, 108, 108, 108, 108, 108, 108,
  1197. 108, 108, 108, 108, 108, 108, 108, 108,
  1198. 108, 108, 108, 108, 108, 108, 108, 108,
  1199. 108, 1, 108, 108, 108, 108, 108, 108,
  1200. 108, 108, 108, 108, 108, 108, 108, 108,
  1201. 108, 108, 1, 287, 1, 1, 1, 288,
  1202. 1, 1, 1, 1, 1, 1, 1, 1,
  1203. 1, 1, 1, 1, 1, 1, 1, 1,
  1204. 1, 1, 287, 289, 290, 289, 289, 289,
  1205. 289, 289, 291, 1, 289, 289, 1, 289,
  1206. 292, 289, 289, 289, 289, 289, 289, 289,
  1207. 289, 289, 289, 289, 1, 1, 1, 289,
  1208. 1, 289, 1, 289, 289, 289, 289, 289,
  1209. 289, 289, 289, 289, 289, 289, 289, 289,
  1210. 289, 289, 289, 289, 289, 289, 289, 289,
  1211. 289, 289, 289, 289, 289, 293, 1, 1,
  1212. 289, 289, 289, 289, 289, 289, 289, 289,
  1213. 289, 289, 289, 289, 289, 289, 289, 289,
  1214. 289, 289, 289, 289, 289, 289, 289, 289,
  1215. 289, 289, 289, 289, 289, 289, 289, 289,
  1216. 289, 1, 1, 1, 1, 1, 1, 1,
  1217. 1, 1, 1, 1, 1, 1, 1, 1,
  1218. 1, 1, 1, 1, 1, 1, 1, 1,
  1219. 1, 1, 1, 1, 1, 1, 1, 1,
  1220. 1, 1, 1, 1, 1, 1, 1, 1,
  1221. 1, 1, 1, 1, 1, 1, 1, 1,
  1222. 1, 1, 1, 1, 1, 1, 1, 1,
  1223. 1, 1, 1, 1, 1, 1, 1, 1,
  1224. 1, 1, 1, 1, 294, 294, 294, 294,
  1225. 294, 294, 294, 294, 294, 294, 294, 294,
  1226. 294, 294, 294, 294, 294, 294, 294, 294,
  1227. 294, 294, 294, 294, 294, 294, 294, 294,
  1228. 294, 294, 295, 296, 296, 296, 296, 296,
  1229. 296, 296, 296, 296, 296, 296, 296, 297,
  1230. 296, 296, 298, 299, 299, 299, 300, 1,
  1231. 105, 105, 105, 105, 105, 105, 105, 105,
  1232. 105, 1, 105, 105, 301, 105, 105, 105,
  1233. 105, 105, 105, 105, 105, 105, 105, 105,
  1234. 105, 105, 105, 105, 105, 105, 105, 105,
  1235. 105, 105, 105, 105, 105, 105, 105, 105,
  1236. 105, 105, 105, 105, 105, 105, 105, 105,
  1237. 105, 105, 105, 105, 105, 105, 105, 105,
  1238. 105, 105, 105, 105, 105, 105, 105, 105,
  1239. 105, 105, 105, 105, 105, 105, 105, 105,
  1240. 105, 105, 105, 105, 105, 105, 105, 105,
  1241. 105, 105, 105, 105, 105, 105, 105, 105,
  1242. 105, 105, 1, 302, 270, 105, 105, 105,
  1243. 105, 105, 105, 105, 105, 105, 105, 105,
  1244. 105, 105, 105, 105, 105, 105, 105, 105,
  1245. 105, 105, 105, 105, 105, 105, 105, 105,
  1246. 105, 105, 105, 105, 105, 105, 105, 1,
  1247. 1, 1, 1, 1, 1, 1, 1, 1,
  1248. 1, 1, 1, 1, 1, 1, 1, 1,
  1249. 1, 1, 1, 1, 1, 1, 1, 1,
  1250. 1, 1, 1, 1, 1, 1, 1, 1,
  1251. 1, 1, 1, 1, 1, 1, 1, 1,
  1252. 1, 1, 1, 1, 1, 1, 1, 1,
  1253. 1, 1, 1, 1, 1, 1, 1, 1,
  1254. 1, 1, 1, 1, 1, 1, 1, 1,
  1255. 1, 303, 303, 303, 303, 303, 303, 303,
  1256. 303, 303, 303, 303, 303, 303, 303, 303,
  1257. 303, 303, 303, 303, 303, 303, 303, 303,
  1258. 303, 303, 303, 303, 303, 303, 303, 304,
  1259. 305, 305, 305, 305, 305, 305, 305, 305,
  1260. 305, 305, 305, 305, 306, 305, 305, 307,
  1261. 308, 308, 308, 309, 1, 310, 1, 105,
  1262. 1, 1, 1, 1, 1, 1, 1, 1,
  1263. 1, 1, 1, 1, 1, 1, 1, 1,
  1264. 1, 1, 1, 1, 1, 1, 105, 1,
  1265. 105, 105, 105, 105, 105, 105, 105, 105,
  1266. 105, 105, 105, 105, 105, 105, 105, 105,
  1267. 105, 105, 105, 105, 105, 105, 105, 105,
  1268. 105, 105, 105, 105, 105, 105, 105, 105,
  1269. 105, 105, 105, 105, 105, 105, 105, 105,
  1270. 105, 105, 105, 105, 105, 105, 105, 105,
  1271. 105, 105, 105, 105, 105, 105, 105, 105,
  1272. 105, 105, 105, 105, 105, 105, 105, 105,
  1273. 105, 105, 105, 105, 105, 105, 105, 105,
  1274. 105, 105, 105, 105, 105, 105, 105, 105,
  1275. 105, 105, 105, 105, 105, 105, 105, 105,
  1276. 105, 105, 105, 105, 105, 105, 105, 105,
  1277. 105, 105, 105, 105, 105, 105, 105, 105,
  1278. 105, 105, 105, 105, 105, 105, 105, 105,
  1279. 105, 105, 105, 105, 105, 105, 105, 105,
  1280. 105, 105, 105, 105, 105, 105, 105, 105,
  1281. 1, 1, 1, 1, 1, 1, 1, 1,
  1282. 1, 1, 1, 1, 1, 1, 1, 1,
  1283. 1, 1, 1, 1, 1, 1, 1, 1,
  1284. 1, 1, 1, 1, 1, 1, 1, 1,
  1285. 1, 1, 1, 1, 1, 1, 1, 1,
  1286. 1, 1, 1, 1, 1, 1, 1, 1,
  1287. 1, 1, 1, 1, 1, 1, 1, 1,
  1288. 1, 1, 1, 1, 1, 1, 1, 1,
  1289. 1, 1, 303, 303, 303, 303, 303, 303,
  1290. 303, 303, 303, 303, 303, 303, 303, 303,
  1291. 303, 303, 303, 303, 303, 303, 303, 303,
  1292. 303, 303, 303, 303, 303, 303, 303, 303,
  1293. 304, 305, 305, 305, 305, 305, 305, 305,
  1294. 305, 305, 305, 305, 305, 306, 305, 305,
  1295. 307, 308, 308, 308, 309, 1, 105, 105,
  1296. 105, 105, 105, 105, 105, 105, 105, 105,
  1297. 105, 105, 105, 105, 105, 105, 105, 105,
  1298. 105, 105, 105, 105, 105, 105, 105, 105,
  1299. 105, 105, 105, 105, 105, 105, 105, 105,
  1300. 105, 105, 105, 105, 105, 105, 105, 105,
  1301. 105, 105, 105, 105, 105, 105, 105, 105,
  1302. 105, 105, 105, 105, 105, 105, 105, 105,
  1303. 105, 105, 105, 105, 105, 105, 1, 303,
  1304. 303, 303, 303, 303, 303, 303, 303, 303,
  1305. 303, 303, 303, 303, 303, 303, 303, 303,
  1306. 303, 303, 303, 303, 303, 303, 303, 303,
  1307. 303, 303, 303, 303, 303, 303, 303, 1,
  1308. 303, 303, 303, 303, 303, 303, 303, 303,
  1309. 303, 303, 303, 303, 303, 303, 303, 303,
  1310. 303, 303, 303, 303, 303, 303, 303, 303,
  1311. 303, 303, 303, 303, 303, 303, 303, 303,
  1312. 303, 303, 303, 303, 303, 303, 303, 303,
  1313. 303, 303, 303, 303, 303, 303, 303, 303,
  1314. 303, 303, 303, 303, 303, 303, 303, 303,
  1315. 303, 303, 303, 303, 303, 303, 303, 303,
  1316. 1, 303, 303, 303, 303, 303, 303, 303,
  1317. 303, 303, 303, 303, 303, 303, 303, 303,
  1318. 303, 303, 303, 303, 303, 303, 303, 303,
  1319. 303, 303, 303, 303, 303, 303, 303, 303,
  1320. 303, 1, 305, 305, 305, 305, 305, 305,
  1321. 305, 305, 305, 305, 305, 305, 305, 305,
  1322. 305, 305, 305, 305, 305, 305, 305, 305,
  1323. 305, 305, 305, 305, 305, 305, 305, 305,
  1324. 305, 305, 305, 305, 305, 305, 305, 305,
  1325. 305, 305, 305, 305, 305, 305, 305, 305,
  1326. 305, 305, 1, 305, 305, 305, 305, 305,
  1327. 305, 305, 305, 305, 305, 305, 305, 305,
  1328. 305, 305, 305, 305, 305, 305, 305, 305,
  1329. 305, 305, 305, 305, 305, 305, 305, 305,
  1330. 305, 305, 305, 305, 305, 305, 305, 305,
  1331. 305, 305, 305, 305, 305, 305, 305, 305,
  1332. 305, 305, 305, 305, 305, 305, 305, 305,
  1333. 305, 305, 305, 305, 305, 305, 305, 305,
  1334. 305, 305, 305, 1, 305, 305, 305, 305,
  1335. 305, 305, 305, 305, 305, 305, 305, 305,
  1336. 305, 305, 305, 305, 1, 63, 63, 63,
  1337. 63, 63, 63, 63, 63, 63, 63, 63,
  1338. 63, 63, 63, 63, 63, 63, 63, 63,
  1339. 63, 63, 63, 63, 63, 63, 63, 63,
  1340. 63, 63, 63, 63, 63, 63, 63, 63,
  1341. 63, 63, 63, 63, 63, 63, 63, 63,
  1342. 63, 63, 63, 63, 63, 63, 63, 63,
  1343. 63, 63, 63, 63, 63, 63, 63, 63,
  1344. 63, 63, 63, 63, 63, 1, 66, 66,
  1345. 66, 66, 66, 66, 66, 66, 66, 66,
  1346. 66, 66, 66, 66, 66, 66, 66, 66,
  1347. 66, 66, 66, 66, 66, 66, 66, 66,
  1348. 66, 66, 66, 66, 66, 66, 1, 66,
  1349. 66, 66, 66, 66, 66, 66, 66, 66,
  1350. 66, 66, 66, 66, 66, 66, 66, 66,
  1351. 66, 66, 66, 66, 66, 66, 66, 66,
  1352. 66, 66, 66, 66, 66, 66, 66, 66,
  1353. 66, 66, 66, 66, 66, 66, 66, 66,
  1354. 66, 66, 66, 66, 66, 66, 66, 66,
  1355. 66, 66, 66, 66, 66, 66, 66, 66,
  1356. 66, 66, 66, 66, 66, 66, 66, 1,
  1357. 66, 66, 66, 66, 66, 66, 66, 66,
  1358. 66, 66, 66, 66, 66, 66, 66, 66,
  1359. 66, 66, 66, 66, 66, 66, 66, 66,
  1360. 66, 66, 66, 66, 66, 66, 66, 66,
  1361. 1, 68, 68, 68, 68, 68, 68, 68,
  1362. 68, 68, 68, 68, 68, 68, 68, 68,
  1363. 68, 68, 68, 68, 68, 68, 68, 68,
  1364. 68, 68, 68, 68, 68, 68, 68, 68,
  1365. 68, 68, 68, 68, 68, 68, 68, 68,
  1366. 68, 68, 68, 68, 68, 68, 68, 68,
  1367. 68, 1, 68, 68, 68, 68, 68, 68,
  1368. 68, 68, 68, 68, 68, 68, 68, 68,
  1369. 68, 68, 68, 68, 68, 68, 68, 68,
  1370. 68, 68, 68, 68, 68, 68, 68, 68,
  1371. 68, 68, 68, 68, 68, 68, 68, 68,
  1372. 68, 68, 68, 68, 68, 68, 68, 68,
  1373. 68, 68, 68, 68, 68, 68, 68, 68,
  1374. 68, 68, 68, 68, 68, 68, 68, 68,
  1375. 68, 68, 1, 68, 68, 68, 68, 68,
  1376. 68, 68, 68, 68, 68, 68, 68, 68,
  1377. 68, 68, 68, 1, 311, 311, 311, 311,
  1378. 311, 311, 311, 311, 311, 1, 311, 311,
  1379. 312, 311, 311, 311, 311, 311, 311, 311,
  1380. 311, 311, 311, 311, 311, 311, 311, 311,
  1381. 311, 311, 311, 311, 311, 313, 311, 311,
  1382. 311, 311, 311, 311, 311, 311, 311, 311,
  1383. 311, 311, 311, 311, 311, 311, 311, 311,
  1384. 311, 311, 311, 311, 311, 311, 311, 311,
  1385. 311, 311, 311, 311, 311, 311, 311, 311,
  1386. 311, 311, 311, 311, 311, 311, 311, 311,
  1387. 311, 311, 311, 311, 311, 311, 311, 311,
  1388. 311, 311, 311, 311, 311, 311, 311, 314,
  1389. 311, 311, 311, 311, 311, 311, 311, 311,
  1390. 311, 311, 311, 311, 311, 311, 311, 311,
  1391. 311, 311, 311, 311, 311, 311, 311, 311,
  1392. 311, 311, 311, 311, 311, 311, 311, 311,
  1393. 311, 311, 311, 1, 1, 1, 1, 1,
  1394. 1, 1, 1, 1, 1, 1, 1, 1,
  1395. 1, 1, 1, 1, 1, 1, 1, 1,
  1396. 1, 1, 1, 1, 1, 1, 1, 1,
  1397. 1, 1, 1, 1, 1, 1, 1, 1,
  1398. 1, 1, 1, 1, 1, 1, 1, 1,
  1399. 1, 1, 1, 1, 1, 1, 1, 1,
  1400. 1, 1, 1, 1, 1, 1, 1, 1,
  1401. 1, 1, 1, 1, 1, 315, 315, 315,
  1402. 315, 315, 315, 315, 315, 315, 315, 315,
  1403. 315, 315, 315, 315, 315, 315, 315, 315,
  1404. 315, 315, 315, 315, 315, 315, 315, 315,
  1405. 315, 315, 315, 316, 317, 317, 317, 317,
  1406. 317, 317, 317, 317, 317, 317, 317, 317,
  1407. 318, 317, 317, 319, 320, 320, 320, 321,
  1408. 1, 322, 322, 322, 322, 322, 322, 322,
  1409. 322, 322, 1, 322, 322, 323, 322, 322,
  1410. 322, 322, 322, 322, 322, 322, 322, 322,
  1411. 322, 322, 322, 322, 322, 322, 322, 322,
  1412. 322, 322, 324, 322, 322, 322, 322, 322,
  1413. 322, 322, 322, 322, 322, 322, 322, 322,
  1414. 322, 322, 322, 322, 322, 322, 322, 322,
  1415. 322, 322, 322, 322, 322, 322, 322, 322,
  1416. 322, 322, 322, 322, 322, 322, 322, 322,
  1417. 322, 322, 322, 322, 322, 322, 322, 322,
  1418. 322, 322, 322, 322, 322, 322, 322, 322,
  1419. 322, 322, 322, 322, 325, 322, 322, 322,
  1420. 322, 322, 322, 322, 322, 322, 322, 322,
  1421. 322, 322, 322, 322, 322, 322, 322, 322,
  1422. 322, 322, 322, 322, 322, 322, 322, 322,
  1423. 322, 322, 322, 322, 322, 322, 322, 322,
  1424. 1, 1, 1, 1, 1, 1, 1, 1,
  1425. 1, 1, 1, 1, 1, 1, 1, 1,
  1426. 1, 1, 1, 1, 1, 1, 1, 1,
  1427. 1, 1, 1, 1, 1, 1, 1, 1,
  1428. 1, 1, 1, 1, 1, 1, 1, 1,
  1429. 1, 1, 1, 1, 1, 1, 1, 1,
  1430. 1, 1, 1, 1, 1, 1, 1, 1,
  1431. 1, 1, 1, 1, 1, 1, 1, 1,
  1432. 1, 1, 326, 326, 326, 326, 326, 326,
  1433. 326, 326, 326, 326, 326, 326, 326, 326,
  1434. 326, 326, 326, 326, 326, 326, 326, 326,
  1435. 326, 326, 326, 326, 326, 326, 326, 326,
  1436. 327, 328, 328, 328, 328, 328, 328, 328,
  1437. 328, 328, 328, 328, 328, 329, 328, 328,
  1438. 330, 331, 331, 331, 332, 1, 333, 1,
  1439. 322, 1, 1, 1, 1, 1, 1, 1,
  1440. 1, 1, 1, 1, 1, 1, 1, 1,
  1441. 1, 1, 1, 1, 1, 1, 1, 322,
  1442. 1, 322, 322, 322, 322, 322, 322, 322,
  1443. 322, 322, 322, 322, 322, 322, 322, 322,
  1444. 322, 322, 322, 322, 322, 322, 322, 322,
  1445. 322, 322, 322, 322, 322, 322, 322, 322,
  1446. 322, 322, 322, 322, 322, 322, 322, 322,
  1447. 322, 322, 322, 322, 322, 322, 322, 322,
  1448. 322, 322, 322, 322, 322, 322, 322, 322,
  1449. 322, 322, 322, 322, 322, 322, 322, 322,
  1450. 322, 322, 322, 322, 322, 322, 322, 322,
  1451. 322, 322, 322, 322, 322, 322, 322, 322,
  1452. 322, 322, 322, 322, 322, 322, 322, 322,
  1453. 322, 322, 322, 322, 322, 322, 322, 322,
  1454. 322, 322, 322, 322, 322, 322, 322, 322,
  1455. 322, 322, 322, 322, 322, 322, 322, 322,
  1456. 322, 322, 322, 322, 322, 322, 322, 322,
  1457. 322, 322, 322, 322, 322, 322, 322, 322,
  1458. 322, 1, 1, 1, 1, 1, 1, 1,
  1459. 1, 1, 1, 1, 1, 1, 1, 1,
  1460. 1, 1, 1, 1, 1, 1, 1, 1,
  1461. 1, 1, 1, 1, 1, 1, 1, 1,
  1462. 1, 1, 1, 1, 1, 1, 1, 1,
  1463. 1, 1, 1, 1, 1, 1, 1, 1,
  1464. 1, 1, 1, 1, 1, 1, 1, 1,
  1465. 1, 1, 1, 1, 1, 1, 1, 1,
  1466. 1, 1, 1, 326, 326, 326, 326, 326,
  1467. 326, 326, 326, 326, 326, 326, 326, 326,
  1468. 326, 326, 326, 326, 326, 326, 326, 326,
  1469. 326, 326, 326, 326, 326, 326, 326, 326,
  1470. 326, 327, 328, 328, 328, 328, 328, 328,
  1471. 328, 328, 328, 328, 328, 328, 329, 328,
  1472. 328, 330, 331, 331, 331, 332, 1, 322,
  1473. 322, 322, 322, 322, 322, 322, 322, 322,
  1474. 322, 322, 322, 322, 322, 322, 322, 322,
  1475. 322, 322, 322, 322, 322, 322, 322, 322,
  1476. 322, 322, 322, 322, 322, 322, 322, 322,
  1477. 322, 322, 322, 322, 322, 322, 322, 322,
  1478. 322, 322, 322, 322, 322, 322, 322, 322,
  1479. 322, 322, 322, 322, 322, 322, 322, 322,
  1480. 322, 322, 322, 322, 322, 322, 322, 1,
  1481. 326, 326, 326, 326, 326, 326, 326, 326,
  1482. 326, 326, 326, 326, 326, 326, 326, 326,
  1483. 326, 326, 326, 326, 326, 326, 326, 326,
  1484. 326, 326, 326, 326, 326, 326, 326, 326,
  1485. 1, 326, 326, 326, 326, 326, 326, 326,
  1486. 326, 326, 326, 326, 326, 326, 326, 326,
  1487. 326, 326, 326, 326, 326, 326, 326, 326,
  1488. 326, 326, 326, 326, 326, 326, 326, 326,
  1489. 326, 326, 326, 326, 326, 326, 326, 326,
  1490. 326, 326, 326, 326, 326, 326, 326, 326,
  1491. 326, 326, 326, 326, 326, 326, 326, 326,
  1492. 326, 326, 326, 326, 326, 326, 326, 326,
  1493. 326, 1, 326, 326, 326, 326, 326, 326,
  1494. 326, 326, 326, 326, 326, 326, 326, 326,
  1495. 326, 326, 326, 326, 326, 326, 326, 326,
  1496. 326, 326, 326, 326, 326, 326, 326, 326,
  1497. 326, 326, 1, 328, 328, 328, 328, 328,
  1498. 328, 328, 328, 328, 328, 328, 328, 328,
  1499. 328, 328, 328, 328, 328, 328, 328, 328,
  1500. 328, 328, 328, 328, 328, 328, 328, 328,
  1501. 328, 328, 328, 328, 328, 328, 328, 328,
  1502. 328, 328, 328, 328, 328, 328, 328, 328,
  1503. 328, 328, 328, 1, 328, 328, 328, 328,
  1504. 328, 328, 328, 328, 328, 328, 328, 328,
  1505. 328, 328, 328, 328, 328, 328, 328, 328,
  1506. 328, 328, 328, 328, 328, 328, 328, 328,
  1507. 328, 328, 328, 328, 328, 328, 328, 328,
  1508. 328, 328, 328, 328, 328, 328, 328, 328,
  1509. 328, 328, 328, 328, 328, 328, 328, 328,
  1510. 328, 328, 328, 328, 328, 328, 328, 328,
  1511. 328, 328, 328, 328, 1, 328, 328, 328,
  1512. 328, 328, 328, 328, 328, 328, 328, 328,
  1513. 328, 328, 328, 328, 328, 1, 60, 1,
  1514. 1, 1, 334, 1, 1, 1, 1, 1,
  1515. 1, 1, 1, 1, 1, 1, 1, 1,
  1516. 1, 1, 1, 1, 1, 60, 335, 336,
  1517. 335, 335, 335, 335, 335, 337, 1, 335,
  1518. 335, 1, 335, 1, 335, 335, 335, 335,
  1519. 335, 335, 335, 335, 335, 335, 335, 1,
  1520. 1, 1, 335, 1, 335, 1, 335, 335,
  1521. 335, 335, 335, 335, 335, 335, 335, 335,
  1522. 335, 335, 335, 335, 335, 335, 335, 335,
  1523. 335, 335, 335, 335, 335, 335, 335, 335,
  1524. 1, 1, 1, 335, 335, 335, 335, 335,
  1525. 335, 335, 335, 335, 335, 335, 335, 335,
  1526. 335, 335, 335, 335, 335, 335, 335, 335,
  1527. 335, 335, 335, 335, 335, 335, 335, 335,
  1528. 335, 335, 335, 335, 1, 1, 1, 1,
  1529. 1, 1, 1, 1, 1, 1, 1, 1,
  1530. 1, 1, 1, 1, 1, 1, 1, 1,
  1531. 1, 1, 1, 1, 1, 1, 1, 1,
  1532. 1, 1, 1, 1, 1, 1, 1, 1,
  1533. 1, 1, 1, 1, 1, 1, 1, 1,
  1534. 1, 1, 1, 1, 1, 1, 1, 1,
  1535. 1, 1, 1, 1, 1, 1, 1, 1,
  1536. 1, 1, 1, 1, 1, 1, 1, 338,
  1537. 338, 338, 338, 338, 338, 338, 338, 338,
  1538. 338, 338, 338, 338, 338, 338, 338, 338,
  1539. 338, 338, 338, 338, 338, 338, 338, 338,
  1540. 338, 338, 338, 338, 338, 339, 340, 340,
  1541. 340, 340, 340, 340, 340, 340, 340, 340,
  1542. 340, 340, 341, 340, 340, 342, 343, 343,
  1543. 343, 344, 1, 345, 345, 345, 345, 345,
  1544. 345, 345, 345, 33, 1, 345, 345, 346,
  1545. 345, 345, 345, 345, 345, 345, 345, 345,
  1546. 345, 345, 345, 345, 345, 345, 345, 345,
  1547. 345, 345, 33, 345, 1, 345, 345, 345,
  1548. 345, 345, 345, 345, 345, 345, 345, 345,
  1549. 345, 345, 345, 345, 345, 345, 345, 345,
  1550. 345, 345, 345, 345, 345, 345, 345, 345,
  1551. 345, 345, 345, 345, 345, 345, 345, 345,
  1552. 345, 345, 345, 345, 345, 345, 345, 345,
  1553. 345, 345, 345, 345, 345, 345, 345, 345,
  1554. 345, 345, 345, 345, 345, 345, 347, 345,
  1555. 345, 345, 345, 345, 345, 345, 345, 345,
  1556. 345, 345, 345, 345, 345, 345, 345, 345,
  1557. 345, 345, 345, 345, 345, 345, 345, 345,
  1558. 345, 345, 345, 345, 345, 345, 345, 345,
  1559. 345, 345, 1, 1, 1, 1, 1, 1,
  1560. 1, 1, 1, 1, 1, 1, 1, 1,
  1561. 1, 1, 1, 1, 1, 1, 1, 1,
  1562. 1, 1, 1, 1, 1, 1, 1, 1,
  1563. 1, 1, 1, 1, 1, 1, 1, 1,
  1564. 1, 1, 1, 1, 1, 1, 1, 1,
  1565. 1, 1, 1, 1, 1, 1, 1, 1,
  1566. 1, 1, 1, 1, 1, 1, 1, 1,
  1567. 1, 1, 1, 1, 348, 348, 348, 348,
  1568. 348, 348, 348, 348, 348, 348, 348, 348,
  1569. 348, 348, 348, 348, 348, 348, 348, 348,
  1570. 348, 348, 348, 348, 348, 348, 348, 348,
  1571. 348, 348, 349, 350, 350, 350, 350, 350,
  1572. 350, 350, 350, 350, 350, 350, 350, 351,
  1573. 350, 350, 352, 353, 353, 353, 354, 1,
  1574. 345, 345, 345, 345, 345, 345, 345, 345,
  1575. 345, 1, 345, 345, 355, 345, 345, 345,
  1576. 345, 345, 345, 345, 345, 345, 345, 345,
  1577. 345, 345, 345, 345, 345, 345, 345, 345,
  1578. 345, 356, 345, 345, 345, 345, 345, 345,
  1579. 345, 345, 345, 345, 345, 345, 345, 345,
  1580. 345, 345, 345, 345, 345, 345, 345, 345,
  1581. 345, 345, 345, 345, 345, 345, 345, 345,
  1582. 345, 345, 345, 345, 345, 345, 345, 345,
  1583. 345, 345, 345, 345, 345, 345, 345, 345,
  1584. 345, 345, 345, 345, 345, 345, 345, 345,
  1585. 345, 345, 345, 347, 345, 345, 345, 345,
  1586. 345, 345, 345, 345, 345, 345, 345, 345,
  1587. 345, 345, 345, 345, 345, 345, 345, 345,
  1588. 345, 345, 345, 345, 345, 345, 345, 345,
  1589. 345, 345, 345, 345, 345, 345, 345, 1,
  1590. 1, 1, 1, 1, 1, 1, 1, 1,
  1591. 1, 1, 1, 1, 1, 1, 1, 1,
  1592. 1, 1, 1, 1, 1, 1, 1, 1,
  1593. 1, 1, 1, 1, 1, 1, 1, 1,
  1594. 1, 1, 1, 1, 1, 1, 1, 1,
  1595. 1, 1, 1, 1, 1, 1, 1, 1,
  1596. 1, 1, 1, 1, 1, 1, 1, 1,
  1597. 1, 1, 1, 1, 1, 1, 1, 1,
  1598. 1, 348, 348, 348, 348, 348, 348, 348,
  1599. 348, 348, 348, 348, 348, 348, 348, 348,
  1600. 348, 348, 348, 348, 348, 348, 348, 348,
  1601. 348, 348, 348, 348, 348, 348, 348, 349,
  1602. 350, 350, 350, 350, 350, 350, 350, 350,
  1603. 350, 350, 350, 350, 351, 350, 350, 352,
  1604. 353, 353, 353, 354, 1, 357, 1, 345,
  1605. 1, 1, 1, 1, 1, 1, 1, 1,
  1606. 1, 1, 1, 1, 1, 1, 1, 1,
  1607. 1, 1, 1, 1, 1, 1, 345, 1,
  1608. 358, 1, 1, 1, 359, 1, 1, 1,
  1609. 1, 1, 1, 1, 1, 1, 1, 1,
  1610. 1, 1, 1, 1, 1, 1, 1, 360,
  1611. 356, 33, 356, 356, 356, 356, 356, 361,
  1612. 1, 356, 356, 1, 356, 356, 356, 356,
  1613. 356, 356, 356, 356, 356, 356, 356, 356,
  1614. 356, 1, 1, 1, 356, 1, 356, 36,
  1615. 356, 356, 356, 356, 356, 356, 356, 356,
  1616. 356, 356, 356, 356, 356, 356, 356, 356,
  1617. 356, 356, 356, 356, 356, 356, 356, 356,
  1618. 356, 356, 1, 1, 1, 356, 356, 356,
  1619. 356, 356, 356, 356, 356, 356, 356, 356,
  1620. 356, 356, 356, 356, 356, 356, 356, 356,
  1621. 356, 356, 356, 356, 356, 356, 356, 356,
  1622. 356, 356, 356, 356, 356, 356, 1, 1,
  1623. 1, 1, 1, 1, 1, 1, 1, 1,
  1624. 1, 1, 1, 1, 1, 1, 1, 1,
  1625. 1, 1, 1, 1, 1, 1, 1, 1,
  1626. 1, 1, 1, 1, 1, 1, 1, 1,
  1627. 1, 1, 1, 1, 1, 1, 1, 1,
  1628. 1, 1, 1, 1, 1, 1, 1, 1,
  1629. 1, 1, 1, 1, 1, 1, 1, 1,
  1630. 1, 1, 1, 1, 1, 1, 1, 1,
  1631. 1, 362, 362, 362, 362, 362, 362, 362,
  1632. 362, 362, 362, 362, 362, 362, 362, 362,
  1633. 362, 362, 362, 362, 362, 362, 362, 362,
  1634. 362, 362, 362, 362, 362, 362, 362, 363,
  1635. 364, 364, 364, 364, 364, 364, 364, 364,
  1636. 364, 364, 364, 364, 365, 364, 364, 366,
  1637. 367, 367, 367, 368, 1, 369, 1, 1,
  1638. 1, 370, 1, 1, 1, 1, 1, 1,
  1639. 1, 1, 1, 1, 1, 1, 1, 1,
  1640. 1, 1, 1, 1, 371, 1, 1, 1,
  1641. 1, 1, 1, 1, 372, 1, 1, 1,
  1642. 1, 1, 1, 1, 1, 1, 1, 1,
  1643. 1, 1, 1, 1, 1, 1, 1, 1,
  1644. 1, 1, 1, 1, 49, 1, 373, 1,
  1645. 369, 1, 1, 1, 1, 1, 1, 1,
  1646. 1, 1, 1, 1, 1, 1, 1, 1,
  1647. 1, 1, 1, 1, 1, 1, 1, 369,
  1648. 1, 369, 1, 1, 1, 370, 1, 1,
  1649. 1, 1, 1, 1, 1, 1, 1, 1,
  1650. 1, 1, 1, 1, 1, 1, 1, 1,
  1651. 371, 1, 1, 1, 1, 1, 1, 1,
  1652. 372, 1, 1, 1, 1, 1, 1, 1,
  1653. 1, 1, 1, 1, 1, 1, 1, 1,
  1654. 1, 1, 1, 1, 1, 1, 1, 1,
  1655. 49, 1, 1, 1, 1, 1, 51, 1,
  1656. 1, 1, 1, 1, 1, 52, 1, 1,
  1657. 1, 1, 1, 53, 54, 1, 1, 55,
  1658. 1, 374, 1, 1, 1, 375, 1, 1,
  1659. 1, 1, 1, 1, 1, 1, 1, 1,
  1660. 1, 1, 1, 1, 1, 1, 1, 1,
  1661. 376, 1, 1, 1, 1, 1, 1, 1,
  1662. 377, 1, 1, 1, 1, 1, 1, 1,
  1663. 1, 1, 1, 1, 1, 1, 1, 1,
  1664. 1, 1, 1, 1, 1, 1, 1, 1,
  1665. 61, 1, 356, 356, 356, 356, 356, 356,
  1666. 356, 356, 356, 356, 356, 356, 356, 356,
  1667. 356, 356, 356, 356, 356, 356, 356, 356,
  1668. 356, 356, 356, 356, 356, 356, 356, 356,
  1669. 356, 356, 356, 356, 356, 356, 356, 356,
  1670. 356, 356, 356, 356, 356, 356, 356, 356,
  1671. 356, 356, 356, 356, 356, 356, 356, 356,
  1672. 356, 356, 356, 356, 356, 356, 356, 356,
  1673. 356, 356, 1, 362, 362, 362, 362, 362,
  1674. 362, 362, 362, 362, 362, 362, 362, 362,
  1675. 362, 362, 362, 362, 362, 362, 362, 362,
  1676. 362, 362, 362, 362, 362, 362, 362, 362,
  1677. 362, 362, 362, 1, 362, 362, 362, 362,
  1678. 362, 362, 362, 362, 362, 362, 362, 362,
  1679. 362, 362, 362, 362, 362, 362, 362, 362,
  1680. 362, 362, 362, 362, 362, 362, 362, 362,
  1681. 362, 362, 362, 362, 362, 362, 362, 362,
  1682. 362, 362, 362, 362, 362, 362, 362, 362,
  1683. 362, 362, 362, 362, 362, 362, 362, 362,
  1684. 362, 362, 362, 362, 362, 362, 362, 362,
  1685. 362, 362, 362, 362, 1, 362, 362, 362,
  1686. 362, 362, 362, 362, 362, 362, 362, 362,
  1687. 362, 362, 362, 362, 362, 362, 362, 362,
  1688. 362, 362, 362, 362, 362, 362, 362, 362,
  1689. 362, 362, 362, 362, 362, 1, 364, 364,
  1690. 364, 364, 364, 364, 364, 364, 364, 364,
  1691. 364, 364, 364, 364, 364, 364, 364, 364,
  1692. 364, 364, 364, 364, 364, 364, 364, 364,
  1693. 364, 364, 364, 364, 364, 364, 364, 364,
  1694. 364, 364, 364, 364, 364, 364, 364, 364,
  1695. 364, 364, 364, 364, 364, 364, 1, 364,
  1696. 364, 364, 364, 364, 364, 364, 364, 364,
  1697. 364, 364, 364, 364, 364, 364, 364, 364,
  1698. 364, 364, 364, 364, 364, 364, 364, 364,
  1699. 364, 364, 364, 364, 364, 364, 364, 364,
  1700. 364, 364, 364, 364, 364, 364, 364, 364,
  1701. 364, 364, 364, 364, 364, 364, 364, 364,
  1702. 364, 364, 364, 364, 364, 364, 364, 364,
  1703. 364, 364, 364, 364, 364, 364, 364, 1,
  1704. 364, 364, 364, 364, 364, 364, 364, 364,
  1705. 364, 364, 364, 364, 364, 364, 364, 364,
  1706. 1, 345, 345, 345, 345, 345, 345, 345,
  1707. 345, 345, 345, 345, 345, 345, 345, 345,
  1708. 345, 345, 345, 345, 345, 345, 345, 345,
  1709. 345, 345, 345, 345, 345, 345, 345, 345,
  1710. 345, 345, 345, 345, 345, 345, 345, 345,
  1711. 345, 345, 345, 345, 345, 345, 345, 345,
  1712. 345, 345, 345, 345, 345, 345, 345, 345,
  1713. 345, 345, 345, 345, 345, 345, 345, 345,
  1714. 345, 345, 345, 345, 345, 345, 345, 345,
  1715. 345, 345, 345, 345, 345, 345, 345, 345,
  1716. 345, 345, 345, 345, 345, 345, 345, 345,
  1717. 345, 345, 345, 345, 345, 345, 345, 345,
  1718. 345, 345, 345, 345, 345, 345, 345, 345,
  1719. 345, 345, 345, 345, 345, 345, 345, 345,
  1720. 345, 345, 345, 345, 345, 345, 345, 345,
  1721. 345, 345, 345, 345, 345, 345, 345, 345,
  1722. 345, 1, 1, 1, 1, 1, 1, 1,
  1723. 1, 1, 1, 1, 1, 1, 1, 1,
  1724. 1, 1, 1, 1, 1, 1, 1, 1,
  1725. 1, 1, 1, 1, 1, 1, 1, 1,
  1726. 1, 1, 1, 1, 1, 1, 1, 1,
  1727. 1, 1, 1, 1, 1, 1, 1, 1,
  1728. 1, 1, 1, 1, 1, 1, 1, 1,
  1729. 1, 1, 1, 1, 1, 1, 1, 1,
  1730. 1, 1, 1, 348, 348, 348, 348, 348,
  1731. 348, 348, 348, 348, 348, 348, 348, 348,
  1732. 348, 348, 348, 348, 348, 348, 348, 348,
  1733. 348, 348, 348, 348, 348, 348, 348, 348,
  1734. 348, 349, 350, 350, 350, 350, 350, 350,
  1735. 350, 350, 350, 350, 350, 350, 351, 350,
  1736. 350, 352, 353, 353, 353, 354, 1, 345,
  1737. 345, 345, 345, 345, 345, 345, 345, 345,
  1738. 345, 345, 345, 345, 345, 345, 345, 345,
  1739. 345, 345, 345, 345, 345, 345, 345, 345,
  1740. 345, 345, 345, 345, 345, 345, 345, 345,
  1741. 345, 345, 345, 345, 345, 345, 345, 345,
  1742. 345, 345, 345, 345, 345, 345, 345, 345,
  1743. 345, 345, 345, 345, 345, 345, 345, 345,
  1744. 345, 345, 345, 345, 345, 345, 345, 1,
  1745. 348, 348, 348, 348, 348, 348, 348, 348,
  1746. 348, 348, 348, 348, 348, 348, 348, 348,
  1747. 348, 348, 348, 348, 348, 348, 348, 348,
  1748. 348, 348, 348, 348, 348, 348, 348, 348,
  1749. 1, 348, 348, 348, 348, 348, 348, 348,
  1750. 348, 348, 348, 348, 348, 348, 348, 348,
  1751. 348, 348, 348, 348, 348, 348, 348, 348,
  1752. 348, 348, 348, 348, 348, 348, 348, 348,
  1753. 348, 348, 348, 348, 348, 348, 348, 348,
  1754. 348, 348, 348, 348, 348, 348, 348, 348,
  1755. 348, 348, 348, 348, 348, 348, 348, 348,
  1756. 348, 348, 348, 348, 348, 348, 348, 348,
  1757. 348, 1, 348, 348, 348, 348, 348, 348,
  1758. 348, 348, 348, 348, 348, 348, 348, 348,
  1759. 348, 348, 348, 348, 348, 348, 348, 348,
  1760. 348, 348, 348, 348, 348, 348, 348, 348,
  1761. 348, 348, 1, 350, 350, 350, 350, 350,
  1762. 350, 350, 350, 350, 350, 350, 350, 350,
  1763. 350, 350, 350, 350, 350, 350, 350, 350,
  1764. 350, 350, 350, 350, 350, 350, 350, 350,
  1765. 350, 350, 350, 350, 350, 350, 350, 350,
  1766. 350, 350, 350, 350, 350, 350, 350, 350,
  1767. 350, 350, 350, 1, 350, 350, 350, 350,
  1768. 350, 350, 350, 350, 350, 350, 350, 350,
  1769. 350, 350, 350, 350, 350, 350, 350, 350,
  1770. 350, 350, 350, 350, 350, 350, 350, 350,
  1771. 350, 350, 350, 350, 350, 350, 350, 350,
  1772. 350, 350, 350, 350, 350, 350, 350, 350,
  1773. 350, 350, 350, 350, 350, 350, 350, 350,
  1774. 350, 350, 350, 350, 350, 350, 350, 350,
  1775. 350, 350, 350, 350, 1, 350, 350, 350,
  1776. 350, 350, 350, 350, 350, 350, 350, 350,
  1777. 350, 350, 350, 350, 350, 1, 378, 1,
  1778. 33, 1, 1, 1, 1, 1, 1, 1,
  1779. 1, 1, 1, 1, 1, 1, 1, 1,
  1780. 1, 1, 1, 1, 1, 1, 1, 33,
  1781. 1, 379, 1, 1, 1, 380, 1, 1,
  1782. 1, 1, 1, 1, 1, 1, 1, 1,
  1783. 1, 1, 1, 1, 1, 1, 1, 1,
  1784. 381, 32, 382, 32, 32, 32, 32, 32,
  1785. 383, 1, 32, 32, 1, 32, 356, 32,
  1786. 32, 32, 32, 32, 32, 32, 32, 32,
  1787. 32, 32, 1, 1, 1, 32, 1, 32,
  1788. 36, 32, 32, 32, 32, 32, 32, 32,
  1789. 32, 32, 32, 32, 32, 32, 32, 32,
  1790. 32, 32, 32, 32, 32, 32, 32, 32,
  1791. 32, 32, 32, 1, 1, 1, 32, 32,
  1792. 32, 32, 32, 32, 32, 32, 32, 32,
  1793. 32, 32, 32, 32, 32, 32, 32, 32,
  1794. 32, 32, 32, 32, 32, 32, 32, 32,
  1795. 32, 32, 32, 32, 32, 32, 32, 1,
  1796. 1, 1, 1, 1, 1, 1, 1, 1,
  1797. 1, 1, 1, 1, 1, 1, 1, 1,
  1798. 1, 1, 1, 1, 1, 1, 1, 1,
  1799. 1, 1, 1, 1, 1, 1, 1, 1,
  1800. 1, 1, 1, 1, 1, 1, 1, 1,
  1801. 1, 1, 1, 1, 1, 1, 1, 1,
  1802. 1, 1, 1, 1, 1, 1, 1, 1,
  1803. 1, 1, 1, 1, 1, 1, 1, 1,
  1804. 1, 1, 37, 37, 37, 37, 37, 37,
  1805. 37, 37, 37, 37, 37, 37, 37, 37,
  1806. 37, 37, 37, 37, 37, 37, 37, 37,
  1807. 37, 37, 37, 37, 37, 37, 37, 37,
  1808. 38, 39, 39, 39, 39, 39, 39, 39,
  1809. 39, 39, 39, 39, 39, 40, 39, 39,
  1810. 41, 42, 42, 42, 43, 1, 384, 1,
  1811. 1, 1, 385, 1, 1, 1, 1, 1,
  1812. 1, 1, 1, 1, 1, 1, 1, 1,
  1813. 1, 1, 1, 1, 1, 386, 63, 64,
  1814. 63, 63, 63, 63, 63, 387, 1, 63,
  1815. 63, 1, 63, 1, 63, 63, 63, 63,
  1816. 63, 63, 63, 63, 63, 63, 63, 1,
  1817. 1, 1, 63, 1, 63, 49, 63, 63,
  1818. 63, 63, 63, 63, 63, 63, 63, 63,
  1819. 63, 63, 63, 63, 63, 63, 63, 63,
  1820. 63, 63, 63, 63, 63, 63, 63, 63,
  1821. 1, 1, 1, 63, 63, 63, 63, 63,
  1822. 63, 63, 63, 63, 63, 63, 63, 63,
  1823. 63, 63, 63, 63, 63, 63, 63, 63,
  1824. 63, 63, 63, 63, 63, 63, 63, 63,
  1825. 63, 63, 63, 63, 1, 1, 1, 1,
  1826. 1, 1, 1, 1, 1, 1, 1, 1,
  1827. 1, 1, 1, 1, 1, 1, 1, 1,
  1828. 1, 1, 1, 1, 1, 1, 1, 1,
  1829. 1, 1, 1, 1, 1, 1, 1, 1,
  1830. 1, 1, 1, 1, 1, 1, 1, 1,
  1831. 1, 1, 1, 1, 1, 1, 1, 1,
  1832. 1, 1, 1, 1, 1, 1, 1, 1,
  1833. 1, 1, 1, 1, 1, 1, 1, 66,
  1834. 66, 66, 66, 66, 66, 66, 66, 66,
  1835. 66, 66, 66, 66, 66, 66, 66, 66,
  1836. 66, 66, 66, 66, 66, 66, 66, 66,
  1837. 66, 66, 66, 66, 66, 67, 68, 68,
  1838. 68, 68, 68, 68, 68, 68, 68, 68,
  1839. 68, 68, 69, 68, 68, 70, 71, 71,
  1840. 71, 72, 1, 388, 1, 384, 1, 1,
  1841. 1, 1, 1, 1, 1, 1, 1, 1,
  1842. 1, 1, 1, 1, 1, 1, 1, 1,
  1843. 1, 1, 1, 1, 384, 1, 384, 1,
  1844. 1, 1, 385, 1, 1, 1, 1, 1,
  1845. 1, 1, 1, 1, 1, 1, 1, 1,
  1846. 1, 1, 1, 1, 1, 386, 63, 64,
  1847. 63, 63, 63, 63, 63, 387, 1, 63,
  1848. 63, 1, 63, 1, 63, 63, 63, 63,
  1849. 63, 63, 63, 63, 63, 63, 63, 1,
  1850. 1, 1, 63, 1, 63, 49, 63, 63,
  1851. 63, 63, 63, 389, 63, 63, 63, 63,
  1852. 63, 63, 390, 63, 63, 63, 63, 63,
  1853. 391, 392, 63, 63, 393, 63, 63, 63,
  1854. 1, 1, 1, 63, 63, 63, 63, 63,
  1855. 63, 63, 63, 63, 63, 63, 63, 63,
  1856. 63, 63, 63, 63, 63, 63, 63, 63,
  1857. 63, 63, 63, 63, 63, 63, 63, 63,
  1858. 63, 63, 63, 63, 1, 1, 1, 1,
  1859. 1, 1, 1, 1, 1, 1, 1, 1,
  1860. 1, 1, 1, 1, 1, 1, 1, 1,
  1861. 1, 1, 1, 1, 1, 1, 1, 1,
  1862. 1, 1, 1, 1, 1, 1, 1, 1,
  1863. 1, 1, 1, 1, 1, 1, 1, 1,
  1864. 1, 1, 1, 1, 1, 1, 1, 1,
  1865. 1, 1, 1, 1, 1, 1, 1, 1,
  1866. 1, 1, 1, 1, 1, 1, 1, 66,
  1867. 66, 66, 66, 66, 66, 66, 66, 66,
  1868. 66, 66, 66, 66, 66, 66, 66, 66,
  1869. 66, 66, 66, 66, 66, 66, 66, 66,
  1870. 66, 66, 66, 66, 66, 67, 68, 68,
  1871. 68, 68, 68, 68, 68, 68, 68, 68,
  1872. 68, 68, 69, 68, 68, 70, 71, 71,
  1873. 71, 72, 1, 394, 1, 1, 1, 395,
  1874. 1, 1, 1, 1, 1, 1, 1, 1,
  1875. 1, 1, 1, 1, 1, 1, 1, 1,
  1876. 1, 1, 396, 335, 336, 335, 335, 335,
  1877. 335, 335, 397, 1, 335, 335, 1, 335,
  1878. 1, 335, 335, 335, 335, 335, 335, 335,
  1879. 335, 335, 335, 335, 1, 1, 1, 335,
  1880. 1, 335, 61, 335, 335, 335, 335, 335,
  1881. 335, 335, 335, 335, 335, 335, 335, 335,
  1882. 335, 335, 335, 335, 335, 335, 335, 335,
  1883. 335, 335, 335, 335, 335, 1, 1, 1,
  1884. 335, 335, 335, 335, 335, 335, 335, 335,
  1885. 335, 335, 335, 335, 335, 335, 335, 335,
  1886. 335, 335, 335, 335, 335, 335, 335, 335,
  1887. 335, 335, 335, 335, 335, 335, 335, 335,
  1888. 335, 1, 1, 1, 1, 1, 1, 1,
  1889. 1, 1, 1, 1, 1, 1, 1, 1,
  1890. 1, 1, 1, 1, 1, 1, 1, 1,
  1891. 1, 1, 1, 1, 1, 1, 1, 1,
  1892. 1, 1, 1, 1, 1, 1, 1, 1,
  1893. 1, 1, 1, 1, 1, 1, 1, 1,
  1894. 1, 1, 1, 1, 1, 1, 1, 1,
  1895. 1, 1, 1, 1, 1, 1, 1, 1,
  1896. 1, 1, 1, 1, 338, 338, 338, 338,
  1897. 338, 338, 338, 338, 338, 338, 338, 338,
  1898. 338, 338, 338, 338, 338, 338, 338, 338,
  1899. 338, 338, 338, 338, 338, 338, 338, 338,
  1900. 338, 338, 339, 340, 340, 340, 340, 340,
  1901. 340, 340, 340, 340, 340, 340, 340, 341,
  1902. 340, 340, 342, 343, 343, 343, 344, 1,
  1903. 74, 1, 1, 1, 75, 1, 1, 1,
  1904. 1, 1, 1, 1, 1, 1, 1, 1,
  1905. 1, 1, 1, 1, 1, 1, 1, 76,
  1906. 63, 1, 63, 63, 63, 63, 63, 77,
  1907. 1, 63, 63, 1, 63, 48, 63, 63,
  1908. 63, 63, 63, 63, 63, 63, 63, 63,
  1909. 63, 1, 1, 1, 63, 1, 63, 78,
  1910. 63, 63, 63, 63, 63, 63, 63, 63,
  1911. 63, 63, 63, 63, 63, 63, 63, 63,
  1912. 63, 63, 63, 63, 63, 63, 63, 63,
  1913. 63, 63, 1, 1, 1, 63, 63, 63,
  1914. 63, 63, 63, 63, 63, 63, 63, 63,
  1915. 63, 63, 63, 63, 63, 63, 63, 63,
  1916. 63, 398, 63, 63, 63, 63, 63, 63,
  1917. 63, 63, 63, 63, 63, 63, 1, 1,
  1918. 1, 1, 1, 1, 1, 1, 1, 1,
  1919. 1, 1, 1, 1, 1, 1, 1, 1,
  1920. 1, 1, 1, 1, 1, 1, 1, 1,
  1921. 1, 1, 1, 1, 1, 1, 1, 1,
  1922. 1, 1, 1, 1, 1, 1, 1, 1,
  1923. 1, 1, 1, 1, 1, 1, 1, 1,
  1924. 1, 1, 1, 1, 1, 1, 1, 1,
  1925. 1, 1, 1, 1, 1, 1, 1, 1,
  1926. 1, 66, 66, 66, 66, 66, 66, 66,
  1927. 66, 66, 66, 66, 66, 66, 66, 66,
  1928. 66, 66, 66, 66, 66, 66, 66, 66,
  1929. 66, 66, 66, 66, 66, 66, 66, 67,
  1930. 68, 68, 68, 68, 68, 68, 68, 68,
  1931. 68, 68, 68, 68, 69, 68, 68, 70,
  1932. 71, 71, 71, 72, 1, 74, 1, 1,
  1933. 1, 75, 1, 1, 1, 1, 1, 1,
  1934. 1, 1, 1, 1, 1, 1, 1, 1,
  1935. 1, 1, 1, 1, 76, 63, 1, 63,
  1936. 63, 63, 63, 63, 77, 1, 63, 63,
  1937. 1, 63, 48, 63, 63, 63, 63, 63,
  1938. 63, 63, 63, 63, 63, 63, 1, 1,
  1939. 1, 63, 1, 63, 78, 63, 63, 63,
  1940. 63, 63, 63, 63, 63, 63, 63, 63,
  1941. 63, 63, 63, 63, 63, 63, 63, 63,
  1942. 63, 63, 63, 63, 63, 63, 63, 1,
  1943. 1, 1, 63, 63, 63, 63, 63, 63,
  1944. 63, 63, 63, 63, 63, 399, 63, 63,
  1945. 63, 63, 63, 63, 63, 63, 63, 63,
  1946. 63, 63, 63, 63, 63, 63, 63, 63,
  1947. 63, 63, 63, 1, 1, 1, 1, 1,
  1948. 1, 1, 1, 1, 1, 1, 1, 1,
  1949. 1, 1, 1, 1, 1, 1, 1, 1,
  1950. 1, 1, 1, 1, 1, 1, 1, 1,
  1951. 1, 1, 1, 1, 1, 1, 1, 1,
  1952. 1, 1, 1, 1, 1, 1, 1, 1,
  1953. 1, 1, 1, 1, 1, 1, 1, 1,
  1954. 1, 1, 1, 1, 1, 1, 1, 1,
  1955. 1, 1, 1, 1, 1, 1, 66, 66,
  1956. 66, 66, 66, 66, 66, 66, 66, 66,
  1957. 66, 66, 66, 66, 66, 66, 66, 66,
  1958. 66, 66, 66, 66, 66, 66, 66, 66,
  1959. 66, 66, 66, 66, 67, 68, 68, 68,
  1960. 68, 68, 68, 68, 68, 68, 68, 68,
  1961. 68, 69, 68, 68, 70, 71, 71, 71,
  1962. 72, 1, 74, 1, 1, 1, 75, 1,
  1963. 1, 1, 1, 1, 1, 1, 1, 1,
  1964. 1, 1, 1, 1, 1, 1, 1, 1,
  1965. 1, 400, 63, 1, 63, 63, 63, 63,
  1966. 63, 77, 1, 63, 63, 1, 63, 48,
  1967. 63, 63, 63, 63, 63, 63, 63, 63,
  1968. 63, 63, 63, 1, 1, 1, 63, 1,
  1969. 63, 78, 63, 63, 63, 63, 63, 63,
  1970. 63, 63, 63, 63, 63, 63, 63, 63,
  1971. 63, 63, 63, 63, 63, 63, 63, 63,
  1972. 63, 63, 63, 63, 1, 1, 1, 63,
  1973. 63, 63, 63, 63, 63, 63, 63, 63,
  1974. 63, 63, 63, 63, 63, 63, 63, 63,
  1975. 63, 63, 63, 63, 63, 63, 63, 63,
  1976. 63, 63, 63, 63, 63, 63, 63, 63,
  1977. 1, 1, 1, 1, 1, 1, 1, 1,
  1978. 1, 1, 1, 1, 1, 1, 1, 1,
  1979. 1, 1, 1, 1, 1, 1, 1, 1,
  1980. 1, 1, 1, 1, 1, 1, 1, 1,
  1981. 1, 1, 1, 1, 1, 1, 1, 1,
  1982. 1, 1, 1, 1, 1, 1, 1, 1,
  1983. 1, 1, 1, 1, 1, 1, 1, 1,
  1984. 1, 1, 1, 1, 1, 1, 1, 1,
  1985. 1, 1, 1, 66, 66, 66, 66, 66,
  1986. 66, 66, 66, 66, 66, 66, 66, 66,
  1987. 66, 66, 66, 66, 66, 66, 66, 66,
  1988. 66, 66, 66, 66, 66, 66, 66, 66,
  1989. 66, 67, 68, 68, 68, 68, 68, 68,
  1990. 68, 68, 68, 68, 68, 68, 69, 68,
  1991. 68, 70, 71, 71, 71, 72, 1, 74,
  1992. 1, 1, 1, 75, 1, 1, 1, 1,
  1993. 1, 1, 1, 1, 1, 1, 1, 1,
  1994. 1, 1, 1, 1, 1, 1, 400, 1,
  1995. 1, 1, 1, 1, 1, 1, 77, 1,
  1996. 1, 1, 1, 1, 48, 1, 1, 1,
  1997. 1, 1, 1, 1, 1, 1, 1, 1,
  1998. 1, 1, 1, 1, 1, 1, 78, 150,
  1999. 1, 1, 151, 1, 401, 1, 1, 1,
  2000. 153, 1, 1, 402, 155, 156, 1, 1,
  2001. 1, 403, 54, 1, 1, 55, 1, 245,
  2002. 1, 1, 1, 1, 1, 1, 1, 1,
  2003. 1, 1, 1, 1, 147, 1, 248, 1,
  2004. 1, 1, 1, 1, 1, 1, 1, 1,
  2005. 1, 1, 1, 1, 252, 1, 253, 1,
  2006. 1, 1, 251, 1, 1, 1, 1, 1,
  2007. 1, 1, 1, 1, 1, 1, 1, 1,
  2008. 1, 1, 252, 1, 74, 1, 1, 1,
  2009. 75, 1, 1, 1, 1, 1, 1, 1,
  2010. 1, 1, 1, 1, 1, 1, 1, 1,
  2011. 1, 1, 1, 76, 63, 1, 63, 63,
  2012. 63, 63, 63, 77, 1, 63, 63, 1,
  2013. 63, 48, 63, 63, 63, 63, 63, 63,
  2014. 63, 63, 63, 63, 63, 1, 1, 1,
  2015. 63, 1, 63, 78, 63, 63, 63, 63,
  2016. 63, 63, 63, 63, 63, 63, 63, 63,
  2017. 63, 63, 63, 63, 63, 63, 63, 63,
  2018. 63, 63, 63, 63, 63, 63, 1, 1,
  2019. 1, 63, 63, 63, 63, 63, 63, 63,
  2020. 63, 63, 63, 63, 63, 63, 63, 63,
  2021. 63, 63, 404, 63, 63, 63, 63, 63,
  2022. 63, 63, 63, 63, 63, 63, 63, 63,
  2023. 63, 63, 1, 1, 1, 1, 1, 1,
  2024. 1, 1, 1, 1, 1, 1, 1, 1,
  2025. 1, 1, 1, 1, 1, 1, 1, 1,
  2026. 1, 1, 1, 1, 1, 1, 1, 1,
  2027. 1, 1, 1, 1, 1, 1, 1, 1,
  2028. 1, 1, 1, 1, 1, 1, 1, 1,
  2029. 1, 1, 1, 1, 1, 1, 1, 1,
  2030. 1, 1, 1, 1, 1, 1, 1, 1,
  2031. 1, 1, 1, 1, 1, 66, 66, 66,
  2032. 66, 66, 66, 66, 66, 66, 66, 66,
  2033. 66, 66, 66, 66, 66, 66, 66, 66,
  2034. 66, 66, 66, 66, 66, 66, 66, 66,
  2035. 66, 66, 66, 67, 68, 68, 68, 68,
  2036. 68, 68, 68, 68, 68, 68, 68, 68,
  2037. 69, 68, 68, 70, 71, 71, 71, 72,
  2038. 1, 74, 1, 1, 1, 75, 1, 1,
  2039. 1, 1, 1, 1, 1, 1, 1, 1,
  2040. 1, 1, 1, 1, 1, 1, 1, 1,
  2041. 76, 63, 1, 63, 63, 63, 63, 63,
  2042. 77, 1, 63, 63, 1, 63, 48, 63,
  2043. 63, 63, 63, 63, 63, 63, 63, 63,
  2044. 63, 63, 1, 1, 1, 63, 1, 63,
  2045. 78, 63, 63, 63, 63, 63, 63, 63,
  2046. 63, 63, 63, 63, 63, 63, 63, 63,
  2047. 63, 63, 63, 63, 63, 63, 63, 63,
  2048. 63, 63, 63, 1, 1, 1, 63, 63,
  2049. 63, 63, 63, 63, 63, 63, 63, 63,
  2050. 63, 63, 63, 63, 63, 63, 399, 63,
  2051. 63, 63, 63, 63, 63, 63, 63, 63,
  2052. 63, 63, 63, 63, 63, 63, 63, 1,
  2053. 1, 1, 1, 1, 1, 1, 1, 1,
  2054. 1, 1, 1, 1, 1, 1, 1, 1,
  2055. 1, 1, 1, 1, 1, 1, 1, 1,
  2056. 1, 1, 1, 1, 1, 1, 1, 1,
  2057. 1, 1, 1, 1, 1, 1, 1, 1,
  2058. 1, 1, 1, 1, 1, 1, 1, 1,
  2059. 1, 1, 1, 1, 1, 1, 1, 1,
  2060. 1, 1, 1, 1, 1, 1, 1, 1,
  2061. 1, 1, 66, 66, 66, 66, 66, 66,
  2062. 66, 66, 66, 66, 66, 66, 66, 66,
  2063. 66, 66, 66, 66, 66, 66, 66, 66,
  2064. 66, 66, 66, 66, 66, 66, 66, 66,
  2065. 67, 68, 68, 68, 68, 68, 68, 68,
  2066. 68, 68, 68, 68, 68, 69, 68, 68,
  2067. 70, 71, 71, 71, 72, 1, 74, 1,
  2068. 1, 1, 75, 1, 1, 1, 1, 1,
  2069. 1, 1, 1, 1, 1, 1, 1, 1,
  2070. 1, 1, 1, 1, 1, 76, 63, 1,
  2071. 63, 63, 63, 63, 63, 77, 1, 63,
  2072. 63, 1, 63, 48, 63, 63, 63, 63,
  2073. 63, 63, 63, 63, 63, 63, 63, 1,
  2074. 1, 1, 63, 1, 63, 78, 63, 63,
  2075. 63, 63, 63, 63, 63, 63, 63, 63,
  2076. 63, 63, 63, 63, 63, 63, 63, 63,
  2077. 63, 63, 63, 63, 63, 63, 63, 63,
  2078. 1, 1, 1, 63, 63, 63, 405, 63,
  2079. 63, 63, 63, 63, 63, 63, 63, 63,
  2080. 63, 63, 63, 63, 63, 63, 63, 63,
  2081. 63, 63, 404, 63, 63, 63, 63, 63,
  2082. 63, 63, 63, 63, 1, 1, 1, 1,
  2083. 1, 1, 1, 1, 1, 1, 1, 1,
  2084. 1, 1, 1, 1, 1, 1, 1, 1,
  2085. 1, 1, 1, 1, 1, 1, 1, 1,
  2086. 1, 1, 1, 1, 1, 1, 1, 1,
  2087. 1, 1, 1, 1, 1, 1, 1, 1,
  2088. 1, 1, 1, 1, 1, 1, 1, 1,
  2089. 1, 1, 1, 1, 1, 1, 1, 1,
  2090. 1, 1, 1, 1, 1, 1, 1, 66,
  2091. 66, 66, 66, 66, 66, 66, 66, 66,
  2092. 66, 66, 66, 66, 66, 66, 66, 66,
  2093. 66, 66, 66, 66, 66, 66, 66, 66,
  2094. 66, 66, 66, 66, 66, 67, 68, 68,
  2095. 68, 68, 68, 68, 68, 68, 68, 68,
  2096. 68, 68, 69, 68, 68, 70, 71, 71,
  2097. 71, 72, 1, 74, 1, 1, 1, 75,
  2098. 1, 1, 1, 1, 1, 1, 1, 1,
  2099. 1, 1, 1, 1, 1, 1, 1, 1,
  2100. 1, 1, 76, 63, 1, 63, 63, 63,
  2101. 63, 63, 77, 1, 63, 63, 1, 63,
  2102. 48, 63, 63, 63, 63, 63, 63, 63,
  2103. 63, 63, 63, 63, 1, 1, 1, 63,
  2104. 1, 63, 78, 63, 63, 63, 63, 63,
  2105. 63, 63, 63, 63, 63, 63, 63, 63,
  2106. 63, 63, 63, 63, 63, 63, 63, 63,
  2107. 63, 63, 63, 63, 63, 1, 1, 1,
  2108. 63, 63, 63, 63, 63, 63, 63, 63,
  2109. 63, 63, 63, 63, 63, 63, 63, 63,
  2110. 63, 63, 63, 63, 63, 63, 399, 63,
  2111. 63, 63, 63, 63, 63, 63, 63, 63,
  2112. 63, 1, 1, 1, 1, 1, 1, 1,
  2113. 1, 1, 1, 1, 1, 1, 1, 1,
  2114. 1, 1, 1, 1, 1, 1, 1, 1,
  2115. 1, 1, 1, 1, 1, 1, 1, 1,
  2116. 1, 1, 1, 1, 1, 1, 1, 1,
  2117. 1, 1, 1, 1, 1, 1, 1, 1,
  2118. 1, 1, 1, 1, 1, 1, 1, 1,
  2119. 1, 1, 1, 1, 1, 1, 1, 1,
  2120. 1, 1, 1, 1, 66, 66, 66, 66,
  2121. 66, 66, 66, 66, 66, 66, 66, 66,
  2122. 66, 66, 66, 66, 66, 66, 66, 66,
  2123. 66, 66, 66, 66, 66, 66, 66, 66,
  2124. 66, 66, 67, 68, 68, 68, 68, 68,
  2125. 68, 68, 68, 68, 68, 68, 68, 69,
  2126. 68, 68, 70, 71, 71, 71, 72, 1,
  2127. 74, 1, 1, 1, 75, 1, 1, 1,
  2128. 1, 1, 1, 1, 1, 1, 1, 1,
  2129. 1, 1, 1, 1, 1, 1, 1, 76,
  2130. 63, 1, 63, 63, 63, 63, 63, 77,
  2131. 1, 63, 63, 1, 63, 48, 63, 63,
  2132. 63, 63, 63, 63, 63, 63, 63, 63,
  2133. 63, 1, 1, 1, 63, 1, 63, 78,
  2134. 63, 63, 63, 63, 63, 63, 63, 63,
  2135. 63, 63, 63, 63, 63, 63, 63, 63,
  2136. 63, 63, 63, 63, 63, 63, 63, 63,
  2137. 63, 63, 1, 1, 1, 63, 63, 63,
  2138. 63, 63, 63, 63, 63, 63, 63, 406,
  2139. 63, 63, 63, 63, 63, 63, 63, 63,
  2140. 63, 63, 63, 63, 407, 63, 63, 63,
  2141. 63, 63, 63, 63, 63, 63, 1, 1,
  2142. 1, 1, 1, 1, 1, 1, 1, 1,
  2143. 1, 1, 1, 1, 1, 1, 1, 1,
  2144. 1, 1, 1, 1, 1, 1, 1, 1,
  2145. 1, 1, 1, 1, 1, 1, 1, 1,
  2146. 1, 1, 1, 1, 1, 1, 1, 1,
  2147. 1, 1, 1, 1, 1, 1, 1, 1,
  2148. 1, 1, 1, 1, 1, 1, 1, 1,
  2149. 1, 1, 1, 1, 1, 1, 1, 1,
  2150. 1, 66, 66, 66, 66, 66, 66, 66,
  2151. 66, 66, 66, 66, 66, 66, 66, 66,
  2152. 66, 66, 66, 66, 66, 66, 66, 66,
  2153. 66, 66, 66, 66, 66, 66, 66, 67,
  2154. 68, 68, 68, 68, 68, 68, 68, 68,
  2155. 68, 68, 68, 68, 69, 68, 68, 70,
  2156. 71, 71, 71, 72, 1, 74, 1, 1,
  2157. 1, 75, 1, 1, 1, 1, 1, 1,
  2158. 1, 1, 1, 1, 1, 1, 1, 1,
  2159. 1, 1, 1, 1, 76, 63, 1, 63,
  2160. 63, 63, 63, 63, 77, 1, 63, 63,
  2161. 1, 63, 48, 63, 63, 63, 63, 63,
  2162. 63, 63, 63, 63, 63, 63, 1, 1,
  2163. 1, 63, 1, 63, 78, 63, 63, 63,
  2164. 63, 63, 63, 63, 63, 63, 63, 63,
  2165. 63, 63, 63, 63, 63, 63, 63, 63,
  2166. 63, 63, 63, 63, 63, 63, 63, 1,
  2167. 1, 1, 63, 63, 63, 63, 63, 63,
  2168. 63, 63, 63, 63, 63, 63, 63, 63,
  2169. 63, 63, 63, 63, 63, 63, 63, 63,
  2170. 63, 399, 63, 63, 63, 63, 63, 63,
  2171. 63, 63, 63, 1, 1, 1, 1, 1,
  2172. 1, 1, 1, 1, 1, 1, 1, 1,
  2173. 1, 1, 1, 1, 1, 1, 1, 1,
  2174. 1, 1, 1, 1, 1, 1, 1, 1,
  2175. 1, 1, 1, 1, 1, 1, 1, 1,
  2176. 1, 1, 1, 1, 1, 1, 1, 1,
  2177. 1, 1, 1, 1, 1, 1, 1, 1,
  2178. 1, 1, 1, 1, 1, 1, 1, 1,
  2179. 1, 1, 1, 1, 1, 1, 66, 66,
  2180. 66, 66, 66, 66, 66, 66, 66, 66,
  2181. 66, 66, 66, 66, 66, 66, 66, 66,
  2182. 66, 66, 66, 66, 66, 66, 66, 66,
  2183. 66, 66, 66, 66, 67, 68, 68, 68,
  2184. 68, 68, 68, 68, 68, 68, 68, 68,
  2185. 68, 69, 68, 68, 70, 71, 71, 71,
  2186. 72, 1, 74, 1, 1, 1, 75, 1,
  2187. 1, 1, 1, 1, 1, 1, 1, 1,
  2188. 1, 1, 1, 1, 1, 1, 1, 1,
  2189. 1, 76, 63, 1, 63, 63, 63, 63,
  2190. 63, 77, 1, 63, 63, 1, 63, 48,
  2191. 63, 63, 63, 63, 63, 63, 63, 63,
  2192. 63, 63, 63, 1, 1, 1, 63, 1,
  2193. 63, 78, 63, 63, 63, 63, 63, 63,
  2194. 63, 63, 63, 63, 63, 63, 63, 63,
  2195. 63, 63, 63, 63, 63, 63, 63, 63,
  2196. 63, 63, 63, 63, 1, 1, 1, 63,
  2197. 63, 63, 63, 63, 63, 63, 399, 63,
  2198. 63, 63, 63, 63, 63, 63, 63, 63,
  2199. 63, 63, 63, 63, 63, 63, 63, 63,
  2200. 63, 63, 63, 63, 63, 63, 63, 63,
  2201. 1, 1, 1, 1, 1, 1, 1, 1,
  2202. 1, 1, 1, 1, 1, 1, 1, 1,
  2203. 1, 1, 1, 1, 1, 1, 1, 1,
  2204. 1, 1, 1, 1, 1, 1, 1, 1,
  2205. 1, 1, 1, 1, 1, 1, 1, 1,
  2206. 1, 1, 1, 1, 1, 1, 1, 1,
  2207. 1, 1, 1, 1, 1, 1, 1, 1,
  2208. 1, 1, 1, 1, 1, 1, 1, 1,
  2209. 1, 1, 1, 66, 66, 66, 66, 66,
  2210. 66, 66, 66, 66, 66, 66, 66, 66,
  2211. 66, 66, 66, 66, 66, 66, 66, 66,
  2212. 66, 66, 66, 66, 66, 66, 66, 66,
  2213. 66, 67, 68, 68, 68, 68, 68, 68,
  2214. 68, 68, 68, 68, 68, 68, 69, 68,
  2215. 68, 70, 71, 71, 71, 72, 1, 74,
  2216. 1, 1, 1, 75, 1, 1, 1, 1,
  2217. 1, 1, 1, 1, 1, 1, 1, 1,
  2218. 1, 1, 1, 1, 1, 1, 76, 63,
  2219. 1, 63, 63, 63, 63, 63, 77, 1,
  2220. 63, 63, 1, 63, 48, 63, 63, 63,
  2221. 63, 63, 63, 63, 63, 63, 63, 63,
  2222. 1, 1, 1, 63, 1, 63, 78, 63,
  2223. 63, 63, 63, 63, 63, 63, 63, 63,
  2224. 63, 63, 63, 63, 63, 63, 63, 63,
  2225. 63, 63, 63, 63, 63, 63, 63, 63,
  2226. 63, 1, 1, 1, 63, 63, 63, 63,
  2227. 63, 63, 63, 408, 63, 63, 63, 63,
  2228. 63, 63, 63, 63, 63, 63, 63, 63,
  2229. 63, 63, 63, 63, 63, 63, 63, 63,
  2230. 63, 63, 63, 63, 63, 1, 1, 1,
  2231. 1, 1, 1, 1, 1, 1, 1, 1,
  2232. 1, 1, 1, 1, 1, 1, 1, 1,
  2233. 1, 1, 1, 1, 1, 1, 1, 1,
  2234. 1, 1, 1, 1, 1, 1, 1, 1,
  2235. 1, 1, 1, 1, 1, 1, 1, 1,
  2236. 1, 1, 1, 1, 1, 1, 1, 1,
  2237. 1, 1, 1, 1, 1, 1, 1, 1,
  2238. 1, 1, 1, 1, 1, 1, 1, 1,
  2239. 66, 66, 66, 66, 66, 66, 66, 66,
  2240. 66, 66, 66, 66, 66, 66, 66, 66,
  2241. 66, 66, 66, 66, 66, 66, 66, 66,
  2242. 66, 66, 66, 66, 66, 66, 67, 68,
  2243. 68, 68, 68, 68, 68, 68, 68, 68,
  2244. 68, 68, 68, 69, 68, 68, 70, 71,
  2245. 71, 71, 72, 1, 74, 1, 1, 1,
  2246. 75, 1, 1, 1, 1, 1, 1, 1,
  2247. 1, 1, 1, 1, 1, 1, 1, 1,
  2248. 1, 1, 1, 76, 63, 1, 63, 63,
  2249. 63, 63, 63, 77, 1, 63, 63, 1,
  2250. 63, 48, 63, 63, 63, 63, 63, 63,
  2251. 63, 63, 63, 63, 63, 1, 1, 1,
  2252. 63, 1, 63, 78, 63, 63, 63, 63,
  2253. 63, 63, 63, 63, 63, 63, 63, 63,
  2254. 63, 63, 63, 63, 63, 63, 63, 63,
  2255. 63, 63, 63, 63, 63, 63, 1, 1,
  2256. 1, 63, 63, 63, 63, 63, 63, 399,
  2257. 63, 63, 63, 63, 63, 63, 63, 63,
  2258. 63, 63, 63, 63, 63, 63, 63, 63,
  2259. 63, 63, 63, 63, 63, 63, 63, 63,
  2260. 63, 63, 1, 1, 1, 1, 1, 1,
  2261. 1, 1, 1, 1, 1, 1, 1, 1,
  2262. 1, 1, 1, 1, 1, 1, 1, 1,
  2263. 1, 1, 1, 1, 1, 1, 1, 1,
  2264. 1, 1, 1, 1, 1, 1, 1, 1,
  2265. 1, 1, 1, 1, 1, 1, 1, 1,
  2266. 1, 1, 1, 1, 1, 1, 1, 1,
  2267. 1, 1, 1, 1, 1, 1, 1, 1,
  2268. 1, 1, 1, 1, 1, 66, 66, 66,
  2269. 66, 66, 66, 66, 66, 66, 66, 66,
  2270. 66, 66, 66, 66, 66, 66, 66, 66,
  2271. 66, 66, 66, 66, 66, 66, 66, 66,
  2272. 66, 66, 66, 67, 68, 68, 68, 68,
  2273. 68, 68, 68, 68, 68, 68, 68, 68,
  2274. 69, 68, 68, 70, 71, 71, 71, 72,
  2275. 1, 409, 409, 409, 409, 409, 409, 409,
  2276. 409, 410, 1, 409, 409, 411, 409, 409,
  2277. 409, 409, 409, 409, 409, 409, 409, 409,
  2278. 409, 409, 409, 409, 409, 409, 409, 409,
  2279. 410, 409, 313, 409, 409, 409, 409, 409,
  2280. 409, 409, 409, 409, 409, 409, 409, 409,
  2281. 409, 409, 409, 409, 409, 409, 409, 409,
  2282. 409, 409, 409, 409, 409, 409, 409, 409,
  2283. 409, 409, 409, 409, 409, 409, 409, 409,
  2284. 409, 409, 409, 409, 409, 409, 409, 409,
  2285. 409, 409, 409, 409, 409, 409, 409, 409,
  2286. 409, 409, 409, 409, 412, 409, 409, 409,
  2287. 409, 409, 409, 409, 409, 409, 409, 409,
  2288. 409, 409, 409, 409, 409, 409, 409, 409,
  2289. 409, 409, 409, 409, 409, 409, 409, 409,
  2290. 409, 409, 409, 409, 409, 409, 409, 409,
  2291. 1, 1, 1, 1, 1, 1, 1, 1,
  2292. 1, 1, 1, 1, 1, 1, 1, 1,
  2293. 1, 1, 1, 1, 1, 1, 1, 1,
  2294. 1, 1, 1, 1, 1, 1, 1, 1,
  2295. 1, 1, 1, 1, 1, 1, 1, 1,
  2296. 1, 1, 1, 1, 1, 1, 1, 1,
  2297. 1, 1, 1, 1, 1, 1, 1, 1,
  2298. 1, 1, 1, 1, 1, 1, 1, 1,
  2299. 1, 1, 413, 413, 413, 413, 413, 413,
  2300. 413, 413, 413, 413, 413, 413, 413, 413,
  2301. 413, 413, 413, 413, 413, 413, 413, 413,
  2302. 413, 413, 413, 413, 413, 413, 413, 413,
  2303. 414, 415, 415, 415, 415, 415, 415, 415,
  2304. 415, 415, 415, 415, 415, 416, 415, 415,
  2305. 417, 418, 418, 418, 419, 1, 420, 420,
  2306. 420, 420, 420, 420, 420, 420, 420, 1,
  2307. 420, 420, 421, 420, 420, 420, 420, 420,
  2308. 420, 420, 420, 420, 420, 420, 420, 420,
  2309. 420, 420, 420, 420, 420, 420, 420, 422,
  2310. 420, 420, 420, 420, 420, 420, 420, 420,
  2311. 420, 420, 420, 420, 420, 420, 420, 420,
  2312. 420, 420, 420, 420, 420, 420, 420, 420,
  2313. 420, 420, 420, 420, 420, 420, 420, 420,
  2314. 420, 420, 420, 420, 420, 420, 420, 420,
  2315. 420, 420, 420, 420, 420, 420, 420, 420,
  2316. 420, 420, 420, 420, 420, 420, 420, 420,
  2317. 420, 423, 420, 420, 420, 420, 420, 420,
  2318. 420, 420, 420, 420, 420, 420, 420, 420,
  2319. 420, 420, 420, 420, 420, 420, 420, 420,
  2320. 420, 420, 420, 420, 420, 420, 420, 420,
  2321. 420, 420, 420, 420, 420, 1, 1, 1,
  2322. 1, 1, 1, 1, 1, 1, 1, 1,
  2323. 1, 1, 1, 1, 1, 1, 1, 1,
  2324. 1, 1, 1, 1, 1, 1, 1, 1,
  2325. 1, 1, 1, 1, 1, 1, 1, 1,
  2326. 1, 1, 1, 1, 1, 1, 1, 1,
  2327. 1, 1, 1, 1, 1, 1, 1, 1,
  2328. 1, 1, 1, 1, 1, 1, 1, 1,
  2329. 1, 1, 1, 1, 1, 1, 1, 424,
  2330. 424, 424, 424, 424, 424, 424, 424, 424,
  2331. 424, 424, 424, 424, 424, 424, 424, 424,
  2332. 424, 424, 424, 424, 424, 424, 424, 424,
  2333. 424, 424, 424, 424, 424, 425, 426, 426,
  2334. 426, 426, 426, 426, 426, 426, 426, 426,
  2335. 426, 426, 427, 426, 426, 428, 429, 429,
  2336. 429, 430, 1, 431, 1, 420, 1, 1,
  2337. 1, 1, 1, 1, 1, 1, 1, 1,
  2338. 1, 1, 1, 1, 1, 1, 1, 1,
  2339. 1, 1, 1, 1, 420, 1, 29, 1,
  2340. 1, 1, 30, 1, 1, 1, 1, 1,
  2341. 1, 1, 1, 1, 1, 1, 1, 1,
  2342. 1, 1, 1, 1, 1, 31, 356, 33,
  2343. 356, 356, 356, 356, 356, 34, 1, 356,
  2344. 356, 1, 356, 35, 356, 356, 356, 356,
  2345. 356, 356, 356, 356, 356, 356, 356, 1,
  2346. 1, 1, 356, 1, 356, 36, 356, 356,
  2347. 356, 356, 356, 356, 356, 356, 356, 356,
  2348. 356, 356, 356, 356, 356, 356, 356, 356,
  2349. 356, 356, 356, 356, 356, 356, 356, 356,
  2350. 1, 1, 1, 356, 356, 356, 356, 356,
  2351. 356, 356, 356, 356, 356, 356, 356, 356,
  2352. 356, 356, 356, 356, 356, 356, 356, 356,
  2353. 356, 356, 356, 356, 356, 356, 356, 356,
  2354. 356, 356, 356, 356, 1, 1, 1, 1,
  2355. 1, 1, 1, 1, 1, 1, 1, 1,
  2356. 1, 1, 1, 1, 1, 1, 1, 1,
  2357. 1, 1, 1, 1, 1, 1, 1, 1,
  2358. 1, 1, 1, 1, 1, 1, 1, 1,
  2359. 1, 1, 1, 1, 1, 1, 1, 1,
  2360. 1, 1, 1, 1, 1, 1, 1, 1,
  2361. 1, 1, 1, 1, 1, 1, 1, 1,
  2362. 1, 1, 1, 1, 1, 1, 1, 362,
  2363. 362, 362, 362, 362, 362, 362, 362, 362,
  2364. 362, 362, 362, 362, 362, 362, 362, 362,
  2365. 362, 362, 362, 362, 362, 362, 362, 362,
  2366. 362, 362, 362, 362, 362, 363, 364, 364,
  2367. 364, 364, 364, 364, 364, 364, 364, 364,
  2368. 364, 364, 365, 364, 364, 366, 367, 367,
  2369. 367, 368, 1, 420, 420, 420, 420, 420,
  2370. 420, 420, 420, 420, 420, 420, 420, 420,
  2371. 420, 420, 420, 420, 420, 420, 420, 420,
  2372. 420, 420, 420, 420, 420, 420, 420, 420,
  2373. 420, 420, 420, 420, 420, 420, 420, 420,
  2374. 420, 420, 420, 420, 420, 420, 420, 420,
  2375. 420, 420, 420, 420, 420, 420, 420, 420,
  2376. 420, 420, 420, 420, 420, 420, 420, 420,
  2377. 420, 420, 420, 420, 420, 420, 420, 420,
  2378. 420, 420, 420, 420, 420, 420, 420, 420,
  2379. 420, 420, 420, 420, 420, 420, 420, 420,
  2380. 420, 420, 420, 420, 420, 420, 420, 420,
  2381. 420, 420, 420, 420, 420, 420, 420, 420,
  2382. 420, 420, 420, 420, 420, 420, 420, 420,
  2383. 420, 420, 420, 420, 420, 420, 420, 420,
  2384. 420, 420, 420, 420, 420, 420, 420, 420,
  2385. 420, 420, 420, 1, 1, 1, 1, 1,
  2386. 1, 1, 1, 1, 1, 1, 1, 1,
  2387. 1, 1, 1, 1, 1, 1, 1, 1,
  2388. 1, 1, 1, 1, 1, 1, 1, 1,
  2389. 1, 1, 1, 1, 1, 1, 1, 1,
  2390. 1, 1, 1, 1, 1, 1, 1, 1,
  2391. 1, 1, 1, 1, 1, 1, 1, 1,
  2392. 1, 1, 1, 1, 1, 1, 1, 1,
  2393. 1, 1, 1, 1, 1, 424, 424, 424,
  2394. 424, 424, 424, 424, 424, 424, 424, 424,
  2395. 424, 424, 424, 424, 424, 424, 424, 424,
  2396. 424, 424, 424, 424, 424, 424, 424, 424,
  2397. 424, 424, 424, 425, 426, 426, 426, 426,
  2398. 426, 426, 426, 426, 426, 426, 426, 426,
  2399. 427, 426, 426, 428, 429, 429, 429, 430,
  2400. 1, 420, 420, 420, 420, 420, 420, 420,
  2401. 420, 420, 420, 420, 420, 420, 420, 420,
  2402. 420, 420, 420, 420, 420, 420, 420, 420,
  2403. 420, 420, 420, 420, 420, 420, 420, 420,
  2404. 420, 420, 420, 420, 420, 420, 420, 420,
  2405. 420, 420, 420, 420, 420, 420, 420, 420,
  2406. 420, 420, 420, 420, 420, 420, 420, 420,
  2407. 420, 420, 420, 420, 420, 420, 420, 420,
  2408. 420, 1, 424, 424, 424, 424, 424, 424,
  2409. 424, 424, 424, 424, 424, 424, 424, 424,
  2410. 424, 424, 424, 424, 424, 424, 424, 424,
  2411. 424, 424, 424, 424, 424, 424, 424, 424,
  2412. 424, 424, 1, 424, 424, 424, 424, 424,
  2413. 424, 424, 424, 424, 424, 424, 424, 424,
  2414. 424, 424, 424, 424, 424, 424, 424, 424,
  2415. 424, 424, 424, 424, 424, 424, 424, 424,
  2416. 424, 424, 424, 424, 424, 424, 424, 424,
  2417. 424, 424, 424, 424, 424, 424, 424, 424,
  2418. 424, 424, 424, 424, 424, 424, 424, 424,
  2419. 424, 424, 424, 424, 424, 424, 424, 424,
  2420. 424, 424, 424, 1, 424, 424, 424, 424,
  2421. 424, 424, 424, 424, 424, 424, 424, 424,
  2422. 424, 424, 424, 424, 424, 424, 424, 424,
  2423. 424, 424, 424, 424, 424, 424, 424, 424,
  2424. 424, 424, 424, 424, 1, 426, 426, 426,
  2425. 426, 426, 426, 426, 426, 426, 426, 426,
  2426. 426, 426, 426, 426, 426, 426, 426, 426,
  2427. 426, 426, 426, 426, 426, 426, 426, 426,
  2428. 426, 426, 426, 426, 426, 426, 426, 426,
  2429. 426, 426, 426, 426, 426, 426, 426, 426,
  2430. 426, 426, 426, 426, 426, 1, 426, 426,
  2431. 426, 426, 426, 426, 426, 426, 426, 426,
  2432. 426, 426, 426, 426, 426, 426, 426, 426,
  2433. 426, 426, 426, 426, 426, 426, 426, 426,
  2434. 426, 426, 426, 426, 426, 426, 426, 426,
  2435. 426, 426, 426, 426, 426, 426, 426, 426,
  2436. 426, 426, 426, 426, 426, 426, 426, 426,
  2437. 426, 426, 426, 426, 426, 426, 426, 426,
  2438. 426, 426, 426, 426, 426, 426, 1, 426,
  2439. 426, 426, 426, 426, 426, 426, 426, 426,
  2440. 426, 426, 426, 426, 426, 426, 426, 1,
  2441. 420, 420, 420, 420, 420, 420, 420, 420,
  2442. 432, 1, 420, 420, 433, 420, 420, 420,
  2443. 420, 420, 420, 420, 420, 420, 420, 420,
  2444. 420, 420, 420, 420, 420, 420, 420, 432,
  2445. 420, 324, 420, 420, 420, 420, 420, 420,
  2446. 420, 420, 420, 420, 420, 420, 420, 420,
  2447. 420, 420, 420, 420, 420, 420, 420, 420,
  2448. 420, 420, 420, 420, 420, 420, 420, 420,
  2449. 420, 420, 420, 420, 420, 420, 420, 420,
  2450. 420, 420, 420, 420, 420, 420, 420, 420,
  2451. 420, 420, 420, 420, 420, 420, 420, 420,
  2452. 420, 420, 420, 423, 420, 420, 420, 420,
  2453. 420, 420, 420, 420, 420, 420, 420, 420,
  2454. 420, 420, 420, 420, 420, 420, 420, 420,
  2455. 420, 420, 420, 420, 420, 420, 420, 420,
  2456. 420, 420, 420, 420, 420, 420, 420, 1,
  2457. 1, 1, 1, 1, 1, 1, 1, 1,
  2458. 1, 1, 1, 1, 1, 1, 1, 1,
  2459. 1, 1, 1, 1, 1, 1, 1, 1,
  2460. 1, 1, 1, 1, 1, 1, 1, 1,
  2461. 1, 1, 1, 1, 1, 1, 1, 1,
  2462. 1, 1, 1, 1, 1, 1, 1, 1,
  2463. 1, 1, 1, 1, 1, 1, 1, 1,
  2464. 1, 1, 1, 1, 1, 1, 1, 1,
  2465. 1, 424, 424, 424, 424, 424, 424, 424,
  2466. 424, 424, 424, 424, 424, 424, 424, 424,
  2467. 424, 424, 424, 424, 424, 424, 424, 424,
  2468. 424, 424, 424, 424, 424, 424, 424, 425,
  2469. 426, 426, 426, 426, 426, 426, 426, 426,
  2470. 426, 426, 426, 426, 427, 426, 426, 428,
  2471. 429, 429, 429, 430, 1, 434, 1, 432,
  2472. 1, 1, 1, 1, 1, 1, 1, 1,
  2473. 1, 1, 1, 1, 1, 1, 1, 1,
  2474. 1, 1, 1, 1, 1, 1, 432, 1,
  2475. 32, 32, 32, 32, 32, 32, 32, 32,
  2476. 32, 32, 32, 32, 32, 32, 32, 32,
  2477. 32, 32, 32, 32, 32, 32, 32, 32,
  2478. 32, 32, 32, 32, 32, 32, 32, 32,
  2479. 32, 32, 32, 32, 32, 32, 32, 32,
  2480. 32, 32, 32, 32, 32, 32, 32, 32,
  2481. 32, 32, 32, 32, 32, 32, 32, 32,
  2482. 32, 32, 32, 32, 32, 32, 32, 32,
  2483. 1, 37, 37, 37, 37, 37, 37, 37,
  2484. 37, 37, 37, 37, 37, 37, 37, 37,
  2485. 37, 37, 37, 37, 37, 37, 37, 37,
  2486. 37, 37, 37, 37, 37, 37, 37, 37,
  2487. 37, 1, 37, 37, 37, 37, 37, 37,
  2488. 37, 37, 37, 37, 37, 37, 37, 37,
  2489. 37, 37, 37, 37, 37, 37, 37, 37,
  2490. 37, 37, 37, 37, 37, 37, 37, 37,
  2491. 37, 37, 37, 37, 37, 37, 37, 37,
  2492. 37, 37, 37, 37, 37, 37, 37, 37,
  2493. 37, 37, 37, 37, 37, 37, 37, 37,
  2494. 37, 37, 37, 37, 37, 37, 37, 37,
  2495. 37, 37, 1, 37, 37, 37, 37, 37,
  2496. 37, 37, 37, 37, 37, 37, 37, 37,
  2497. 37, 37, 37, 37, 37, 37, 37, 37,
  2498. 37, 37, 37, 37, 37, 37, 37, 37,
  2499. 37, 37, 37, 1, 39, 39, 39, 39,
  2500. 39, 39, 39, 39, 39, 39, 39, 39,
  2501. 39, 39, 39, 39, 39, 39, 39, 39,
  2502. 39, 39, 39, 39, 39, 39, 39, 39,
  2503. 39, 39, 39, 39, 39, 39, 39, 39,
  2504. 39, 39, 39, 39, 39, 39, 39, 39,
  2505. 39, 39, 39, 39, 1, 39, 39, 39,
  2506. 39, 39, 39, 39, 39, 39, 39, 39,
  2507. 39, 39, 39, 39, 39, 39, 39, 39,
  2508. 39, 39, 39, 39, 39, 39, 39, 39,
  2509. 39, 39, 39, 39, 39, 39, 39, 39,
  2510. 39, 39, 39, 39, 39, 39, 39, 39,
  2511. 39, 39, 39, 39, 39, 39, 39, 39,
  2512. 39, 39, 39, 39, 39, 39, 39, 39,
  2513. 39, 39, 39, 39, 39, 1, 39, 39,
  2514. 39, 39, 39, 39, 39, 39, 39, 39,
  2515. 39, 39, 39, 39, 39, 39, 1, 435,
  2516. 435, 435, 435, 435, 435, 435, 435, 436,
  2517. 1, 435, 435, 437, 435, 435, 435, 435,
  2518. 435, 435, 435, 435, 435, 435, 435, 435,
  2519. 435, 435, 435, 435, 435, 435, 436, 435,
  2520. 438, 435, 435, 435, 435, 435, 435, 435,
  2521. 435, 435, 435, 435, 435, 435, 435, 435,
  2522. 435, 435, 435, 435, 435, 435, 435, 435,
  2523. 435, 435, 435, 435, 435, 435, 435, 435,
  2524. 435, 435, 435, 435, 435, 435, 435, 435,
  2525. 435, 435, 435, 435, 435, 435, 435, 435,
  2526. 435, 435, 435, 435, 435, 435, 435, 435,
  2527. 435, 435, 439, 435, 435, 435, 435, 435,
  2528. 435, 435, 435, 435, 435, 435, 435, 435,
  2529. 435, 435, 435, 435, 435, 435, 435, 435,
  2530. 435, 435, 435, 435, 435, 435, 435, 435,
  2531. 435, 435, 435, 435, 435, 435, 1, 1,
  2532. 1, 1, 1, 1, 1, 1, 1, 1,
  2533. 1, 1, 1, 1, 1, 1, 1, 1,
  2534. 1, 1, 1, 1, 1, 1, 1, 1,
  2535. 1, 1, 1, 1, 1, 1, 1, 1,
  2536. 1, 1, 1, 1, 1, 1, 1, 1,
  2537. 1, 1, 1, 1, 1, 1, 1, 1,
  2538. 1, 1, 1, 1, 1, 1, 1, 1,
  2539. 1, 1, 1, 1, 1, 1, 1, 1,
  2540. 440, 440, 440, 440, 440, 440, 440, 440,
  2541. 440, 440, 440, 440, 440, 440, 440, 440,
  2542. 440, 440, 440, 440, 440, 440, 440, 440,
  2543. 440, 440, 440, 440, 440, 440, 441, 442,
  2544. 442, 442, 442, 442, 442, 442, 442, 442,
  2545. 442, 442, 442, 443, 442, 442, 444, 445,
  2546. 445, 445, 446, 1, 447, 447, 447, 447,
  2547. 447, 447, 447, 447, 447, 1, 447, 447,
  2548. 448, 447, 447, 447, 447, 447, 447, 447,
  2549. 447, 447, 447, 447, 447, 447, 447, 447,
  2550. 447, 447, 447, 447, 447, 449, 447, 447,
  2551. 447, 447, 447, 447, 447, 447, 447, 447,
  2552. 447, 447, 447, 447, 447, 447, 447, 447,
  2553. 447, 447, 447, 447, 447, 447, 447, 447,
  2554. 447, 447, 447, 447, 447, 447, 447, 447,
  2555. 447, 447, 447, 447, 447, 447, 447, 447,
  2556. 447, 447, 447, 447, 447, 447, 447, 447,
  2557. 447, 447, 447, 447, 447, 447, 447, 450,
  2558. 447, 447, 447, 447, 447, 447, 447, 447,
  2559. 447, 447, 447, 447, 447, 447, 447, 447,
  2560. 447, 447, 447, 447, 447, 447, 447, 447,
  2561. 447, 447, 447, 447, 447, 447, 447, 447,
  2562. 447, 447, 447, 1, 1, 1, 1, 1,
  2563. 1, 1, 1, 1, 1, 1, 1, 1,
  2564. 1, 1, 1, 1, 1, 1, 1, 1,
  2565. 1, 1, 1, 1, 1, 1, 1, 1,
  2566. 1, 1, 1, 1, 1, 1, 1, 1,
  2567. 1, 1, 1, 1, 1, 1, 1, 1,
  2568. 1, 1, 1, 1, 1, 1, 1, 1,
  2569. 1, 1, 1, 1, 1, 1, 1, 1,
  2570. 1, 1, 1, 1, 1, 451, 451, 451,
  2571. 451, 451, 451, 451, 451, 451, 451, 451,
  2572. 451, 451, 451, 451, 451, 451, 451, 451,
  2573. 451, 451, 451, 451, 451, 451, 451, 451,
  2574. 451, 451, 451, 452, 453, 453, 453, 453,
  2575. 453, 453, 453, 453, 453, 453, 453, 453,
  2576. 454, 453, 453, 455, 456, 456, 456, 457,
  2577. 1, 458, 1, 447, 1, 1, 1, 1,
  2578. 1, 1, 1, 1, 1, 1, 1, 1,
  2579. 1, 1, 1, 1, 1, 1, 1, 1,
  2580. 1, 1, 447, 1, 459, 1, 1, 1,
  2581. 460, 1, 1, 1, 1, 1, 1, 1,
  2582. 1, 1, 1, 1, 1, 1, 1, 1,
  2583. 1, 1, 1, 461, 356, 33, 356, 356,
  2584. 356, 356, 356, 462, 1, 356, 356, 1,
  2585. 356, 35, 356, 356, 356, 356, 356, 356,
  2586. 356, 356, 356, 356, 356, 1, 1, 1,
  2587. 356, 1, 356, 463, 356, 356, 356, 356,
  2588. 356, 356, 356, 356, 356, 356, 356, 356,
  2589. 356, 356, 356, 356, 356, 356, 356, 356,
  2590. 356, 356, 356, 356, 356, 356, 1, 1,
  2591. 1, 356, 356, 356, 356, 356, 356, 356,
  2592. 356, 356, 356, 356, 356, 356, 356, 356,
  2593. 356, 356, 356, 356, 356, 356, 356, 356,
  2594. 356, 356, 356, 356, 356, 356, 356, 356,
  2595. 356, 356, 1, 1, 1, 1, 1, 1,
  2596. 1, 1, 1, 1, 1, 1, 1, 1,
  2597. 1, 1, 1, 1, 1, 1, 1, 1,
  2598. 1, 1, 1, 1, 1, 1, 1, 1,
  2599. 1, 1, 1, 1, 1, 1, 1, 1,
  2600. 1, 1, 1, 1, 1, 1, 1, 1,
  2601. 1, 1, 1, 1, 1, 1, 1, 1,
  2602. 1, 1, 1, 1, 1, 1, 1, 1,
  2603. 1, 1, 1, 1, 1, 362, 362, 362,
  2604. 362, 362, 362, 362, 362, 362, 362, 362,
  2605. 362, 362, 362, 362, 362, 362, 362, 362,
  2606. 362, 362, 362, 362, 362, 362, 362, 362,
  2607. 362, 362, 362, 363, 364, 364, 364, 364,
  2608. 364, 364, 364, 364, 364, 364, 364, 364,
  2609. 365, 364, 364, 366, 367, 367, 367, 368,
  2610. 1, 464, 1, 1, 1, 465, 1, 1,
  2611. 1, 1, 1, 1, 1, 1, 1, 1,
  2612. 1, 1, 1, 1, 1, 1, 1, 1,
  2613. 466, 1, 1, 1, 1, 1, 1, 1,
  2614. 467, 1, 1, 1, 1, 1, 48, 1,
  2615. 1, 1, 1, 1, 1, 1, 1, 1,
  2616. 1, 1, 1, 1, 1, 1, 1, 1,
  2617. 468, 1, 469, 1, 464, 1, 1, 1,
  2618. 1, 1, 1, 1, 1, 1, 1, 1,
  2619. 1, 1, 1, 1, 1, 1, 1, 1,
  2620. 1, 1, 1, 464, 1, 464, 1, 1,
  2621. 1, 465, 1, 1, 1, 1, 1, 1,
  2622. 1, 1, 1, 1, 1, 1, 1, 1,
  2623. 1, 1, 1, 1, 466, 1, 1, 1,
  2624. 1, 1, 1, 1, 467, 1, 1, 1,
  2625. 1, 1, 48, 1, 1, 1, 1, 1,
  2626. 1, 1, 1, 1, 1, 1, 1, 1,
  2627. 1, 1, 1, 1, 468, 1, 1, 1,
  2628. 1, 1, 51, 1, 1, 1, 1, 1,
  2629. 1, 52, 1, 1, 1, 1, 1, 53,
  2630. 54, 1, 1, 55, 1, 470, 1, 1,
  2631. 1, 471, 1, 1, 1, 1, 1, 1,
  2632. 1, 1, 1, 1, 1, 1, 1, 1,
  2633. 1, 1, 1, 1, 472, 1, 1, 1,
  2634. 1, 1, 1, 1, 473, 1, 1, 1,
  2635. 1, 1, 60, 1, 1, 1, 1, 1,
  2636. 1, 1, 1, 1, 1, 1, 1, 1,
  2637. 1, 1, 1, 1, 474, 1, 447, 447,
  2638. 447, 447, 447, 447, 447, 447, 447, 447,
  2639. 447, 447, 447, 447, 447, 447, 447, 447,
  2640. 447, 447, 447, 447, 447, 447, 447, 447,
  2641. 447, 447, 447, 447, 447, 447, 447, 447,
  2642. 447, 447, 447, 447, 447, 447, 447, 447,
  2643. 447, 447, 447, 447, 447, 447, 447, 447,
  2644. 447, 447, 447, 447, 447, 447, 447, 447,
  2645. 447, 447, 447, 447, 447, 447, 447, 447,
  2646. 447, 447, 447, 447, 447, 447, 447, 447,
  2647. 447, 447, 447, 447, 447, 447, 447, 447,
  2648. 447, 447, 447, 447, 447, 447, 447, 447,
  2649. 447, 447, 447, 447, 447, 447, 447, 447,
  2650. 447, 447, 447, 447, 447, 447, 447, 447,
  2651. 447, 447, 447, 447, 447, 447, 447, 447,
  2652. 447, 447, 447, 447, 447, 447, 447, 447,
  2653. 447, 447, 447, 447, 447, 447, 1, 1,
  2654. 1, 1, 1, 1, 1, 1, 1, 1,
  2655. 1, 1, 1, 1, 1, 1, 1, 1,
  2656. 1, 1, 1, 1, 1, 1, 1, 1,
  2657. 1, 1, 1, 1, 1, 1, 1, 1,
  2658. 1, 1, 1, 1, 1, 1, 1, 1,
  2659. 1, 1, 1, 1, 1, 1, 1, 1,
  2660. 1, 1, 1, 1, 1, 1, 1, 1,
  2661. 1, 1, 1, 1, 1, 1, 1, 1,
  2662. 451, 451, 451, 451, 451, 451, 451, 451,
  2663. 451, 451, 451, 451, 451, 451, 451, 451,
  2664. 451, 451, 451, 451, 451, 451, 451, 451,
  2665. 451, 451, 451, 451, 451, 451, 452, 453,
  2666. 453, 453, 453, 453, 453, 453, 453, 453,
  2667. 453, 453, 453, 454, 453, 453, 455, 456,
  2668. 456, 456, 457, 1, 447, 447, 447, 447,
  2669. 447, 447, 447, 447, 447, 447, 447, 447,
  2670. 447, 447, 447, 447, 447, 447, 447, 447,
  2671. 447, 447, 447, 447, 447, 447, 447, 447,
  2672. 447, 447, 447, 447, 447, 447, 447, 447,
  2673. 447, 447, 447, 447, 447, 447, 447, 447,
  2674. 447, 447, 447, 447, 447, 447, 447, 447,
  2675. 447, 447, 447, 447, 447, 447, 447, 447,
  2676. 447, 447, 447, 447, 1, 451, 451, 451,
  2677. 451, 451, 451, 451, 451, 451, 451, 451,
  2678. 451, 451, 451, 451, 451, 451, 451, 451,
  2679. 451, 451, 451, 451, 451, 451, 451, 451,
  2680. 451, 451, 451, 451, 451, 1, 451, 451,
  2681. 451, 451, 451, 451, 451, 451, 451, 451,
  2682. 451, 451, 451, 451, 451, 451, 451, 451,
  2683. 451, 451, 451, 451, 451, 451, 451, 451,
  2684. 451, 451, 451, 451, 451, 451, 451, 451,
  2685. 451, 451, 451, 451, 451, 451, 451, 451,
  2686. 451, 451, 451, 451, 451, 451, 451, 451,
  2687. 451, 451, 451, 451, 451, 451, 451, 451,
  2688. 451, 451, 451, 451, 451, 451, 1, 451,
  2689. 451, 451, 451, 451, 451, 451, 451, 451,
  2690. 451, 451, 451, 451, 451, 451, 451, 451,
  2691. 451, 451, 451, 451, 451, 451, 451, 451,
  2692. 451, 451, 451, 451, 451, 451, 451, 1,
  2693. 453, 453, 453, 453, 453, 453, 453, 453,
  2694. 453, 453, 453, 453, 453, 453, 453, 453,
  2695. 453, 453, 453, 453, 453, 453, 453, 453,
  2696. 453, 453, 453, 453, 453, 453, 453, 453,
  2697. 453, 453, 453, 453, 453, 453, 453, 453,
  2698. 453, 453, 453, 453, 453, 453, 453, 453,
  2699. 1, 453, 453, 453, 453, 453, 453, 453,
  2700. 453, 453, 453, 453, 453, 453, 453, 453,
  2701. 453, 453, 453, 453, 453, 453, 453, 453,
  2702. 453, 453, 453, 453, 453, 453, 453, 453,
  2703. 453, 453, 453, 453, 453, 453, 453, 453,
  2704. 453, 453, 453, 453, 453, 453, 453, 453,
  2705. 453, 453, 453, 453, 453, 453, 453, 453,
  2706. 453, 453, 453, 453, 453, 453, 453, 453,
  2707. 453, 1, 453, 453, 453, 453, 453, 453,
  2708. 453, 453, 453, 453, 453, 453, 453, 453,
  2709. 453, 453, 1, 447, 447, 447, 447, 447,
  2710. 447, 447, 447, 475, 1, 447, 447, 476,
  2711. 447, 447, 447, 447, 447, 447, 447, 447,
  2712. 447, 447, 447, 447, 447, 447, 447, 447,
  2713. 447, 447, 475, 447, 477, 447, 447, 447,
  2714. 447, 447, 447, 447, 447, 447, 447, 447,
  2715. 447, 447, 447, 447, 447, 447, 447, 447,
  2716. 447, 447, 447, 447, 447, 447, 447, 447,
  2717. 447, 447, 447, 447, 447, 447, 447, 447,
  2718. 447, 447, 447, 447, 447, 447, 447, 447,
  2719. 447, 447, 447, 447, 447, 447, 447, 447,
  2720. 447, 447, 447, 447, 447, 447, 450, 447,
  2721. 447, 447, 447, 447, 447, 447, 447, 447,
  2722. 447, 447, 447, 447, 447, 447, 447, 447,
  2723. 447, 447, 447, 447, 447, 447, 447, 447,
  2724. 447, 447, 447, 447, 447, 447, 447, 447,
  2725. 447, 447, 1, 1, 1, 1, 1, 1,
  2726. 1, 1, 1, 1, 1, 1, 1, 1,
  2727. 1, 1, 1, 1, 1, 1, 1, 1,
  2728. 1, 1, 1, 1, 1, 1, 1, 1,
  2729. 1, 1, 1, 1, 1, 1, 1, 1,
  2730. 1, 1, 1, 1, 1, 1, 1, 1,
  2731. 1, 1, 1, 1, 1, 1, 1, 1,
  2732. 1, 1, 1, 1, 1, 1, 1, 1,
  2733. 1, 1, 1, 1, 451, 451, 451, 451,
  2734. 451, 451, 451, 451, 451, 451, 451, 451,
  2735. 451, 451, 451, 451, 451, 451, 451, 451,
  2736. 451, 451, 451, 451, 451, 451, 451, 451,
  2737. 451, 451, 452, 453, 453, 453, 453, 453,
  2738. 453, 453, 453, 453, 453, 453, 453, 454,
  2739. 453, 453, 455, 456, 456, 456, 457, 1,
  2740. 478, 1, 475, 1, 1, 1, 1, 1,
  2741. 1, 1, 1, 1, 1, 1, 1, 1,
  2742. 1, 1, 1, 1, 1, 1, 1, 1,
  2743. 1, 475, 1, 479, 1, 1, 1, 480,
  2744. 1, 1, 1, 1, 1, 1, 1, 1,
  2745. 1, 1, 1, 1, 1, 1, 1, 1,
  2746. 1, 1, 481, 1, 1, 1, 1, 1,
  2747. 1, 1, 482, 1, 1, 1, 1, 1,
  2748. 48, 1, 1, 1, 1, 1, 1, 1,
  2749. 1, 1, 1, 1, 1, 1, 1, 1,
  2750. 1, 1, 483, 1, 484, 1, 479, 1,
  2751. 1, 1, 1, 1, 1, 1, 1, 1,
  2752. 1, 1, 1, 1, 1, 1, 1, 1,
  2753. 1, 1, 1, 1, 1, 479, 1, 479,
  2754. 1, 1, 1, 480, 1, 1, 1, 1,
  2755. 1, 1, 1, 1, 1, 1, 1, 1,
  2756. 1, 1, 1, 1, 1, 1, 481, 1,
  2757. 1, 1, 1, 1, 1, 1, 482, 1,
  2758. 1, 1, 1, 1, 48, 1, 1, 1,
  2759. 1, 1, 1, 1, 1, 1, 1, 1,
  2760. 1, 1, 1, 1, 1, 1, 483, 1,
  2761. 1, 1, 1, 1, 51, 1, 1, 1,
  2762. 1, 1, 1, 52, 1, 1, 1, 1,
  2763. 1, 53, 54, 1, 1, 55, 1, 485,
  2764. 1, 1, 1, 486, 1, 1, 1, 1,
  2765. 1, 1, 1, 1, 1, 1, 1, 1,
  2766. 1, 1, 1, 1, 1, 1, 487, 1,
  2767. 1, 1, 1, 1, 1, 1, 488, 1,
  2768. 1, 1, 1, 1, 60, 1, 1, 1,
  2769. 1, 1, 1, 1, 1, 1, 1, 1,
  2770. 1, 1, 1, 1, 1, 1, 489, 1,
  2771. 490, 1, 1, 1, 491, 1, 1, 1,
  2772. 1, 1, 1, 1, 1, 1, 1, 1,
  2773. 1, 1, 1, 1, 1, 1, 1, 490,
  2774. 492, 493, 492, 492, 492, 492, 492, 494,
  2775. 1, 492, 492, 1, 492, 495, 492, 492,
  2776. 492, 492, 492, 492, 492, 492, 492, 492,
  2777. 492, 1, 1, 1, 492, 1, 492, 1,
  2778. 492, 492, 492, 492, 492, 492, 492, 492,
  2779. 492, 492, 492, 492, 492, 492, 492, 492,
  2780. 492, 492, 492, 492, 492, 492, 492, 492,
  2781. 492, 492, 1, 1, 1, 492, 492, 492,
  2782. 492, 492, 492, 492, 492, 492, 492, 492,
  2783. 492, 492, 492, 492, 492, 492, 492, 492,
  2784. 492, 492, 492, 492, 492, 492, 492, 492,
  2785. 492, 492, 492, 492, 492, 492, 1, 1,
  2786. 1, 1, 1, 1, 1, 1, 1, 1,
  2787. 1, 1, 1, 1, 1, 1, 1, 1,
  2788. 1, 1, 1, 1, 1, 1, 1, 1,
  2789. 1, 1, 1, 1, 1, 1, 1, 1,
  2790. 1, 1, 1, 1, 1, 1, 1, 1,
  2791. 1, 1, 1, 1, 1, 1, 1, 1,
  2792. 1, 1, 1, 1, 1, 1, 1, 1,
  2793. 1, 1, 1, 1, 1, 1, 1, 1,
  2794. 1, 496, 496, 496, 496, 496, 496, 496,
  2795. 496, 496, 496, 496, 496, 496, 496, 496,
  2796. 496, 496, 496, 496, 496, 496, 496, 496,
  2797. 496, 496, 496, 496, 496, 496, 496, 497,
  2798. 498, 498, 498, 498, 498, 498, 498, 498,
  2799. 498, 498, 498, 498, 499, 498, 498, 500,
  2800. 501, 501, 501, 502, 1, 356, 33, 356,
  2801. 356, 356, 356, 356, 1, 1, 356, 356,
  2802. 1, 356, 503, 356, 356, 356, 356, 356,
  2803. 356, 356, 356, 356, 356, 356, 1, 1,
  2804. 1, 356, 1, 356, 1, 356, 356, 356,
  2805. 356, 356, 356, 356, 356, 356, 356, 356,
  2806. 356, 356, 356, 356, 356, 356, 356, 356,
  2807. 356, 356, 356, 356, 356, 356, 356, 1,
  2808. 1, 1, 356, 356, 356, 356, 356, 356,
  2809. 356, 356, 356, 356, 356, 356, 356, 356,
  2810. 356, 356, 356, 356, 356, 356, 356, 356,
  2811. 356, 356, 356, 356, 356, 356, 356, 356,
  2812. 356, 356, 356, 1, 1, 1, 1, 1,
  2813. 1, 1, 1, 1, 1, 1, 1, 1,
  2814. 1, 1, 1, 1, 1, 1, 1, 1,
  2815. 1, 1, 1, 1, 1, 1, 1, 1,
  2816. 1, 1, 1, 1, 1, 1, 1, 1,
  2817. 1, 1, 1, 1, 1, 1, 1, 1,
  2818. 1, 1, 1, 1, 1, 1, 1, 1,
  2819. 1, 1, 1, 1, 1, 1, 1, 1,
  2820. 1, 1, 1, 1, 1, 1, 362, 362,
  2821. 362, 362, 362, 362, 362, 362, 362, 362,
  2822. 362, 362, 362, 362, 362, 362, 362, 362,
  2823. 362, 362, 362, 362, 362, 362, 362, 362,
  2824. 362, 362, 362, 362, 363, 364, 364, 364,
  2825. 364, 364, 364, 364, 364, 364, 364, 364,
  2826. 364, 365, 364, 364, 366, 367, 367, 367,
  2827. 368, 1, 504, 1, 505, 1, 506, 1,
  2828. 1, 1, 1, 1, 1, 1, 1, 1,
  2829. 1, 1, 1, 1, 1, 1, 1, 1,
  2830. 1, 1, 1, 1, 1, 1, 1, 1,
  2831. 1, 1, 1, 1, 1, 1, 1, 1,
  2832. 1, 1, 1, 1, 51, 1, 1, 1,
  2833. 1, 1, 1, 52, 1, 1, 1, 1,
  2834. 1, 53, 54, 1, 1, 55, 1, 51,
  2835. 1, 1, 1, 1, 1, 1, 52, 1,
  2836. 1, 1, 1, 1, 53, 54, 1, 1,
  2837. 55, 1, 507, 507, 507, 507, 507, 507,
  2838. 507, 507, 507, 1, 507, 507, 508, 507,
  2839. 507, 507, 507, 507, 507, 507, 507, 507,
  2840. 507, 507, 507, 507, 507, 507, 507, 507,
  2841. 507, 507, 507, 507, 507, 507, 507, 507,
  2842. 507, 509, 510, 507, 507, 507, 507, 507,
  2843. 507, 507, 507, 507, 507, 507, 507, 507,
  2844. 507, 507, 507, 507, 507, 507, 507, 507,
  2845. 507, 507, 507, 507, 507, 507, 507, 507,
  2846. 507, 507, 507, 507, 507, 507, 507, 507,
  2847. 507, 507, 507, 507, 507, 507, 507, 507,
  2848. 507, 507, 507, 507, 507, 511, 507, 507,
  2849. 507, 507, 507, 507, 507, 507, 507, 507,
  2850. 507, 507, 507, 507, 507, 507, 507, 507,
  2851. 507, 507, 507, 507, 507, 507, 507, 507,
  2852. 507, 507, 507, 507, 507, 507, 507, 507,
  2853. 507, 1, 1, 1, 1, 1, 1, 1,
  2854. 1, 1, 1, 1, 1, 1, 1, 1,
  2855. 1, 1, 1, 1, 1, 1, 1, 1,
  2856. 1, 1, 1, 1, 1, 1, 1, 1,
  2857. 1, 1, 1, 1, 1, 1, 1, 1,
  2858. 1, 1, 1, 1, 1, 1, 1, 1,
  2859. 1, 1, 1, 1, 1, 1, 1, 1,
  2860. 1, 1, 1, 1, 1, 1, 1, 1,
  2861. 1, 1, 1, 512, 512, 512, 512, 512,
  2862. 512, 512, 512, 512, 512, 512, 512, 512,
  2863. 512, 512, 512, 512, 512, 512, 512, 512,
  2864. 512, 512, 512, 512, 512, 512, 512, 512,
  2865. 512, 513, 514, 514, 514, 514, 514, 514,
  2866. 514, 514, 514, 514, 514, 514, 515, 514,
  2867. 514, 516, 517, 517, 517, 518, 1, 519,
  2868. 519, 519, 519, 519, 519, 519, 519, 519,
  2869. 1, 519, 519, 520, 519, 519, 519, 519,
  2870. 519, 519, 519, 519, 519, 519, 519, 519,
  2871. 519, 519, 519, 519, 519, 519, 519, 519,
  2872. 519, 519, 519, 519, 519, 519, 521, 522,
  2873. 519, 519, 519, 519, 519, 519, 519, 519,
  2874. 519, 519, 519, 519, 519, 519, 519, 519,
  2875. 519, 519, 519, 519, 519, 519, 519, 519,
  2876. 519, 519, 519, 519, 519, 519, 519, 519,
  2877. 519, 519, 519, 519, 519, 519, 519, 519,
  2878. 519, 519, 519, 519, 519, 519, 519, 519,
  2879. 519, 519, 523, 519, 519, 519, 519, 519,
  2880. 519, 519, 519, 519, 519, 519, 519, 519,
  2881. 519, 519, 519, 519, 519, 519, 519, 519,
  2882. 519, 519, 519, 519, 519, 519, 519, 519,
  2883. 519, 519, 519, 519, 519, 519, 1, 1,
  2884. 1, 1, 1, 1, 1, 1, 1, 1,
  2885. 1, 1, 1, 1, 1, 1, 1, 1,
  2886. 1, 1, 1, 1, 1, 1, 1, 1,
  2887. 1, 1, 1, 1, 1, 1, 1, 1,
  2888. 1, 1, 1, 1, 1, 1, 1, 1,
  2889. 1, 1, 1, 1, 1, 1, 1, 1,
  2890. 1, 1, 1, 1, 1, 1, 1, 1,
  2891. 1, 1, 1, 1, 1, 1, 1, 1,
  2892. 524, 524, 524, 524, 524, 524, 524, 524,
  2893. 524, 524, 524, 524, 524, 524, 524, 524,
  2894. 524, 524, 524, 524, 524, 524, 524, 524,
  2895. 524, 524, 524, 524, 524, 524, 525, 526,
  2896. 526, 526, 526, 526, 526, 526, 526, 526,
  2897. 526, 526, 526, 527, 526, 526, 528, 529,
  2898. 529, 529, 530, 1, 531, 1, 519, 1,
  2899. 1, 1, 1, 1, 1, 1, 1, 1,
  2900. 1, 1, 1, 1, 1, 1, 1, 1,
  2901. 1, 1, 1, 1, 1, 519, 1, 519,
  2902. 519, 519, 519, 519, 519, 519, 519, 519,
  2903. 519, 519, 519, 519, 519, 519, 519, 519,
  2904. 519, 519, 519, 519, 519, 519, 519, 519,
  2905. 519, 519, 519, 519, 519, 519, 519, 519,
  2906. 519, 519, 519, 519, 519, 519, 519, 519,
  2907. 519, 519, 519, 519, 519, 519, 519, 519,
  2908. 519, 519, 519, 519, 519, 519, 519, 519,
  2909. 519, 519, 519, 519, 519, 519, 519, 519,
  2910. 519, 519, 519, 519, 519, 519, 519, 519,
  2911. 519, 519, 519, 519, 519, 519, 519, 519,
  2912. 519, 519, 519, 519, 519, 519, 519, 519,
  2913. 519, 519, 519, 519, 519, 519, 519, 519,
  2914. 519, 519, 519, 519, 519, 519, 519, 519,
  2915. 519, 519, 519, 519, 519, 519, 519, 519,
  2916. 519, 519, 519, 519, 519, 519, 519, 519,
  2917. 519, 519, 519, 519, 519, 519, 519, 1,
  2918. 1, 1, 1, 1, 1, 1, 1, 1,
  2919. 1, 1, 1, 1, 1, 1, 1, 1,
  2920. 1, 1, 1, 1, 1, 1, 1, 1,
  2921. 1, 1, 1, 1, 1, 1, 1, 1,
  2922. 1, 1, 1, 1, 1, 1, 1, 1,
  2923. 1, 1, 1, 1, 1, 1, 1, 1,
  2924. 1, 1, 1, 1, 1, 1, 1, 1,
  2925. 1, 1, 1, 1, 1, 1, 1, 1,
  2926. 1, 524, 524, 524, 524, 524, 524, 524,
  2927. 524, 524, 524, 524, 524, 524, 524, 524,
  2928. 524, 524, 524, 524, 524, 524, 524, 524,
  2929. 524, 524, 524, 524, 524, 524, 524, 525,
  2930. 526, 526, 526, 526, 526, 526, 526, 526,
  2931. 526, 526, 526, 526, 527, 526, 526, 528,
  2932. 529, 529, 529, 530, 1, 519, 519, 519,
  2933. 519, 519, 519, 519, 519, 519, 519, 519,
  2934. 519, 519, 519, 519, 519, 519, 519, 519,
  2935. 519, 519, 519, 519, 519, 519, 519, 519,
  2936. 519, 519, 519, 519, 519, 519, 519, 519,
  2937. 519, 519, 519, 519, 519, 519, 519, 519,
  2938. 519, 519, 519, 519, 519, 519, 519, 519,
  2939. 519, 519, 519, 519, 519, 519, 519, 519,
  2940. 519, 519, 519, 519, 519, 1, 524, 524,
  2941. 524, 524, 524, 524, 524, 524, 524, 524,
  2942. 524, 524, 524, 524, 524, 524, 524, 524,
  2943. 524, 524, 524, 524, 524, 524, 524, 524,
  2944. 524, 524, 524, 524, 524, 524, 1, 524,
  2945. 524, 524, 524, 524, 524, 524, 524, 524,
  2946. 524, 524, 524, 524, 524, 524, 524, 524,
  2947. 524, 524, 524, 524, 524, 524, 524, 524,
  2948. 524, 524, 524, 524, 524, 524, 524, 524,
  2949. 524, 524, 524, 524, 524, 524, 524, 524,
  2950. 524, 524, 524, 524, 524, 524, 524, 524,
  2951. 524, 524, 524, 524, 524, 524, 524, 524,
  2952. 524, 524, 524, 524, 524, 524, 524, 1,
  2953. 524, 524, 524, 524, 524, 524, 524, 524,
  2954. 524, 524, 524, 524, 524, 524, 524, 524,
  2955. 524, 524, 524, 524, 524, 524, 524, 524,
  2956. 524, 524, 524, 524, 524, 524, 524, 524,
  2957. 1, 526, 526, 526, 526, 526, 526, 526,
  2958. 526, 526, 526, 526, 526, 526, 526, 526,
  2959. 526, 526, 526, 526, 526, 526, 526, 526,
  2960. 526, 526, 526, 526, 526, 526, 526, 526,
  2961. 526, 526, 526, 526, 526, 526, 526, 526,
  2962. 526, 526, 526, 526, 526, 526, 526, 526,
  2963. 526, 1, 526, 526, 526, 526, 526, 526,
  2964. 526, 526, 526, 526, 526, 526, 526, 526,
  2965. 526, 526, 526, 526, 526, 526, 526, 526,
  2966. 526, 526, 526, 526, 526, 526, 526, 526,
  2967. 526, 526, 526, 526, 526, 526, 526, 526,
  2968. 526, 526, 526, 526, 526, 526, 526, 526,
  2969. 526, 526, 526, 526, 526, 526, 526, 526,
  2970. 526, 526, 526, 526, 526, 526, 526, 526,
  2971. 526, 526, 1, 526, 526, 526, 526, 526,
  2972. 526, 526, 526, 526, 526, 526, 526, 526,
  2973. 526, 526, 526, 1, 216, 1, 1, 1,
  2974. 532, 1, 1, 1, 1, 1, 1, 1,
  2975. 1, 1, 1, 1, 1, 1, 1, 1,
  2976. 1, 1, 1, 216, 1, 1, 1, 1,
  2977. 1, 1, 1, 533, 1, 1, 1, 1,
  2978. 1, 1, 1, 214, 214, 214, 214, 214,
  2979. 214, 214, 214, 214, 214, 1, 216, 1,
  2980. 1, 1, 532, 1, 1, 1, 1, 1,
  2981. 1, 1, 1, 1, 1, 1, 1, 1,
  2982. 1, 1, 1, 1, 1, 216, 1, 1,
  2983. 1, 1, 1, 1, 1, 533, 1, 534,
  2984. 1, 1, 1, 535, 1, 1, 1, 1,
  2985. 1, 1, 1, 1, 1, 1, 1, 1,
  2986. 1, 1, 1, 1, 1, 1, 534, 1,
  2987. 1, 1, 1, 1, 1, 1, 536, 1,
  2988. 1, 0,
  2989. ]
  2990. 1 class << self
  2991. 1 attr_accessor :_trans_targs
  2992. 1 private :_trans_targs, :_trans_targs=
  2993. end
  2994. 1 self._trans_targs = [
  2995. 2, 0, 3, 5, 261, 287, 288, 289,
  2996. 254, 255, 256, 257, 258, 259, 260, 2,
  2997. 3, 5, 261, 287, 288, 254, 255, 256,
  2998. 257, 258, 259, 260, 4, 6, 7, 9,
  2999. 5, 189, 10, 216, 20, 254, 255, 256,
  3000. 257, 258, 259, 260, 6, 7, 9, 10,
  3001. 11, 20, 8, 42, 112, 114, 116, 119,
  3002. 6, 7, 9, 10, 11, 20, 12, 14,
  3003. 176, 188, 169, 170, 171, 172, 173, 174,
  3004. 175, 13, 15, 16, 18, 19, 20, 17,
  3005. 15, 16, 18, 19, 20, 21, 22, 24,
  3006. 121, 157, 131, 158, 150, 151, 152, 153,
  3007. 154, 155, 156, 21, 22, 24, 121, 157,
  3008. 131, 158, 150, 151, 152, 153, 154, 155,
  3009. 156, 23, 25, 26, 28, 29, 149, 30,
  3010. 27, 25, 26, 28, 29, 30, 31, 33,
  3011. 41, 34, 35, 36, 37, 38, 39, 40,
  3012. 32, 31, 33, 41, 34, 35, 36, 37,
  3013. 38, 39, 40, 43, 44, 45, 46, 97,
  3014. 99, 101, 104, 106, 108, 110, 47, 96,
  3015. 48, 49, 50, 52, 53, 51, 49, 50,
  3016. 52, 53, 54, 55, 57, 95, 56, 58,
  3017. 60, 61, 59, 57, 58, 60, 61, 62,
  3018. 63, 65, 66, 64, 62, 63, 65, 66,
  3019. 67, 69, 70, 68, 67, 69, 70, 71,
  3020. 72, 74, 94, 81, 73, 75, 77, 78,
  3021. 76, 74, 75, 77, 78, 81, 305, 80,
  3022. 306, 82, 84, 85, 83, 82, 84, 85,
  3023. 86, 87, 89, 93, 88, 90, 92, 91,
  3024. 89, 90, 92, 86, 87, 93, 71, 72,
  3025. 94, 54, 55, 95, 98, 100, 102, 103,
  3026. 105, 107, 109, 111, 113, 115, 117, 118,
  3027. 120, 122, 147, 139, 140, 141, 142, 143,
  3028. 144, 145, 146, 123, 125, 124, 126, 127,
  3029. 129, 130, 132, 133, 134, 135, 136, 137,
  3030. 138, 128, 126, 127, 129, 130, 148, 21,
  3031. 22, 24, 121, 157, 131, 158, 150, 151,
  3032. 152, 153, 154, 155, 156, 159, 161, 162,
  3033. 163, 164, 165, 166, 167, 168, 160, 177,
  3034. 178, 15, 180, 181, 182, 183, 184, 185,
  3035. 186, 187, 177, 178, 15, 180, 181, 182,
  3036. 183, 184, 185, 186, 187, 179, 12, 14,
  3037. 176, 188, 169, 170, 171, 172, 173, 174,
  3038. 175, 190, 214, 206, 207, 208, 209, 210,
  3039. 211, 212, 213, 191, 193, 192, 194, 195,
  3040. 197, 198, 199, 200, 201, 202, 203, 204,
  3041. 205, 194, 195, 197, 198, 196, 194, 195,
  3042. 197, 198, 215, 217, 218, 220, 238, 221,
  3043. 217, 218, 220, 221, 219, 222, 229, 231,
  3044. 233, 236, 217, 218, 220, 221, 223, 224,
  3045. 225, 226, 227, 228, 230, 232, 234, 235,
  3046. 237, 239, 251, 252, 243, 244, 245, 246,
  3047. 247, 248, 249, 250, 239, 240, 242, 243,
  3048. 244, 245, 246, 247, 248, 249, 250, 241,
  3049. 251, 252, 253, 262, 279, 280, 282, 271,
  3050. 272, 273, 274, 275, 276, 277, 278, 262,
  3051. 263, 265, 271, 272, 273, 274, 275, 276,
  3052. 277, 278, 264, 266, 267, 269, 270, 20,
  3053. 266, 267, 269, 270, 20, 268, 266, 267,
  3054. 269, 270, 20, 279, 280, 282, 281, 282,
  3055. 283, 285, 286, 20, 284, 282, 283, 285,
  3056. 286, 20, 2, 3, 5, 261, 287, 288,
  3057. 254, 255, 256, 257, 258, 259, 260, 288,
  3058. 290, 291, 292, 294, 295, 294, 308, 297,
  3059. 298, 299, 300, 301, 302, 303, 304, 294,
  3060. 295, 294, 308, 297, 298, 299, 300, 301,
  3061. 302, 303, 304, 296, 79, 307, 306, 79,
  3062. 307,
  3063. ]
  3064. 1 class << self
  3065. 1 attr_accessor :_trans_actions
  3066. 1 private :_trans_actions, :_trans_actions=
  3067. end
  3068. 1 self._trans_actions = [
  3069. 1, 0, 1, 1, 1, 2, 1, 3,
  3070. 1, 1, 1, 1, 1, 1, 1, 0,
  3071. 0, 4, 4, 5, 4, 4, 4, 4,
  3072. 4, 4, 4, 4, 0, 6, 6, 7,
  3073. 0, 0, 8, 0, 9, 0, 0, 0,
  3074. 0, 0, 0, 0, 0, 0, 10, 5,
  3075. 0, 11, 0, 12, 12, 12, 12, 12,
  3076. 13, 13, 14, 15, 13, 16, 0, 0,
  3077. 0, 5, 0, 0, 0, 0, 0, 0,
  3078. 0, 0, 0, 0, 17, 5, 0, 0,
  3079. 13, 13, 18, 15, 13, 19, 19, 19,
  3080. 19, 20, 19, 19, 19, 19, 19, 19,
  3081. 19, 19, 19, 0, 0, 0, 0, 5,
  3082. 0, 0, 0, 0, 0, 0, 0, 0,
  3083. 0, 0, 0, 0, 21, 5, 0, 0,
  3084. 0, 13, 13, 22, 15, 13, 0, 0,
  3085. 5, 0, 0, 0, 0, 0, 0, 0,
  3086. 0, 13, 13, 15, 13, 13, 13, 13,
  3087. 13, 13, 13, 0, 0, 0, 0, 0,
  3088. 0, 0, 0, 0, 0, 0, 0, 0,
  3089. 0, 0, 0, 5, 0, 0, 13, 13,
  3090. 15, 13, 0, 0, 0, 5, 0, 0,
  3091. 5, 0, 0, 13, 13, 15, 13, 0,
  3092. 0, 5, 0, 0, 13, 13, 15, 13,
  3093. 0, 5, 0, 0, 13, 15, 13, 0,
  3094. 0, 0, 5, 0, 0, 0, 5, 0,
  3095. 0, 13, 13, 15, 13, 13, 0, 0,
  3096. 0, 0, 5, 0, 0, 13, 15, 13,
  3097. 0, 0, 0, 5, 0, 0, 5, 0,
  3098. 13, 13, 15, 13, 13, 15, 13, 13,
  3099. 15, 13, 13, 15, 0, 0, 0, 0,
  3100. 0, 0, 0, 0, 0, 0, 0, 0,
  3101. 0, 0, 0, 0, 0, 0, 0, 0,
  3102. 0, 0, 0, 0, 0, 0, 0, 0,
  3103. 21, 5, 0, 0, 0, 0, 0, 0,
  3104. 0, 0, 13, 13, 22, 15, 0, 13,
  3105. 13, 13, 13, 15, 13, 13, 13, 13,
  3106. 13, 13, 13, 13, 13, 0, 0, 0,
  3107. 0, 0, 0, 0, 0, 0, 0, 23,
  3108. 23, 24, 23, 23, 23, 23, 23, 23,
  3109. 23, 23, 0, 0, 25, 0, 0, 0,
  3110. 0, 0, 0, 0, 0, 0, 13, 13,
  3111. 13, 15, 13, 13, 13, 13, 13, 13,
  3112. 13, 0, 0, 0, 0, 0, 0, 0,
  3113. 0, 0, 0, 0, 0, 0, 6, 6,
  3114. 7, 8, 0, 0, 0, 0, 0, 0,
  3115. 0, 0, 0, 10, 5, 0, 13, 13,
  3116. 14, 15, 0, 6, 6, 7, 0, 8,
  3117. 0, 0, 10, 5, 0, 12, 12, 12,
  3118. 12, 12, 13, 13, 14, 15, 0, 0,
  3119. 17, 12, 12, 12, 0, 0, 0, 0,
  3120. 0, 23, 23, 23, 23, 23, 23, 23,
  3121. 23, 23, 23, 23, 0, 0, 25, 0,
  3122. 0, 0, 0, 0, 0, 0, 0, 0,
  3123. 0, 0, 0, 23, 23, 23, 24, 23,
  3124. 23, 23, 23, 23, 23, 23, 23, 0,
  3125. 0, 25, 0, 0, 0, 0, 0, 0,
  3126. 0, 0, 0, 6, 6, 26, 8, 27,
  3127. 0, 0, 28, 5, 29, 0, 13, 13,
  3128. 30, 15, 31, 0, 0, 25, 0, 0,
  3129. 0, 32, 5, 33, 0, 13, 13, 34,
  3130. 15, 35, 13, 13, 36, 36, 15, 36,
  3131. 36, 36, 36, 36, 36, 36, 36, 0,
  3132. 0, 17, 17, 37, 37, 38, 39, 37,
  3133. 37, 37, 37, 37, 37, 37, 37, 0,
  3134. 0, 5, 40, 0, 0, 0, 0, 0,
  3135. 0, 0, 0, 0, 0, 5, 13, 13,
  3136. 15,
  3137. ]
  3138. 1 class << self
  3139. 1 attr_accessor :_eof_actions
  3140. 1 private :_eof_actions, :_eof_actions=
  3141. end
  3142. 1 self._eof_actions = [
  3143. 0, 0, 0, 0, 0, 0, 0, 0,
  3144. 0, 0, 0, 0, 0, 0, 0, 0,
  3145. 0, 0, 0, 0, 0, 0, 0, 0,
  3146. 0, 0, 0, 0, 0, 0, 0, 0,
  3147. 0, 0, 0, 0, 0, 0, 0, 0,
  3148. 0, 0, 0, 0, 0, 0, 0, 0,
  3149. 0, 0, 0, 0, 0, 0, 0, 0,
  3150. 0, 0, 0, 0, 0, 0, 0, 0,
  3151. 0, 0, 0, 0, 0, 0, 0, 0,
  3152. 0, 0, 0, 0, 0, 0, 0, 0,
  3153. 0, 0, 0, 0, 0, 0, 0, 0,
  3154. 0, 0, 0, 0, 0, 0, 0, 0,
  3155. 0, 0, 0, 0, 0, 0, 0, 0,
  3156. 0, 0, 0, 0, 0, 0, 0, 0,
  3157. 0, 0, 0, 0, 0, 0, 0, 0,
  3158. 0, 0, 0, 0, 0, 0, 0, 0,
  3159. 0, 0, 0, 0, 0, 0, 0, 0,
  3160. 0, 0, 0, 0, 0, 0, 0, 0,
  3161. 0, 0, 0, 0, 0, 0, 0, 0,
  3162. 0, 0, 0, 0, 0, 0, 0, 0,
  3163. 0, 0, 0, 0, 0, 0, 0, 0,
  3164. 0, 0, 0, 0, 0, 0, 0, 0,
  3165. 0, 0, 0, 0, 0, 0, 0, 0,
  3166. 0, 0, 0, 0, 0, 0, 0, 0,
  3167. 0, 0, 0, 0, 0, 0, 0, 0,
  3168. 0, 0, 0, 0, 0, 0, 0, 0,
  3169. 0, 0, 0, 0, 0, 0, 0, 0,
  3170. 0, 0, 0, 0, 0, 0, 0, 0,
  3171. 0, 0, 0, 0, 0, 0, 0, 0,
  3172. 0, 0, 0, 0, 0, 0, 0, 0,
  3173. 0, 0, 0, 0, 0, 0, 0, 0,
  3174. 0, 0, 0, 0, 0, 0, 0, 0,
  3175. 0, 0, 0, 0, 0, 0, 0, 0,
  3176. 0, 0, 0, 0, 0, 0, 0, 0,
  3177. 0, 0, 0, 0, 0, 0, 0, 0,
  3178. 0, 0, 0, 0, 0, 0, 0, 0,
  3179. 0, 0, 0, 0, 0, 0, 0, 0,
  3180. 0, 0, 0, 0, 0, 0, 0, 0,
  3181. 0, 41, 41, 42, 0,
  3182. ]
  3183. 1 class << self
  3184. 1 attr_accessor :start
  3185. end
  3186. 1 self.start = 1
  3187. 1 class << self
  3188. 1 attr_accessor :first_final
  3189. end
  3190. 1 self.first_final = 305
  3191. 1 class << self
  3192. 1 attr_accessor :error
  3193. end
  3194. 1 self.error = 0
  3195. 1 class << self
  3196. 1 attr_accessor :en_comment_tail
  3197. end
  3198. 1 self.en_comment_tail = 293
  3199. 1 class << self
  3200. 1 attr_accessor :en_main
  3201. end
  3202. 1 self.en_main = 1
  3203. 1 def self.parse(data)
  3204. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  3205. envelope_from = EnvelopeFromStruct.new
  3206. return envelope_from if Mail::Utilities.blank?(data)
  3207. # Parser state
  3208. address_s = ctime_date_s = nil
  3209. # 5.1 Variables Used by Ragel
  3210. p = 0
  3211. eof = pe = data.length
  3212. stack = []
  3213. begin
  3214. p ||= 0
  3215. pe ||= data.length
  3216. cs = start
  3217. top = 0
  3218. end
  3219. begin
  3220. testEof = false
  3221. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  3222. _goto_level = 0
  3223. _resume = 10
  3224. _eof_trans = 15
  3225. _again = 20
  3226. _test_eof = 30
  3227. _out = 40
  3228. while true
  3229. if _goto_level <= 0
  3230. if p == pe
  3231. _goto_level = _test_eof
  3232. next
  3233. end
  3234. if cs == 0
  3235. _goto_level = _out
  3236. next
  3237. end
  3238. end
  3239. if _goto_level <= _resume
  3240. _keys = cs << 1
  3241. _inds = _index_offsets[cs]
  3242. _slen = _key_spans[cs]
  3243. _wide = data[p].ord
  3244. _trans = if (_slen > 0 &&
  3245. _trans_keys[_keys] <= _wide &&
  3246. _wide <= _trans_keys[_keys + 1])
  3247. _indicies[_inds + _wide - _trans_keys[_keys]]
  3248. else
  3249. _indicies[_inds + _slen]
  3250. end
  3251. cs = _trans_targs[_trans]
  3252. if _trans_actions[_trans] != 0
  3253. case _trans_actions[_trans]
  3254. when 3
  3255. begin
  3256. address_s = p
  3257. end
  3258. when 17
  3259. begin
  3260. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3261. end
  3262. when 12
  3263. begin
  3264. ctime_date_s = p
  3265. end
  3266. when 13
  3267. begin
  3268. end
  3269. when 37
  3270. begin
  3271. end
  3272. when 19
  3273. begin
  3274. end
  3275. when 11
  3276. begin
  3277. end
  3278. when 6
  3279. begin
  3280. end
  3281. when 4
  3282. begin
  3283. end
  3284. when 25
  3285. begin
  3286. end
  3287. when 23
  3288. begin
  3289. end
  3290. when 33
  3291. begin
  3292. end
  3293. when 5
  3294. begin
  3295. begin
  3296. stack[top] = cs
  3297. top += 1
  3298. cs = 293
  3299. _goto_level = _again
  3300. next
  3301. end
  3302. end
  3303. when 40
  3304. begin
  3305. begin
  3306. top -= 1
  3307. cs = stack[top]
  3308. _goto_level = _again
  3309. next
  3310. end
  3311. end
  3312. when 1
  3313. begin
  3314. address_s = p
  3315. end
  3316. begin
  3317. end
  3318. when 18
  3319. begin
  3320. end
  3321. begin
  3322. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3323. end
  3324. when 16
  3325. begin
  3326. end
  3327. begin
  3328. end
  3329. when 36
  3330. begin
  3331. end
  3332. begin
  3333. end
  3334. when 35
  3335. begin
  3336. end
  3337. begin
  3338. end
  3339. when 15
  3340. begin
  3341. end
  3342. begin
  3343. begin
  3344. stack[top] = cs
  3345. top += 1
  3346. cs = 293
  3347. _goto_level = _again
  3348. next
  3349. end
  3350. end
  3351. when 38
  3352. begin
  3353. end
  3354. begin
  3355. begin
  3356. stack[top] = cs
  3357. top += 1
  3358. cs = 293
  3359. _goto_level = _again
  3360. next
  3361. end
  3362. end
  3363. when 39
  3364. begin
  3365. end
  3366. begin
  3367. begin
  3368. top -= 1
  3369. cs = stack[top]
  3370. _goto_level = _again
  3371. next
  3372. end
  3373. end
  3374. when 21
  3375. begin
  3376. end
  3377. begin
  3378. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3379. end
  3380. when 20
  3381. begin
  3382. end
  3383. begin
  3384. begin
  3385. stack[top] = cs
  3386. top += 1
  3387. cs = 293
  3388. _goto_level = _again
  3389. next
  3390. end
  3391. end
  3392. when 10
  3393. begin
  3394. end
  3395. begin
  3396. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3397. end
  3398. when 29
  3399. begin
  3400. end
  3401. begin
  3402. end
  3403. when 9
  3404. begin
  3405. end
  3406. begin
  3407. end
  3408. when 8
  3409. begin
  3410. end
  3411. begin
  3412. begin
  3413. stack[top] = cs
  3414. top += 1
  3415. cs = 293
  3416. _goto_level = _again
  3417. next
  3418. end
  3419. end
  3420. when 24
  3421. begin
  3422. end
  3423. begin
  3424. end
  3425. when 32
  3426. begin
  3427. end
  3428. begin
  3429. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3430. end
  3431. when 2
  3432. begin
  3433. address_s = p
  3434. end
  3435. begin
  3436. end
  3437. begin
  3438. begin
  3439. stack[top] = cs
  3440. top += 1
  3441. cs = 293
  3442. _goto_level = _again
  3443. next
  3444. end
  3445. end
  3446. when 22
  3447. begin
  3448. end
  3449. begin
  3450. end
  3451. begin
  3452. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3453. end
  3454. when 14
  3455. begin
  3456. end
  3457. begin
  3458. end
  3459. begin
  3460. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3461. end
  3462. when 31
  3463. begin
  3464. end
  3465. begin
  3466. end
  3467. begin
  3468. end
  3469. when 34
  3470. begin
  3471. end
  3472. begin
  3473. end
  3474. begin
  3475. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3476. end
  3477. when 28
  3478. begin
  3479. end
  3480. begin
  3481. end
  3482. begin
  3483. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3484. end
  3485. when 7
  3486. begin
  3487. end
  3488. begin
  3489. end
  3490. begin
  3491. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3492. end
  3493. when 27
  3494. begin
  3495. end
  3496. begin
  3497. end
  3498. begin
  3499. end
  3500. when 30
  3501. begin
  3502. end
  3503. begin
  3504. end
  3505. begin
  3506. end
  3507. begin
  3508. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3509. end
  3510. when 26
  3511. begin
  3512. end
  3513. begin
  3514. end
  3515. begin
  3516. end
  3517. begin
  3518. envelope_from.address = chars(data, address_s, p - 1).rstrip
  3519. end
  3520. end
  3521. end
  3522. end
  3523. if _goto_level <= _again
  3524. if cs == 0
  3525. _goto_level = _out
  3526. next
  3527. end
  3528. p += 1
  3529. if p != pe
  3530. _goto_level = _resume
  3531. next
  3532. end
  3533. end
  3534. if _goto_level <= _test_eof
  3535. if p == eof
  3536. case _eof_actions[cs]
  3537. when 41
  3538. begin
  3539. envelope_from.ctime_date = chars(data, ctime_date_s, p - 1)
  3540. end
  3541. when 42
  3542. begin
  3543. end
  3544. begin
  3545. envelope_from.ctime_date = chars(data, ctime_date_s, p - 1)
  3546. end
  3547. end
  3548. end
  3549. end
  3550. if _goto_level <= _out
  3551. break
  3552. end
  3553. end
  3554. end
  3555. if p != eof || cs < 305
  3556. raise Mail::Field::IncompleteParseError.new(Mail::EnvelopeFromElement, data, p)
  3557. end
  3558. envelope_from
  3559. end
  3560. end
  3561. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/message_ids_parser.rb

22.83% lines covered

219 relevant lines. 50 lines covered and 169 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module MessageIdsParser
  6. 1 extend Mail::ParserTools
  7. 1 MessageIdsStruct = Struct.new(:message_ids, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 60, 10, 10,
  14. 9, 32, 9, 60, 9,
  15. 244, 9, 244, 10, 10,
  16. 9, 32, 9, 244, 9, 64,
  17. 10, 10, 9, 32, 9,
  18. 64, 9, 244, 10, 10,
  19. 9, 32, 9, 244, 9, 64,
  20. 10, 10, 9, 32, 9,
  21. 64, 9, 244, 9, 244,
  22. 10, 10, 9, 32, 9, 244,
  23. 9, 62, 10, 10, 9,
  24. 32, 9, 62, 9, 244,
  25. 10, 10, 9, 32, 9, 244,
  26. 10, 10, 9, 32, 128,
  27. 191, 160, 191, 128, 191,
  28. 128, 159, 144, 191, 128, 191,
  29. 128, 143, 9, 244, 1,
  30. 244, 1, 244, 10, 10,
  31. 9, 32, 9, 244, 9, 62,
  32. 10, 10, 9, 32, 9,
  33. 62, 33, 244, 128, 191,
  34. 160, 191, 128, 191, 128, 159,
  35. 144, 191, 128, 191, 128,
  36. 143, 0, 244, 128, 191,
  37. 160, 191, 128, 191, 128, 159,
  38. 144, 191, 128, 191, 128,
  39. 143, 10, 10, 9, 32,
  40. 9, 244, 128, 191, 160, 191,
  41. 128, 191, 128, 159, 144,
  42. 191, 128, 191, 128, 143,
  43. 9, 244, 1, 244, 10, 10,
  44. 9, 32, 0, 244, 128,
  45. 191, 160, 191, 128, 191,
  46. 128, 159, 144, 191, 128, 191,
  47. 128, 143, 9, 244, 9,
  48. 244, 33, 126, 33, 126,
  49. 128, 191, 160, 191, 128, 191,
  50. 128, 159, 144, 191, 128,
  51. 191, 128, 143, 1, 244,
  52. 1, 244, 10, 10, 9, 32,
  53. 0, 244, 128, 191, 160,
  54. 191, 128, 191, 128, 159,
  55. 144, 191, 128, 191, 128, 143,
  56. 9, 244, 1, 244, 1,
  57. 244, 10, 10, 9, 32,
  58. 9, 244, 9, 64, 10, 10,
  59. 9, 32, 9, 64, 128,
  60. 191, 160, 191, 128, 191,
  61. 128, 159, 144, 191, 128, 191,
  62. 128, 143, 0, 244, 128,
  63. 191, 160, 191, 128, 191,
  64. 128, 159, 144, 191, 128, 191,
  65. 128, 143, 10, 10, 9,
  66. 32, 9, 244, 9, 244,
  67. 10, 10, 9, 32, 9, 244,
  68. 1, 244, 1, 244, 10,
  69. 10, 9, 32, 9, 244,
  70. 0, 244, 128, 191, 160, 191,
  71. 128, 191, 128, 159, 144,
  72. 191, 128, 191, 128, 143,
  73. 1, 244, 10, 10, 9, 32,
  74. 128, 191, 160, 191, 128,
  75. 191, 128, 159, 144, 191,
  76. 128, 191, 128, 143, 1, 244,
  77. 1, 244, 10, 10, 9,
  78. 32, 9, 244, 9, 64,
  79. 10, 10, 9, 32, 9, 64,
  80. 0, 244, 128, 191, 160,
  81. 191, 128, 191, 128, 159,
  82. 144, 191, 128, 191, 128, 143,
  83. 1, 244, 10, 10, 9,
  84. 32, 9, 64, 10, 10,
  85. 9, 32, 9, 64, 9, 244,
  86. 33, 244, 1, 244, 1,
  87. 244, 10, 10, 9, 32,
  88. 0, 244, 128, 191, 160, 191,
  89. 128, 191, 128, 159, 144,
  90. 191, 128, 191, 128, 143,
  91. 9, 60, 9, 60, 9, 60,
  92. 0, 0, 0,
  93. ]
  94. 1 class << self
  95. 1 attr_accessor :_key_spans
  96. 1 private :_key_spans, :_key_spans=
  97. end
  98. 1 self._key_spans = [
  99. 0, 52, 1, 24, 52, 236, 236, 1,
  100. 24, 236, 56, 1, 24, 56, 236, 1,
  101. 24, 236, 56, 1, 24, 56, 236, 236,
  102. 1, 24, 236, 54, 1, 24, 54, 236,
  103. 1, 24, 236, 1, 24, 64, 32, 64,
  104. 32, 48, 64, 16, 236, 244, 244, 1,
  105. 24, 236, 54, 1, 24, 54, 212, 64,
  106. 32, 64, 32, 48, 64, 16, 245, 64,
  107. 32, 64, 32, 48, 64, 16, 1, 24,
  108. 236, 64, 32, 64, 32, 48, 64, 16,
  109. 236, 244, 1, 24, 245, 64, 32, 64,
  110. 32, 48, 64, 16, 236, 236, 94, 94,
  111. 64, 32, 64, 32, 48, 64, 16, 244,
  112. 244, 1, 24, 245, 64, 32, 64, 32,
  113. 48, 64, 16, 236, 244, 244, 1, 24,
  114. 236, 56, 1, 24, 56, 64, 32, 64,
  115. 32, 48, 64, 16, 245, 64, 32, 64,
  116. 32, 48, 64, 16, 1, 24, 236, 236,
  117. 1, 24, 236, 244, 244, 1, 24, 236,
  118. 245, 64, 32, 64, 32, 48, 64, 16,
  119. 244, 1, 24, 64, 32, 64, 32, 48,
  120. 64, 16, 244, 244, 1, 24, 236, 56,
  121. 1, 24, 56, 245, 64, 32, 64, 32,
  122. 48, 64, 16, 244, 1, 24, 56, 1,
  123. 24, 56, 236, 212, 244, 244, 1, 24,
  124. 245, 64, 32, 64, 32, 48, 64, 16,
  125. 52, 52, 52, 0,
  126. ]
  127. 1 class << self
  128. 1 attr_accessor :_index_offsets
  129. 1 private :_index_offsets, :_index_offsets=
  130. end
  131. 1 self._index_offsets = [
  132. 0, 0, 53, 55, 80, 133, 370, 607,
  133. 609, 634, 871, 928, 930, 955, 1012, 1249,
  134. 1251, 1276, 1513, 1570, 1572, 1597, 1654, 1891,
  135. 2128, 2130, 2155, 2392, 2447, 2449, 2474, 2529,
  136. 2766, 2768, 2793, 3030, 3032, 3057, 3122, 3155,
  137. 3220, 3253, 3302, 3367, 3384, 3621, 3866, 4111,
  138. 4113, 4138, 4375, 4430, 4432, 4457, 4512, 4725,
  139. 4790, 4823, 4888, 4921, 4970, 5035, 5052, 5298,
  140. 5363, 5396, 5461, 5494, 5543, 5608, 5625, 5627,
  141. 5652, 5889, 5954, 5987, 6052, 6085, 6134, 6199,
  142. 6216, 6453, 6698, 6700, 6725, 6971, 7036, 7069,
  143. 7134, 7167, 7216, 7281, 7298, 7535, 7772, 7867,
  144. 7962, 8027, 8060, 8125, 8158, 8207, 8272, 8289,
  145. 8534, 8779, 8781, 8806, 9052, 9117, 9150, 9215,
  146. 9248, 9297, 9362, 9379, 9616, 9861, 10106, 10108,
  147. 10133, 10370, 10427, 10429, 10454, 10511, 10576, 10609,
  148. 10674, 10707, 10756, 10821, 10838, 11084, 11149, 11182,
  149. 11247, 11280, 11329, 11394, 11411, 11413, 11438, 11675,
  150. 11912, 11914, 11939, 12176, 12421, 12666, 12668, 12693,
  151. 12930, 13176, 13241, 13274, 13339, 13372, 13421, 13486,
  152. 13503, 13748, 13750, 13775, 13840, 13873, 13938, 13971,
  153. 14020, 14085, 14102, 14347, 14592, 14594, 14619, 14856,
  154. 14913, 14915, 14940, 14997, 15243, 15308, 15341, 15406,
  155. 15439, 15488, 15553, 15570, 15815, 15817, 15842, 15899,
  156. 15901, 15926, 15983, 16220, 16433, 16678, 16923, 16925,
  157. 16950, 17196, 17261, 17294, 17359, 17392, 17441, 17506,
  158. 17523, 17576, 17629, 17682,
  159. ]
  160. 1 class << self
  161. 1 attr_accessor :_indicies
  162. 1 private :_indicies, :_indicies=
  163. end
  164. 1 self._indicies = [
  165. 0, 1, 1, 1, 2, 1, 1, 1,
  166. 1, 1, 1, 1, 1, 1, 1, 1,
  167. 1, 1, 1, 1, 1, 1, 1, 0,
  168. 1, 1, 1, 1, 1, 1, 1, 3,
  169. 1, 1, 1, 1, 1, 1, 1, 1,
  170. 1, 1, 1, 1, 1, 1, 1, 1,
  171. 1, 1, 1, 4, 1, 5, 1, 0,
  172. 1, 1, 1, 1, 1, 1, 1, 1,
  173. 1, 1, 1, 1, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 0, 1,
  175. 6, 1, 1, 1, 7, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 1, 1,
  177. 1, 1, 1, 1, 1, 1, 1, 6,
  178. 1, 1, 1, 1, 1, 1, 1, 8,
  179. 1, 1, 1, 1, 1, 1, 1, 1,
  180. 1, 1, 1, 1, 1, 1, 1, 1,
  181. 1, 1, 1, 9, 1, 10, 1, 1,
  182. 1, 11, 1, 1, 1, 1, 1, 1,
  183. 1, 1, 1, 1, 1, 1, 1, 1,
  184. 1, 1, 1, 1, 10, 12, 13, 12,
  185. 12, 12, 12, 12, 14, 1, 12, 12,
  186. 1, 12, 15, 12, 12, 12, 12, 12,
  187. 12, 12, 12, 12, 12, 12, 1, 1,
  188. 1, 12, 1, 12, 1, 12, 12, 12,
  189. 12, 12, 12, 12, 12, 12, 12, 12,
  190. 12, 12, 12, 12, 12, 12, 12, 12,
  191. 12, 12, 12, 12, 12, 12, 12, 1,
  192. 1, 1, 12, 12, 12, 12, 12, 12,
  193. 12, 12, 12, 12, 12, 12, 12, 12,
  194. 12, 12, 12, 12, 12, 12, 12, 12,
  195. 12, 12, 12, 12, 12, 12, 12, 12,
  196. 12, 12, 12, 1, 1, 1, 1, 1,
  197. 1, 1, 1, 1, 1, 1, 1, 1,
  198. 1, 1, 1, 1, 1, 1, 1, 1,
  199. 1, 1, 1, 1, 1, 1, 1, 1,
  200. 1, 1, 1, 1, 1, 1, 1, 1,
  201. 1, 1, 1, 1, 1, 1, 1, 1,
  202. 1, 1, 1, 1, 1, 1, 1, 1,
  203. 1, 1, 1, 1, 1, 1, 1, 1,
  204. 1, 1, 1, 1, 1, 1, 16, 16,
  205. 16, 16, 16, 16, 16, 16, 16, 16,
  206. 16, 16, 16, 16, 16, 16, 16, 16,
  207. 16, 16, 16, 16, 16, 16, 16, 16,
  208. 16, 16, 16, 16, 17, 18, 18, 18,
  209. 18, 18, 18, 18, 18, 18, 18, 18,
  210. 18, 19, 18, 18, 20, 21, 21, 21,
  211. 22, 1, 23, 1, 1, 1, 24, 1,
  212. 1, 1, 1, 1, 1, 1, 1, 1,
  213. 1, 1, 1, 1, 1, 1, 1, 1,
  214. 1, 23, 12, 13, 12, 12, 12, 12,
  215. 12, 25, 1, 12, 12, 1, 12, 15,
  216. 12, 12, 12, 12, 12, 12, 12, 12,
  217. 12, 12, 12, 1, 1, 1, 12, 1,
  218. 12, 1, 12, 12, 12, 12, 12, 12,
  219. 12, 12, 12, 12, 12, 12, 12, 12,
  220. 12, 12, 12, 12, 12, 12, 12, 12,
  221. 12, 12, 12, 12, 1, 1, 1, 12,
  222. 12, 12, 12, 12, 12, 12, 12, 12,
  223. 12, 12, 12, 12, 12, 12, 12, 12,
  224. 12, 12, 12, 12, 12, 12, 12, 12,
  225. 12, 12, 12, 12, 12, 12, 12, 12,
  226. 1, 1, 1, 1, 1, 1, 1, 1,
  227. 1, 1, 1, 1, 1, 1, 1, 1,
  228. 1, 1, 1, 1, 1, 1, 1, 1,
  229. 1, 1, 1, 1, 1, 1, 1, 1,
  230. 1, 1, 1, 1, 1, 1, 1, 1,
  231. 1, 1, 1, 1, 1, 1, 1, 1,
  232. 1, 1, 1, 1, 1, 1, 1, 1,
  233. 1, 1, 1, 1, 1, 1, 1, 1,
  234. 1, 1, 1, 16, 16, 16, 16, 16,
  235. 16, 16, 16, 16, 16, 16, 16, 16,
  236. 16, 16, 16, 16, 16, 16, 16, 16,
  237. 16, 16, 16, 16, 16, 16, 16, 16,
  238. 16, 17, 18, 18, 18, 18, 18, 18,
  239. 18, 18, 18, 18, 18, 18, 19, 18,
  240. 18, 20, 21, 21, 21, 22, 1, 26,
  241. 1, 23, 1, 1, 1, 1, 1, 1,
  242. 1, 1, 1, 1, 1, 1, 1, 1,
  243. 1, 1, 1, 1, 1, 1, 1, 1,
  244. 23, 1, 27, 1, 1, 1, 28, 1,
  245. 1, 1, 1, 1, 1, 1, 1, 1,
  246. 1, 1, 1, 1, 1, 1, 1, 1,
  247. 1, 27, 29, 30, 29, 29, 29, 29,
  248. 29, 31, 1, 29, 29, 1, 29, 32,
  249. 29, 29, 29, 29, 29, 29, 29, 29,
  250. 29, 29, 29, 1, 1, 1, 29, 1,
  251. 29, 33, 29, 29, 29, 29, 29, 29,
  252. 29, 29, 29, 29, 29, 29, 29, 29,
  253. 29, 29, 29, 29, 29, 29, 29, 29,
  254. 29, 29, 29, 29, 1, 1, 1, 29,
  255. 29, 29, 29, 29, 29, 29, 29, 29,
  256. 29, 29, 29, 29, 29, 29, 29, 29,
  257. 29, 29, 29, 29, 29, 29, 29, 29,
  258. 29, 29, 29, 29, 29, 29, 29, 29,
  259. 1, 1, 1, 1, 1, 1, 1, 1,
  260. 1, 1, 1, 1, 1, 1, 1, 1,
  261. 1, 1, 1, 1, 1, 1, 1, 1,
  262. 1, 1, 1, 1, 1, 1, 1, 1,
  263. 1, 1, 1, 1, 1, 1, 1, 1,
  264. 1, 1, 1, 1, 1, 1, 1, 1,
  265. 1, 1, 1, 1, 1, 1, 1, 1,
  266. 1, 1, 1, 1, 1, 1, 1, 1,
  267. 1, 1, 1, 34, 34, 34, 34, 34,
  268. 34, 34, 34, 34, 34, 34, 34, 34,
  269. 34, 34, 34, 34, 34, 34, 34, 34,
  270. 34, 34, 34, 34, 34, 34, 34, 34,
  271. 34, 35, 36, 36, 36, 36, 36, 36,
  272. 36, 36, 36, 36, 36, 36, 37, 36,
  273. 36, 38, 39, 39, 39, 40, 1, 41,
  274. 1, 1, 1, 42, 1, 1, 1, 1,
  275. 1, 1, 1, 1, 1, 1, 1, 1,
  276. 1, 1, 1, 1, 1, 1, 41, 1,
  277. 1, 1, 1, 1, 1, 1, 43, 1,
  278. 1, 1, 1, 1, 44, 1, 1, 1,
  279. 1, 1, 1, 1, 1, 1, 1, 1,
  280. 1, 1, 1, 1, 1, 1, 45, 1,
  281. 46, 1, 41, 1, 1, 1, 1, 1,
  282. 1, 1, 1, 1, 1, 1, 1, 1,
  283. 1, 1, 1, 1, 1, 1, 1, 1,
  284. 1, 41, 1, 47, 1, 1, 1, 48,
  285. 1, 1, 1, 1, 1, 1, 1, 1,
  286. 1, 1, 1, 1, 1, 1, 1, 1,
  287. 1, 1, 47, 1, 1, 1, 1, 1,
  288. 1, 1, 49, 1, 1, 1, 1, 1,
  289. 50, 1, 1, 1, 1, 1, 1, 1,
  290. 1, 1, 1, 1, 1, 1, 1, 1,
  291. 1, 1, 51, 1, 44, 1, 1, 1,
  292. 52, 1, 1, 1, 1, 1, 1, 1,
  293. 1, 1, 1, 1, 1, 1, 1, 1,
  294. 1, 1, 1, 44, 53, 54, 53, 53,
  295. 53, 53, 53, 55, 1, 53, 53, 1,
  296. 53, 1, 53, 53, 53, 53, 53, 53,
  297. 53, 53, 53, 53, 53, 1, 1, 1,
  298. 53, 1, 53, 1, 53, 53, 53, 53,
  299. 53, 53, 53, 53, 53, 53, 53, 53,
  300. 53, 53, 53, 53, 53, 53, 53, 53,
  301. 53, 53, 53, 53, 53, 53, 1, 1,
  302. 1, 53, 53, 53, 53, 53, 53, 53,
  303. 53, 53, 53, 53, 53, 53, 53, 53,
  304. 53, 53, 53, 53, 53, 53, 53, 53,
  305. 53, 53, 53, 53, 53, 53, 53, 53,
  306. 53, 53, 1, 1, 1, 1, 1, 1,
  307. 1, 1, 1, 1, 1, 1, 1, 1,
  308. 1, 1, 1, 1, 1, 1, 1, 1,
  309. 1, 1, 1, 1, 1, 1, 1, 1,
  310. 1, 1, 1, 1, 1, 1, 1, 1,
  311. 1, 1, 1, 1, 1, 1, 1, 1,
  312. 1, 1, 1, 1, 1, 1, 1, 1,
  313. 1, 1, 1, 1, 1, 1, 1, 1,
  314. 1, 1, 1, 1, 1, 56, 56, 56,
  315. 56, 56, 56, 56, 56, 56, 56, 56,
  316. 56, 56, 56, 56, 56, 56, 56, 56,
  317. 56, 56, 56, 56, 56, 56, 56, 56,
  318. 56, 56, 56, 57, 58, 58, 58, 58,
  319. 58, 58, 58, 58, 58, 58, 58, 58,
  320. 59, 58, 58, 60, 61, 61, 61, 62,
  321. 1, 63, 1, 44, 1, 1, 1, 1,
  322. 1, 1, 1, 1, 1, 1, 1, 1,
  323. 1, 1, 1, 1, 1, 1, 1, 1,
  324. 1, 1, 44, 1, 64, 1, 1, 1,
  325. 65, 1, 1, 1, 1, 1, 1, 1,
  326. 1, 1, 1, 1, 1, 1, 1, 1,
  327. 1, 1, 1, 64, 53, 1, 53, 53,
  328. 53, 53, 53, 66, 1, 53, 53, 1,
  329. 53, 44, 53, 53, 53, 53, 53, 53,
  330. 53, 53, 53, 53, 53, 1, 1, 1,
  331. 53, 1, 53, 67, 53, 53, 53, 53,
  332. 53, 53, 53, 53, 53, 53, 53, 53,
  333. 53, 53, 53, 53, 53, 53, 53, 53,
  334. 53, 53, 53, 53, 53, 53, 1, 1,
  335. 1, 53, 53, 53, 53, 53, 53, 53,
  336. 53, 53, 53, 53, 53, 53, 53, 53,
  337. 53, 53, 53, 53, 53, 53, 53, 53,
  338. 53, 53, 53, 53, 53, 53, 53, 53,
  339. 53, 53, 1, 1, 1, 1, 1, 1,
  340. 1, 1, 1, 1, 1, 1, 1, 1,
  341. 1, 1, 1, 1, 1, 1, 1, 1,
  342. 1, 1, 1, 1, 1, 1, 1, 1,
  343. 1, 1, 1, 1, 1, 1, 1, 1,
  344. 1, 1, 1, 1, 1, 1, 1, 1,
  345. 1, 1, 1, 1, 1, 1, 1, 1,
  346. 1, 1, 1, 1, 1, 1, 1, 1,
  347. 1, 1, 1, 1, 1, 56, 56, 56,
  348. 56, 56, 56, 56, 56, 56, 56, 56,
  349. 56, 56, 56, 56, 56, 56, 56, 56,
  350. 56, 56, 56, 56, 56, 56, 56, 56,
  351. 56, 56, 56, 57, 58, 58, 58, 58,
  352. 58, 58, 58, 58, 58, 58, 58, 58,
  353. 59, 58, 58, 60, 61, 61, 61, 62,
  354. 1, 64, 1, 1, 1, 65, 1, 1,
  355. 1, 1, 1, 1, 1, 1, 1, 1,
  356. 1, 1, 1, 1, 1, 1, 1, 1,
  357. 64, 1, 1, 1, 1, 1, 1, 1,
  358. 66, 1, 1, 1, 1, 1, 44, 1,
  359. 1, 1, 1, 1, 1, 1, 1, 1,
  360. 1, 1, 1, 1, 1, 1, 1, 1,
  361. 67, 1, 68, 1, 64, 1, 1, 1,
  362. 1, 1, 1, 1, 1, 1, 1, 1,
  363. 1, 1, 1, 1, 1, 1, 1, 1,
  364. 1, 1, 1, 64, 1, 69, 1, 1,
  365. 1, 70, 1, 1, 1, 1, 1, 1,
  366. 1, 1, 1, 1, 1, 1, 1, 1,
  367. 1, 1, 1, 1, 69, 1, 1, 1,
  368. 1, 1, 1, 1, 71, 1, 1, 1,
  369. 1, 1, 50, 1, 1, 1, 1, 1,
  370. 1, 1, 1, 1, 1, 1, 1, 1,
  371. 1, 1, 1, 1, 72, 1, 73, 1,
  372. 1, 1, 74, 1, 1, 1, 1, 1,
  373. 1, 1, 1, 1, 1, 1, 1, 1,
  374. 1, 1, 1, 1, 1, 73, 75, 76,
  375. 75, 75, 75, 75, 75, 77, 1, 75,
  376. 75, 1, 75, 78, 75, 75, 75, 75,
  377. 75, 75, 75, 75, 75, 75, 75, 1,
  378. 1, 1, 75, 1, 75, 79, 75, 75,
  379. 75, 75, 75, 75, 75, 75, 75, 75,
  380. 75, 75, 75, 75, 75, 75, 75, 75,
  381. 75, 75, 75, 75, 75, 75, 75, 75,
  382. 80, 1, 1, 75, 75, 75, 75, 75,
  383. 75, 75, 75, 75, 75, 75, 75, 75,
  384. 75, 75, 75, 75, 75, 75, 75, 75,
  385. 75, 75, 75, 75, 75, 75, 75, 75,
  386. 75, 75, 75, 75, 1, 1, 1, 1,
  387. 1, 1, 1, 1, 1, 1, 1, 1,
  388. 1, 1, 1, 1, 1, 1, 1, 1,
  389. 1, 1, 1, 1, 1, 1, 1, 1,
  390. 1, 1, 1, 1, 1, 1, 1, 1,
  391. 1, 1, 1, 1, 1, 1, 1, 1,
  392. 1, 1, 1, 1, 1, 1, 1, 1,
  393. 1, 1, 1, 1, 1, 1, 1, 1,
  394. 1, 1, 1, 1, 1, 1, 1, 81,
  395. 81, 81, 81, 81, 81, 81, 81, 81,
  396. 81, 81, 81, 81, 81, 81, 81, 81,
  397. 81, 81, 81, 81, 81, 81, 81, 81,
  398. 81, 81, 81, 81, 81, 82, 83, 83,
  399. 83, 83, 83, 83, 83, 83, 83, 83,
  400. 83, 83, 84, 83, 83, 85, 86, 86,
  401. 86, 87, 1, 88, 1, 1, 1, 89,
  402. 1, 1, 1, 1, 1, 1, 1, 1,
  403. 1, 1, 1, 1, 1, 1, 1, 1,
  404. 1, 1, 88, 90, 91, 90, 90, 90,
  405. 90, 90, 92, 1, 90, 90, 1, 90,
  406. 93, 90, 90, 90, 90, 90, 90, 90,
  407. 90, 90, 90, 90, 1, 1, 1, 90,
  408. 1, 90, 1, 90, 90, 90, 90, 90,
  409. 90, 90, 90, 90, 90, 90, 90, 90,
  410. 90, 90, 90, 90, 90, 90, 90, 90,
  411. 90, 90, 90, 90, 90, 94, 1, 1,
  412. 90, 90, 90, 90, 90, 90, 90, 90,
  413. 90, 90, 90, 90, 90, 90, 90, 90,
  414. 90, 90, 90, 90, 90, 90, 90, 90,
  415. 90, 90, 90, 90, 90, 90, 90, 90,
  416. 90, 1, 1, 1, 1, 1, 1, 1,
  417. 1, 1, 1, 1, 1, 1, 1, 1,
  418. 1, 1, 1, 1, 1, 1, 1, 1,
  419. 1, 1, 1, 1, 1, 1, 1, 1,
  420. 1, 1, 1, 1, 1, 1, 1, 1,
  421. 1, 1, 1, 1, 1, 1, 1, 1,
  422. 1, 1, 1, 1, 1, 1, 1, 1,
  423. 1, 1, 1, 1, 1, 1, 1, 1,
  424. 1, 1, 1, 1, 95, 95, 95, 95,
  425. 95, 95, 95, 95, 95, 95, 95, 95,
  426. 95, 95, 95, 95, 95, 95, 95, 95,
  427. 95, 95, 95, 95, 95, 95, 95, 95,
  428. 95, 95, 96, 97, 97, 97, 97, 97,
  429. 97, 97, 97, 97, 97, 97, 97, 98,
  430. 97, 97, 99, 100, 100, 100, 101, 1,
  431. 102, 1, 88, 1, 1, 1, 1, 1,
  432. 1, 1, 1, 1, 1, 1, 1, 1,
  433. 1, 1, 1, 1, 1, 1, 1, 1,
  434. 1, 88, 1, 103, 1, 1, 1, 104,
  435. 1, 1, 1, 1, 1, 1, 1, 1,
  436. 1, 1, 1, 1, 1, 1, 1, 1,
  437. 1, 1, 103, 90, 91, 90, 90, 90,
  438. 90, 90, 105, 1, 90, 90, 1, 90,
  439. 106, 90, 90, 90, 90, 90, 90, 90,
  440. 90, 90, 90, 90, 1, 1, 1, 90,
  441. 107, 90, 1, 90, 90, 90, 90, 90,
  442. 90, 90, 90, 90, 90, 90, 90, 90,
  443. 90, 90, 90, 90, 90, 90, 90, 90,
  444. 90, 90, 90, 90, 90, 1, 1, 1,
  445. 90, 90, 90, 90, 90, 90, 90, 90,
  446. 90, 90, 90, 90, 90, 90, 90, 90,
  447. 90, 90, 90, 90, 90, 90, 90, 90,
  448. 90, 90, 90, 90, 90, 90, 90, 90,
  449. 90, 1, 1, 1, 1, 1, 1, 1,
  450. 1, 1, 1, 1, 1, 1, 1, 1,
  451. 1, 1, 1, 1, 1, 1, 1, 1,
  452. 1, 1, 1, 1, 1, 1, 1, 1,
  453. 1, 1, 1, 1, 1, 1, 1, 1,
  454. 1, 1, 1, 1, 1, 1, 1, 1,
  455. 1, 1, 1, 1, 1, 1, 1, 1,
  456. 1, 1, 1, 1, 1, 1, 1, 1,
  457. 1, 1, 1, 1, 95, 95, 95, 95,
  458. 95, 95, 95, 95, 95, 95, 95, 95,
  459. 95, 95, 95, 95, 95, 95, 95, 95,
  460. 95, 95, 95, 95, 95, 95, 95, 95,
  461. 95, 95, 96, 97, 97, 97, 97, 97,
  462. 97, 97, 97, 97, 97, 97, 97, 98,
  463. 97, 97, 99, 100, 100, 100, 101, 1,
  464. 103, 1, 1, 1, 104, 1, 1, 1,
  465. 1, 1, 1, 1, 1, 1, 1, 1,
  466. 1, 1, 1, 1, 1, 1, 1, 103,
  467. 1, 1, 1, 1, 1, 1, 1, 105,
  468. 1, 1, 1, 1, 1, 108, 1, 1,
  469. 1, 1, 1, 1, 1, 1, 1, 1,
  470. 1, 1, 1, 1, 1, 107, 1, 109,
  471. 1, 103, 1, 1, 1, 1, 1, 1,
  472. 1, 1, 1, 1, 1, 1, 1, 1,
  473. 1, 1, 1, 1, 1, 1, 1, 1,
  474. 103, 1, 110, 1, 1, 1, 111, 1,
  475. 1, 1, 1, 1, 1, 1, 1, 1,
  476. 1, 1, 1, 1, 1, 1, 1, 1,
  477. 1, 110, 1, 1, 1, 1, 1, 1,
  478. 1, 112, 1, 1, 1, 1, 1, 113,
  479. 1, 1, 1, 1, 1, 1, 1, 1,
  480. 1, 1, 1, 1, 1, 1, 1, 114,
  481. 1, 108, 1, 1, 1, 115, 1, 1,
  482. 1, 1, 1, 1, 1, 1, 1, 1,
  483. 1, 1, 1, 1, 1, 1, 1, 1,
  484. 108, 116, 1, 116, 116, 116, 116, 116,
  485. 117, 1, 116, 116, 1, 116, 1, 116,
  486. 116, 116, 116, 116, 116, 116, 116, 116,
  487. 116, 116, 1, 1, 1, 116, 1, 116,
  488. 1, 116, 116, 116, 116, 116, 116, 116,
  489. 116, 116, 116, 116, 116, 116, 116, 116,
  490. 116, 116, 116, 116, 116, 116, 116, 116,
  491. 116, 116, 116, 1, 1, 1, 116, 116,
  492. 116, 116, 116, 116, 116, 116, 116, 116,
  493. 116, 116, 116, 116, 116, 116, 116, 116,
  494. 116, 116, 116, 116, 116, 116, 116, 116,
  495. 116, 116, 116, 116, 116, 116, 116, 1,
  496. 1, 1, 1, 1, 1, 1, 1, 1,
  497. 1, 1, 1, 1, 1, 1, 1, 1,
  498. 1, 1, 1, 1, 1, 1, 1, 1,
  499. 1, 1, 1, 1, 1, 1, 1, 1,
  500. 1, 1, 1, 1, 1, 1, 1, 1,
  501. 1, 1, 1, 1, 1, 1, 1, 1,
  502. 1, 1, 1, 1, 1, 1, 1, 1,
  503. 1, 1, 1, 1, 1, 1, 1, 1,
  504. 1, 1, 118, 118, 118, 118, 118, 118,
  505. 118, 118, 118, 118, 118, 118, 118, 118,
  506. 118, 118, 118, 118, 118, 118, 118, 118,
  507. 118, 118, 118, 118, 118, 118, 118, 118,
  508. 119, 120, 120, 120, 120, 120, 120, 120,
  509. 120, 120, 120, 120, 120, 121, 120, 120,
  510. 122, 123, 123, 123, 124, 1, 125, 1,
  511. 108, 1, 1, 1, 1, 1, 1, 1,
  512. 1, 1, 1, 1, 1, 1, 1, 1,
  513. 1, 1, 1, 1, 1, 1, 1, 108,
  514. 1, 103, 1, 1, 1, 104, 1, 1,
  515. 1, 1, 1, 1, 1, 1, 1, 1,
  516. 1, 1, 1, 1, 1, 1, 1, 1,
  517. 103, 116, 1, 116, 116, 116, 116, 116,
  518. 105, 1, 116, 116, 1, 116, 108, 116,
  519. 116, 116, 116, 116, 116, 116, 116, 116,
  520. 116, 116, 1, 1, 1, 116, 107, 116,
  521. 1, 116, 116, 116, 116, 116, 116, 116,
  522. 116, 116, 116, 116, 116, 116, 116, 116,
  523. 116, 116, 116, 116, 116, 116, 116, 116,
  524. 116, 116, 116, 1, 1, 1, 116, 116,
  525. 116, 116, 116, 116, 116, 116, 116, 116,
  526. 116, 116, 116, 116, 116, 116, 116, 116,
  527. 116, 116, 116, 116, 116, 116, 116, 116,
  528. 116, 116, 116, 116, 116, 116, 116, 1,
  529. 1, 1, 1, 1, 1, 1, 1, 1,
  530. 1, 1, 1, 1, 1, 1, 1, 1,
  531. 1, 1, 1, 1, 1, 1, 1, 1,
  532. 1, 1, 1, 1, 1, 1, 1, 1,
  533. 1, 1, 1, 1, 1, 1, 1, 1,
  534. 1, 1, 1, 1, 1, 1, 1, 1,
  535. 1, 1, 1, 1, 1, 1, 1, 1,
  536. 1, 1, 1, 1, 1, 1, 1, 1,
  537. 1, 1, 118, 118, 118, 118, 118, 118,
  538. 118, 118, 118, 118, 118, 118, 118, 118,
  539. 118, 118, 118, 118, 118, 118, 118, 118,
  540. 118, 118, 118, 118, 118, 118, 118, 118,
  541. 119, 120, 120, 120, 120, 120, 120, 120,
  542. 120, 120, 120, 120, 120, 121, 120, 120,
  543. 122, 123, 123, 123, 124, 1, 126, 1,
  544. 127, 1, 1, 1, 1, 1, 1, 1,
  545. 1, 1, 1, 1, 1, 1, 1, 1,
  546. 1, 1, 1, 1, 1, 1, 1, 127,
  547. 1, 116, 116, 116, 116, 116, 116, 116,
  548. 116, 116, 116, 116, 116, 116, 116, 116,
  549. 116, 116, 116, 116, 116, 116, 116, 116,
  550. 116, 116, 116, 116, 116, 116, 116, 116,
  551. 116, 116, 116, 116, 116, 116, 116, 116,
  552. 116, 116, 116, 116, 116, 116, 116, 116,
  553. 116, 116, 116, 116, 116, 116, 116, 116,
  554. 116, 116, 116, 116, 116, 116, 116, 116,
  555. 116, 1, 118, 118, 118, 118, 118, 118,
  556. 118, 118, 118, 118, 118, 118, 118, 118,
  557. 118, 118, 118, 118, 118, 118, 118, 118,
  558. 118, 118, 118, 118, 118, 118, 118, 118,
  559. 118, 118, 1, 118, 118, 118, 118, 118,
  560. 118, 118, 118, 118, 118, 118, 118, 118,
  561. 118, 118, 118, 118, 118, 118, 118, 118,
  562. 118, 118, 118, 118, 118, 118, 118, 118,
  563. 118, 118, 118, 118, 118, 118, 118, 118,
  564. 118, 118, 118, 118, 118, 118, 118, 118,
  565. 118, 118, 118, 118, 118, 118, 118, 118,
  566. 118, 118, 118, 118, 118, 118, 118, 118,
  567. 118, 118, 118, 1, 118, 118, 118, 118,
  568. 118, 118, 118, 118, 118, 118, 118, 118,
  569. 118, 118, 118, 118, 118, 118, 118, 118,
  570. 118, 118, 118, 118, 118, 118, 118, 118,
  571. 118, 118, 118, 118, 1, 120, 120, 120,
  572. 120, 120, 120, 120, 120, 120, 120, 120,
  573. 120, 120, 120, 120, 120, 120, 120, 120,
  574. 120, 120, 120, 120, 120, 120, 120, 120,
  575. 120, 120, 120, 120, 120, 120, 120, 120,
  576. 120, 120, 120, 120, 120, 120, 120, 120,
  577. 120, 120, 120, 120, 120, 1, 120, 120,
  578. 120, 120, 120, 120, 120, 120, 120, 120,
  579. 120, 120, 120, 120, 120, 120, 120, 120,
  580. 120, 120, 120, 120, 120, 120, 120, 120,
  581. 120, 120, 120, 120, 120, 120, 120, 120,
  582. 120, 120, 120, 120, 120, 120, 120, 120,
  583. 120, 120, 120, 120, 120, 120, 120, 120,
  584. 120, 120, 120, 120, 120, 120, 120, 120,
  585. 120, 120, 120, 120, 120, 120, 1, 120,
  586. 120, 120, 120, 120, 120, 120, 120, 120,
  587. 120, 120, 120, 120, 120, 120, 120, 1,
  588. 113, 1, 1, 1, 128, 1, 1, 1,
  589. 1, 1, 1, 1, 1, 1, 1, 1,
  590. 1, 1, 1, 1, 1, 1, 1, 113,
  591. 129, 1, 129, 129, 129, 129, 129, 130,
  592. 1, 129, 129, 1, 129, 1, 129, 129,
  593. 129, 129, 129, 129, 129, 129, 129, 129,
  594. 129, 1, 1, 1, 129, 1, 129, 1,
  595. 129, 129, 129, 129, 129, 129, 129, 129,
  596. 129, 129, 129, 129, 129, 129, 129, 129,
  597. 129, 129, 129, 129, 129, 129, 129, 129,
  598. 129, 129, 1, 1, 1, 129, 129, 129,
  599. 129, 129, 129, 129, 129, 129, 129, 129,
  600. 129, 129, 129, 129, 129, 129, 129, 129,
  601. 129, 129, 129, 129, 129, 129, 129, 129,
  602. 129, 129, 129, 129, 129, 129, 1, 1,
  603. 1, 1, 1, 1, 1, 1, 1, 1,
  604. 1, 1, 1, 1, 1, 1, 1, 1,
  605. 1, 1, 1, 1, 1, 1, 1, 1,
  606. 1, 1, 1, 1, 1, 1, 1, 1,
  607. 1, 1, 1, 1, 1, 1, 1, 1,
  608. 1, 1, 1, 1, 1, 1, 1, 1,
  609. 1, 1, 1, 1, 1, 1, 1, 1,
  610. 1, 1, 1, 1, 1, 1, 1, 1,
  611. 1, 131, 131, 131, 131, 131, 131, 131,
  612. 131, 131, 131, 131, 131, 131, 131, 131,
  613. 131, 131, 131, 131, 131, 131, 131, 131,
  614. 131, 131, 131, 131, 131, 131, 131, 132,
  615. 133, 133, 133, 133, 133, 133, 133, 133,
  616. 133, 133, 133, 133, 134, 133, 133, 135,
  617. 136, 136, 136, 137, 1, 138, 138, 138,
  618. 138, 138, 138, 138, 138, 91, 1, 138,
  619. 138, 139, 138, 138, 138, 138, 138, 138,
  620. 138, 138, 138, 138, 138, 138, 138, 138,
  621. 138, 138, 138, 138, 91, 138, 1, 138,
  622. 138, 138, 138, 138, 138, 138, 138, 138,
  623. 138, 138, 138, 138, 138, 138, 138, 138,
  624. 138, 138, 138, 138, 138, 138, 138, 138,
  625. 138, 138, 138, 138, 138, 138, 138, 138,
  626. 138, 138, 138, 138, 138, 138, 138, 138,
  627. 138, 138, 138, 138, 138, 138, 138, 138,
  628. 138, 138, 138, 138, 138, 138, 138, 138,
  629. 140, 138, 138, 138, 138, 138, 138, 138,
  630. 138, 138, 138, 138, 138, 138, 138, 138,
  631. 138, 138, 138, 138, 138, 138, 138, 138,
  632. 138, 138, 138, 138, 138, 138, 138, 138,
  633. 138, 138, 138, 138, 1, 1, 1, 1,
  634. 1, 1, 1, 1, 1, 1, 1, 1,
  635. 1, 1, 1, 1, 1, 1, 1, 1,
  636. 1, 1, 1, 1, 1, 1, 1, 1,
  637. 1, 1, 1, 1, 1, 1, 1, 1,
  638. 1, 1, 1, 1, 1, 1, 1, 1,
  639. 1, 1, 1, 1, 1, 1, 1, 1,
  640. 1, 1, 1, 1, 1, 1, 1, 1,
  641. 1, 1, 1, 1, 1, 1, 141, 141,
  642. 141, 141, 141, 141, 141, 141, 141, 141,
  643. 141, 141, 141, 141, 141, 141, 141, 141,
  644. 141, 141, 141, 141, 141, 141, 141, 141,
  645. 141, 141, 141, 141, 142, 143, 143, 143,
  646. 143, 143, 143, 143, 143, 143, 143, 143,
  647. 143, 144, 143, 143, 145, 146, 146, 146,
  648. 147, 1, 138, 138, 138, 138, 138, 138,
  649. 138, 138, 138, 1, 138, 138, 148, 138,
  650. 138, 138, 138, 138, 138, 138, 138, 138,
  651. 138, 138, 138, 138, 138, 138, 138, 138,
  652. 138, 138, 138, 149, 138, 138, 138, 138,
  653. 138, 138, 138, 138, 138, 138, 138, 138,
  654. 138, 138, 138, 138, 138, 138, 138, 138,
  655. 138, 138, 138, 138, 138, 138, 138, 138,
  656. 138, 138, 138, 138, 138, 138, 138, 138,
  657. 138, 138, 138, 138, 138, 138, 138, 138,
  658. 138, 138, 138, 138, 138, 138, 138, 138,
  659. 138, 138, 138, 138, 138, 140, 138, 138,
  660. 138, 138, 138, 138, 138, 138, 138, 138,
  661. 138, 138, 138, 138, 138, 138, 138, 138,
  662. 138, 138, 138, 138, 138, 138, 138, 138,
  663. 138, 138, 138, 138, 138, 138, 138, 138,
  664. 138, 1, 1, 1, 1, 1, 1, 1,
  665. 1, 1, 1, 1, 1, 1, 1, 1,
  666. 1, 1, 1, 1, 1, 1, 1, 1,
  667. 1, 1, 1, 1, 1, 1, 1, 1,
  668. 1, 1, 1, 1, 1, 1, 1, 1,
  669. 1, 1, 1, 1, 1, 1, 1, 1,
  670. 1, 1, 1, 1, 1, 1, 1, 1,
  671. 1, 1, 1, 1, 1, 1, 1, 1,
  672. 1, 1, 1, 141, 141, 141, 141, 141,
  673. 141, 141, 141, 141, 141, 141, 141, 141,
  674. 141, 141, 141, 141, 141, 141, 141, 141,
  675. 141, 141, 141, 141, 141, 141, 141, 141,
  676. 141, 142, 143, 143, 143, 143, 143, 143,
  677. 143, 143, 143, 143, 143, 143, 144, 143,
  678. 143, 145, 146, 146, 146, 147, 1, 150,
  679. 1, 138, 1, 1, 1, 1, 1, 1,
  680. 1, 1, 1, 1, 1, 1, 1, 1,
  681. 1, 1, 1, 1, 1, 1, 1, 1,
  682. 138, 1, 151, 1, 1, 1, 152, 1,
  683. 1, 1, 1, 1, 1, 1, 1, 1,
  684. 1, 1, 1, 1, 1, 1, 1, 1,
  685. 1, 151, 149, 91, 149, 149, 149, 149,
  686. 149, 153, 1, 149, 149, 1, 149, 93,
  687. 149, 149, 149, 149, 149, 149, 149, 149,
  688. 149, 149, 149, 1, 1, 1, 149, 107,
  689. 149, 1, 149, 149, 149, 149, 149, 149,
  690. 149, 149, 149, 149, 149, 149, 149, 149,
  691. 149, 149, 149, 149, 149, 149, 149, 149,
  692. 149, 149, 149, 149, 1, 1, 1, 149,
  693. 149, 149, 149, 149, 149, 149, 149, 149,
  694. 149, 149, 149, 149, 149, 149, 149, 149,
  695. 149, 149, 149, 149, 149, 149, 149, 149,
  696. 149, 149, 149, 149, 149, 149, 149, 149,
  697. 1, 1, 1, 1, 1, 1, 1, 1,
  698. 1, 1, 1, 1, 1, 1, 1, 1,
  699. 1, 1, 1, 1, 1, 1, 1, 1,
  700. 1, 1, 1, 1, 1, 1, 1, 1,
  701. 1, 1, 1, 1, 1, 1, 1, 1,
  702. 1, 1, 1, 1, 1, 1, 1, 1,
  703. 1, 1, 1, 1, 1, 1, 1, 1,
  704. 1, 1, 1, 1, 1, 1, 1, 1,
  705. 1, 1, 1, 154, 154, 154, 154, 154,
  706. 154, 154, 154, 154, 154, 154, 154, 154,
  707. 154, 154, 154, 154, 154, 154, 154, 154,
  708. 154, 154, 154, 154, 154, 154, 154, 154,
  709. 154, 155, 156, 156, 156, 156, 156, 156,
  710. 156, 156, 156, 156, 156, 156, 157, 156,
  711. 156, 158, 159, 159, 159, 160, 1, 151,
  712. 1, 1, 1, 152, 1, 1, 1, 1,
  713. 1, 1, 1, 1, 1, 1, 1, 1,
  714. 1, 1, 1, 1, 1, 1, 151, 1,
  715. 1, 1, 1, 1, 1, 1, 153, 1,
  716. 1, 1, 1, 1, 1, 1, 1, 1,
  717. 1, 1, 1, 1, 1, 1, 1, 1,
  718. 1, 1, 1, 1, 107, 1, 161, 1,
  719. 151, 1, 1, 1, 1, 1, 1, 1,
  720. 1, 1, 1, 1, 1, 1, 1, 1,
  721. 1, 1, 1, 1, 1, 1, 1, 151,
  722. 1, 162, 1, 1, 1, 163, 1, 1,
  723. 1, 1, 1, 1, 1, 1, 1, 1,
  724. 1, 1, 1, 1, 1, 1, 1, 1,
  725. 162, 1, 1, 1, 1, 1, 1, 1,
  726. 164, 1, 1, 1, 1, 1, 1, 1,
  727. 1, 1, 1, 1, 1, 1, 1, 1,
  728. 1, 1, 1, 1, 1, 1, 114, 1,
  729. 149, 91, 149, 149, 149, 149, 149, 1,
  730. 1, 149, 149, 1, 149, 93, 149, 149,
  731. 149, 149, 149, 149, 149, 149, 149, 149,
  732. 149, 1, 1, 1, 149, 1, 149, 1,
  733. 149, 149, 149, 149, 149, 149, 149, 149,
  734. 149, 149, 149, 149, 149, 149, 149, 149,
  735. 149, 149, 149, 149, 149, 149, 149, 149,
  736. 149, 149, 1, 1, 1, 149, 149, 149,
  737. 149, 149, 149, 149, 149, 149, 149, 149,
  738. 149, 149, 149, 149, 149, 149, 149, 149,
  739. 149, 149, 149, 149, 149, 149, 149, 149,
  740. 149, 149, 149, 149, 149, 149, 1, 1,
  741. 1, 1, 1, 1, 1, 1, 1, 1,
  742. 1, 1, 1, 1, 1, 1, 1, 1,
  743. 1, 1, 1, 1, 1, 1, 1, 1,
  744. 1, 1, 1, 1, 1, 1, 1, 1,
  745. 1, 1, 1, 1, 1, 1, 1, 1,
  746. 1, 1, 1, 1, 1, 1, 1, 1,
  747. 1, 1, 1, 1, 1, 1, 1, 1,
  748. 1, 1, 1, 1, 1, 1, 1, 1,
  749. 1, 154, 154, 154, 154, 154, 154, 154,
  750. 154, 154, 154, 154, 154, 154, 154, 154,
  751. 154, 154, 154, 154, 154, 154, 154, 154,
  752. 154, 154, 154, 154, 154, 154, 154, 155,
  753. 156, 156, 156, 156, 156, 156, 156, 156,
  754. 156, 156, 156, 156, 157, 156, 156, 158,
  755. 159, 159, 159, 160, 1, 149, 149, 149,
  756. 149, 149, 149, 149, 149, 149, 149, 149,
  757. 149, 149, 149, 149, 149, 149, 149, 149,
  758. 149, 149, 149, 149, 149, 149, 149, 149,
  759. 149, 149, 149, 149, 149, 149, 149, 149,
  760. 149, 149, 149, 149, 149, 149, 149, 149,
  761. 149, 149, 149, 149, 149, 149, 149, 149,
  762. 149, 149, 149, 149, 149, 149, 149, 149,
  763. 149, 149, 149, 149, 149, 1, 154, 154,
  764. 154, 154, 154, 154, 154, 154, 154, 154,
  765. 154, 154, 154, 154, 154, 154, 154, 154,
  766. 154, 154, 154, 154, 154, 154, 154, 154,
  767. 154, 154, 154, 154, 154, 154, 1, 154,
  768. 154, 154, 154, 154, 154, 154, 154, 154,
  769. 154, 154, 154, 154, 154, 154, 154, 154,
  770. 154, 154, 154, 154, 154, 154, 154, 154,
  771. 154, 154, 154, 154, 154, 154, 154, 154,
  772. 154, 154, 154, 154, 154, 154, 154, 154,
  773. 154, 154, 154, 154, 154, 154, 154, 154,
  774. 154, 154, 154, 154, 154, 154, 154, 154,
  775. 154, 154, 154, 154, 154, 154, 154, 1,
  776. 154, 154, 154, 154, 154, 154, 154, 154,
  777. 154, 154, 154, 154, 154, 154, 154, 154,
  778. 154, 154, 154, 154, 154, 154, 154, 154,
  779. 154, 154, 154, 154, 154, 154, 154, 154,
  780. 1, 156, 156, 156, 156, 156, 156, 156,
  781. 156, 156, 156, 156, 156, 156, 156, 156,
  782. 156, 156, 156, 156, 156, 156, 156, 156,
  783. 156, 156, 156, 156, 156, 156, 156, 156,
  784. 156, 156, 156, 156, 156, 156, 156, 156,
  785. 156, 156, 156, 156, 156, 156, 156, 156,
  786. 156, 1, 156, 156, 156, 156, 156, 156,
  787. 156, 156, 156, 156, 156, 156, 156, 156,
  788. 156, 156, 156, 156, 156, 156, 156, 156,
  789. 156, 156, 156, 156, 156, 156, 156, 156,
  790. 156, 156, 156, 156, 156, 156, 156, 156,
  791. 156, 156, 156, 156, 156, 156, 156, 156,
  792. 156, 156, 156, 156, 156, 156, 156, 156,
  793. 156, 156, 156, 156, 156, 156, 156, 156,
  794. 156, 156, 1, 156, 156, 156, 156, 156,
  795. 156, 156, 156, 156, 156, 156, 156, 156,
  796. 156, 156, 156, 1, 138, 138, 138, 138,
  797. 138, 138, 138, 138, 138, 138, 138, 138,
  798. 138, 138, 138, 138, 138, 138, 138, 138,
  799. 138, 138, 138, 138, 138, 138, 138, 138,
  800. 138, 138, 138, 138, 138, 138, 138, 138,
  801. 138, 138, 138, 138, 138, 138, 138, 138,
  802. 138, 138, 138, 138, 138, 138, 138, 138,
  803. 138, 138, 138, 138, 138, 138, 138, 138,
  804. 138, 138, 138, 138, 138, 138, 138, 138,
  805. 138, 138, 138, 138, 138, 138, 138, 138,
  806. 138, 138, 138, 138, 138, 138, 138, 138,
  807. 138, 138, 138, 138, 138, 138, 138, 138,
  808. 138, 138, 138, 138, 138, 138, 138, 138,
  809. 138, 138, 138, 138, 138, 138, 138, 138,
  810. 138, 138, 138, 138, 138, 138, 138, 138,
  811. 138, 138, 138, 138, 138, 138, 138, 138,
  812. 138, 138, 138, 138, 1, 1, 1, 1,
  813. 1, 1, 1, 1, 1, 1, 1, 1,
  814. 1, 1, 1, 1, 1, 1, 1, 1,
  815. 1, 1, 1, 1, 1, 1, 1, 1,
  816. 1, 1, 1, 1, 1, 1, 1, 1,
  817. 1, 1, 1, 1, 1, 1, 1, 1,
  818. 1, 1, 1, 1, 1, 1, 1, 1,
  819. 1, 1, 1, 1, 1, 1, 1, 1,
  820. 1, 1, 1, 1, 1, 1, 141, 141,
  821. 141, 141, 141, 141, 141, 141, 141, 141,
  822. 141, 141, 141, 141, 141, 141, 141, 141,
  823. 141, 141, 141, 141, 141, 141, 141, 141,
  824. 141, 141, 141, 141, 142, 143, 143, 143,
  825. 143, 143, 143, 143, 143, 143, 143, 143,
  826. 143, 144, 143, 143, 145, 146, 146, 146,
  827. 147, 1, 138, 138, 138, 138, 138, 138,
  828. 138, 138, 138, 138, 138, 138, 138, 138,
  829. 138, 138, 138, 138, 138, 138, 138, 138,
  830. 138, 138, 138, 138, 138, 138, 138, 138,
  831. 138, 138, 138, 138, 138, 138, 138, 138,
  832. 138, 138, 138, 138, 138, 138, 138, 138,
  833. 138, 138, 138, 138, 138, 138, 138, 138,
  834. 138, 138, 138, 138, 138, 138, 138, 138,
  835. 138, 138, 1, 141, 141, 141, 141, 141,
  836. 141, 141, 141, 141, 141, 141, 141, 141,
  837. 141, 141, 141, 141, 141, 141, 141, 141,
  838. 141, 141, 141, 141, 141, 141, 141, 141,
  839. 141, 141, 141, 1, 141, 141, 141, 141,
  840. 141, 141, 141, 141, 141, 141, 141, 141,
  841. 141, 141, 141, 141, 141, 141, 141, 141,
  842. 141, 141, 141, 141, 141, 141, 141, 141,
  843. 141, 141, 141, 141, 141, 141, 141, 141,
  844. 141, 141, 141, 141, 141, 141, 141, 141,
  845. 141, 141, 141, 141, 141, 141, 141, 141,
  846. 141, 141, 141, 141, 141, 141, 141, 141,
  847. 141, 141, 141, 141, 1, 141, 141, 141,
  848. 141, 141, 141, 141, 141, 141, 141, 141,
  849. 141, 141, 141, 141, 141, 141, 141, 141,
  850. 141, 141, 141, 141, 141, 141, 141, 141,
  851. 141, 141, 141, 141, 141, 1, 143, 143,
  852. 143, 143, 143, 143, 143, 143, 143, 143,
  853. 143, 143, 143, 143, 143, 143, 143, 143,
  854. 143, 143, 143, 143, 143, 143, 143, 143,
  855. 143, 143, 143, 143, 143, 143, 143, 143,
  856. 143, 143, 143, 143, 143, 143, 143, 143,
  857. 143, 143, 143, 143, 143, 143, 1, 143,
  858. 143, 143, 143, 143, 143, 143, 143, 143,
  859. 143, 143, 143, 143, 143, 143, 143, 143,
  860. 143, 143, 143, 143, 143, 143, 143, 143,
  861. 143, 143, 143, 143, 143, 143, 143, 143,
  862. 143, 143, 143, 143, 143, 143, 143, 143,
  863. 143, 143, 143, 143, 143, 143, 143, 143,
  864. 143, 143, 143, 143, 143, 143, 143, 143,
  865. 143, 143, 143, 143, 143, 143, 143, 1,
  866. 143, 143, 143, 143, 143, 143, 143, 143,
  867. 143, 143, 143, 143, 143, 143, 143, 143,
  868. 1, 165, 1, 91, 1, 1, 1, 1,
  869. 1, 1, 1, 1, 1, 1, 1, 1,
  870. 1, 1, 1, 1, 1, 1, 1, 1,
  871. 1, 1, 91, 1, 108, 1, 1, 1,
  872. 115, 1, 1, 1, 1, 1, 1, 1,
  873. 1, 1, 1, 1, 1, 1, 1, 1,
  874. 1, 1, 1, 108, 90, 91, 90, 90,
  875. 90, 90, 90, 117, 1, 90, 90, 1,
  876. 90, 93, 90, 90, 90, 90, 90, 90,
  877. 90, 90, 90, 90, 90, 1, 1, 1,
  878. 90, 1, 90, 1, 90, 90, 90, 90,
  879. 90, 90, 90, 90, 90, 90, 90, 90,
  880. 90, 90, 90, 90, 90, 90, 90, 90,
  881. 90, 90, 90, 90, 90, 90, 1, 1,
  882. 1, 90, 90, 90, 90, 90, 90, 90,
  883. 90, 90, 90, 90, 90, 90, 90, 90,
  884. 90, 90, 90, 90, 90, 90, 90, 90,
  885. 90, 90, 90, 90, 90, 90, 90, 90,
  886. 90, 90, 1, 1, 1, 1, 1, 1,
  887. 1, 1, 1, 1, 1, 1, 1, 1,
  888. 1, 1, 1, 1, 1, 1, 1, 1,
  889. 1, 1, 1, 1, 1, 1, 1, 1,
  890. 1, 1, 1, 1, 1, 1, 1, 1,
  891. 1, 1, 1, 1, 1, 1, 1, 1,
  892. 1, 1, 1, 1, 1, 1, 1, 1,
  893. 1, 1, 1, 1, 1, 1, 1, 1,
  894. 1, 1, 1, 1, 1, 95, 95, 95,
  895. 95, 95, 95, 95, 95, 95, 95, 95,
  896. 95, 95, 95, 95, 95, 95, 95, 95,
  897. 95, 95, 95, 95, 95, 95, 95, 95,
  898. 95, 95, 95, 96, 97, 97, 97, 97,
  899. 97, 97, 97, 97, 97, 97, 97, 97,
  900. 98, 97, 97, 99, 100, 100, 100, 101,
  901. 1, 90, 90, 90, 90, 90, 90, 90,
  902. 90, 90, 90, 90, 90, 90, 90, 90,
  903. 90, 90, 90, 90, 90, 90, 90, 90,
  904. 90, 90, 90, 90, 90, 90, 90, 90,
  905. 90, 90, 90, 90, 90, 90, 90, 90,
  906. 90, 90, 90, 90, 90, 90, 90, 90,
  907. 90, 90, 90, 90, 90, 90, 90, 90,
  908. 90, 90, 90, 90, 90, 90, 90, 90,
  909. 90, 1, 95, 95, 95, 95, 95, 95,
  910. 95, 95, 95, 95, 95, 95, 95, 95,
  911. 95, 95, 95, 95, 95, 95, 95, 95,
  912. 95, 95, 95, 95, 95, 95, 95, 95,
  913. 95, 95, 1, 95, 95, 95, 95, 95,
  914. 95, 95, 95, 95, 95, 95, 95, 95,
  915. 95, 95, 95, 95, 95, 95, 95, 95,
  916. 95, 95, 95, 95, 95, 95, 95, 95,
  917. 95, 95, 95, 95, 95, 95, 95, 95,
  918. 95, 95, 95, 95, 95, 95, 95, 95,
  919. 95, 95, 95, 95, 95, 95, 95, 95,
  920. 95, 95, 95, 95, 95, 95, 95, 95,
  921. 95, 95, 95, 1, 95, 95, 95, 95,
  922. 95, 95, 95, 95, 95, 95, 95, 95,
  923. 95, 95, 95, 95, 95, 95, 95, 95,
  924. 95, 95, 95, 95, 95, 95, 95, 95,
  925. 95, 95, 95, 95, 1, 97, 97, 97,
  926. 97, 97, 97, 97, 97, 97, 97, 97,
  927. 97, 97, 97, 97, 97, 97, 97, 97,
  928. 97, 97, 97, 97, 97, 97, 97, 97,
  929. 97, 97, 97, 97, 97, 97, 97, 97,
  930. 97, 97, 97, 97, 97, 97, 97, 97,
  931. 97, 97, 97, 97, 97, 1, 97, 97,
  932. 97, 97, 97, 97, 97, 97, 97, 97,
  933. 97, 97, 97, 97, 97, 97, 97, 97,
  934. 97, 97, 97, 97, 97, 97, 97, 97,
  935. 97, 97, 97, 97, 97, 97, 97, 97,
  936. 97, 97, 97, 97, 97, 97, 97, 97,
  937. 97, 97, 97, 97, 97, 97, 97, 97,
  938. 97, 97, 97, 97, 97, 97, 97, 97,
  939. 97, 97, 97, 97, 97, 97, 1, 97,
  940. 97, 97, 97, 97, 97, 97, 97, 97,
  941. 97, 97, 97, 97, 97, 97, 97, 1,
  942. 166, 1, 1, 1, 167, 1, 1, 1,
  943. 1, 1, 1, 1, 1, 1, 1, 1,
  944. 1, 1, 1, 1, 1, 1, 1, 166,
  945. 168, 169, 168, 168, 168, 168, 168, 170,
  946. 1, 168, 168, 1, 168, 171, 168, 168,
  947. 168, 168, 168, 168, 168, 168, 168, 168,
  948. 168, 1, 1, 1, 168, 1, 168, 1,
  949. 168, 168, 168, 168, 168, 168, 168, 168,
  950. 168, 168, 168, 168, 168, 168, 168, 168,
  951. 168, 168, 168, 168, 168, 168, 168, 168,
  952. 168, 168, 172, 1, 1, 168, 168, 168,
  953. 168, 168, 168, 168, 168, 168, 168, 168,
  954. 168, 168, 168, 168, 168, 168, 168, 168,
  955. 168, 168, 168, 168, 168, 168, 168, 168,
  956. 168, 168, 168, 168, 168, 168, 1, 1,
  957. 1, 1, 1, 1, 1, 1, 1, 1,
  958. 1, 1, 1, 1, 1, 1, 1, 1,
  959. 1, 1, 1, 1, 1, 1, 1, 1,
  960. 1, 1, 1, 1, 1, 1, 1, 1,
  961. 1, 1, 1, 1, 1, 1, 1, 1,
  962. 1, 1, 1, 1, 1, 1, 1, 1,
  963. 1, 1, 1, 1, 1, 1, 1, 1,
  964. 1, 1, 1, 1, 1, 1, 1, 1,
  965. 1, 173, 173, 173, 173, 173, 173, 173,
  966. 173, 173, 173, 173, 173, 173, 173, 173,
  967. 173, 173, 173, 173, 173, 173, 173, 173,
  968. 173, 173, 173, 173, 173, 173, 173, 174,
  969. 175, 175, 175, 175, 175, 175, 175, 175,
  970. 175, 175, 175, 175, 176, 175, 175, 177,
  971. 178, 178, 178, 179, 1, 94, 94, 94,
  972. 94, 94, 94, 94, 94, 94, 1, 94,
  973. 94, 180, 94, 94, 94, 94, 94, 94,
  974. 94, 94, 94, 94, 94, 94, 94, 94,
  975. 94, 94, 94, 94, 94, 94, 94, 94,
  976. 94, 94, 94, 94, 94, 94, 94, 94,
  977. 94, 94, 94, 94, 94, 94, 94, 94,
  978. 94, 94, 94, 94, 94, 94, 94, 94,
  979. 94, 94, 94, 94, 94, 94, 94, 94,
  980. 94, 94, 94, 94, 94, 94, 94, 94,
  981. 94, 94, 94, 94, 94, 94, 94, 94,
  982. 94, 94, 94, 94, 94, 94, 94, 1,
  983. 181, 151, 94, 94, 94, 94, 94, 94,
  984. 94, 94, 94, 94, 94, 94, 94, 94,
  985. 94, 94, 94, 94, 94, 94, 94, 94,
  986. 94, 94, 94, 94, 94, 94, 94, 94,
  987. 94, 94, 94, 94, 1, 1, 1, 1,
  988. 1, 1, 1, 1, 1, 1, 1, 1,
  989. 1, 1, 1, 1, 1, 1, 1, 1,
  990. 1, 1, 1, 1, 1, 1, 1, 1,
  991. 1, 1, 1, 1, 1, 1, 1, 1,
  992. 1, 1, 1, 1, 1, 1, 1, 1,
  993. 1, 1, 1, 1, 1, 1, 1, 1,
  994. 1, 1, 1, 1, 1, 1, 1, 1,
  995. 1, 1, 1, 1, 1, 1, 182, 182,
  996. 182, 182, 182, 182, 182, 182, 182, 182,
  997. 182, 182, 182, 182, 182, 182, 182, 182,
  998. 182, 182, 182, 182, 182, 182, 182, 182,
  999. 182, 182, 182, 182, 183, 184, 184, 184,
  1000. 184, 184, 184, 184, 184, 184, 184, 184,
  1001. 184, 185, 184, 184, 186, 187, 187, 187,
  1002. 188, 1, 189, 1, 94, 1, 1, 1,
  1003. 1, 1, 1, 1, 1, 1, 1, 1,
  1004. 1, 1, 1, 1, 1, 1, 1, 1,
  1005. 1, 1, 1, 94, 1, 94, 94, 94,
  1006. 94, 94, 94, 94, 94, 94, 94, 94,
  1007. 94, 94, 94, 94, 94, 94, 94, 94,
  1008. 94, 94, 94, 94, 94, 94, 94, 94,
  1009. 94, 94, 94, 94, 94, 94, 94, 94,
  1010. 94, 94, 94, 94, 94, 94, 94, 94,
  1011. 94, 94, 94, 94, 94, 94, 94, 94,
  1012. 94, 94, 94, 94, 94, 94, 94, 94,
  1013. 94, 94, 94, 94, 94, 94, 94, 94,
  1014. 94, 94, 94, 94, 94, 94, 94, 94,
  1015. 94, 94, 94, 94, 94, 94, 94, 94,
  1016. 94, 94, 94, 94, 94, 94, 94, 94,
  1017. 94, 94, 94, 94, 94, 94, 94, 94,
  1018. 94, 94, 94, 94, 94, 94, 94, 94,
  1019. 94, 94, 94, 94, 94, 94, 94, 94,
  1020. 94, 94, 94, 94, 94, 94, 94, 94,
  1021. 94, 94, 94, 94, 94, 1, 1, 1,
  1022. 1, 1, 1, 1, 1, 1, 1, 1,
  1023. 1, 1, 1, 1, 1, 1, 1, 1,
  1024. 1, 1, 1, 1, 1, 1, 1, 1,
  1025. 1, 1, 1, 1, 1, 1, 1, 1,
  1026. 1, 1, 1, 1, 1, 1, 1, 1,
  1027. 1, 1, 1, 1, 1, 1, 1, 1,
  1028. 1, 1, 1, 1, 1, 1, 1, 1,
  1029. 1, 1, 1, 1, 1, 1, 1, 182,
  1030. 182, 182, 182, 182, 182, 182, 182, 182,
  1031. 182, 182, 182, 182, 182, 182, 182, 182,
  1032. 182, 182, 182, 182, 182, 182, 182, 182,
  1033. 182, 182, 182, 182, 182, 183, 184, 184,
  1034. 184, 184, 184, 184, 184, 184, 184, 184,
  1035. 184, 184, 185, 184, 184, 186, 187, 187,
  1036. 187, 188, 1, 94, 94, 94, 94, 94,
  1037. 94, 94, 94, 94, 94, 94, 94, 94,
  1038. 94, 94, 94, 94, 94, 94, 94, 94,
  1039. 94, 94, 94, 94, 94, 94, 94, 94,
  1040. 94, 94, 94, 94, 94, 94, 94, 94,
  1041. 94, 94, 94, 94, 94, 94, 94, 94,
  1042. 94, 94, 94, 94, 94, 94, 94, 94,
  1043. 94, 94, 94, 94, 94, 94, 94, 94,
  1044. 94, 94, 94, 1, 182, 182, 182, 182,
  1045. 182, 182, 182, 182, 182, 182, 182, 182,
  1046. 182, 182, 182, 182, 182, 182, 182, 182,
  1047. 182, 182, 182, 182, 182, 182, 182, 182,
  1048. 182, 182, 182, 182, 1, 182, 182, 182,
  1049. 182, 182, 182, 182, 182, 182, 182, 182,
  1050. 182, 182, 182, 182, 182, 182, 182, 182,
  1051. 182, 182, 182, 182, 182, 182, 182, 182,
  1052. 182, 182, 182, 182, 182, 182, 182, 182,
  1053. 182, 182, 182, 182, 182, 182, 182, 182,
  1054. 182, 182, 182, 182, 182, 182, 182, 182,
  1055. 182, 182, 182, 182, 182, 182, 182, 182,
  1056. 182, 182, 182, 182, 182, 1, 182, 182,
  1057. 182, 182, 182, 182, 182, 182, 182, 182,
  1058. 182, 182, 182, 182, 182, 182, 182, 182,
  1059. 182, 182, 182, 182, 182, 182, 182, 182,
  1060. 182, 182, 182, 182, 182, 182, 1, 184,
  1061. 184, 184, 184, 184, 184, 184, 184, 184,
  1062. 184, 184, 184, 184, 184, 184, 184, 184,
  1063. 184, 184, 184, 184, 184, 184, 184, 184,
  1064. 184, 184, 184, 184, 184, 184, 184, 184,
  1065. 184, 184, 184, 184, 184, 184, 184, 184,
  1066. 184, 184, 184, 184, 184, 184, 184, 1,
  1067. 184, 184, 184, 184, 184, 184, 184, 184,
  1068. 184, 184, 184, 184, 184, 184, 184, 184,
  1069. 184, 184, 184, 184, 184, 184, 184, 184,
  1070. 184, 184, 184, 184, 184, 184, 184, 184,
  1071. 184, 184, 184, 184, 184, 184, 184, 184,
  1072. 184, 184, 184, 184, 184, 184, 184, 184,
  1073. 184, 184, 184, 184, 184, 184, 184, 184,
  1074. 184, 184, 184, 184, 184, 184, 184, 184,
  1075. 1, 184, 184, 184, 184, 184, 184, 184,
  1076. 184, 184, 184, 184, 184, 184, 184, 184,
  1077. 184, 1, 103, 1, 1, 1, 104, 1,
  1078. 1, 1, 1, 1, 1, 1, 1, 1,
  1079. 1, 1, 1, 1, 1, 1, 1, 1,
  1080. 1, 103, 190, 91, 190, 190, 190, 190,
  1081. 190, 105, 1, 190, 190, 1, 190, 191,
  1082. 190, 190, 190, 190, 190, 190, 190, 190,
  1083. 190, 190, 190, 1, 1, 1, 190, 107,
  1084. 190, 79, 190, 190, 190, 190, 190, 190,
  1085. 190, 190, 190, 190, 190, 190, 190, 190,
  1086. 190, 190, 190, 190, 190, 190, 190, 190,
  1087. 190, 190, 190, 190, 1, 1, 1, 190,
  1088. 190, 190, 190, 190, 190, 190, 190, 190,
  1089. 190, 190, 190, 190, 190, 190, 190, 190,
  1090. 190, 190, 190, 190, 190, 190, 190, 190,
  1091. 190, 190, 190, 190, 190, 190, 190, 190,
  1092. 1, 1, 1, 1, 1, 1, 1, 1,
  1093. 1, 1, 1, 1, 1, 1, 1, 1,
  1094. 1, 1, 1, 1, 1, 1, 1, 1,
  1095. 1, 1, 1, 1, 1, 1, 1, 1,
  1096. 1, 1, 1, 1, 1, 1, 1, 1,
  1097. 1, 1, 1, 1, 1, 1, 1, 1,
  1098. 1, 1, 1, 1, 1, 1, 1, 1,
  1099. 1, 1, 1, 1, 1, 1, 1, 1,
  1100. 1, 1, 1, 95, 95, 95, 95, 95,
  1101. 95, 95, 95, 95, 95, 95, 95, 95,
  1102. 95, 95, 95, 95, 95, 95, 95, 95,
  1103. 95, 95, 95, 95, 95, 95, 95, 95,
  1104. 95, 96, 97, 97, 97, 97, 97, 97,
  1105. 97, 97, 97, 97, 97, 97, 98, 97,
  1106. 97, 99, 100, 100, 100, 101, 1, 108,
  1107. 1, 1, 1, 115, 1, 1, 1, 1,
  1108. 1, 1, 1, 1, 1, 1, 1, 1,
  1109. 1, 1, 1, 1, 1, 1, 108, 190,
  1110. 91, 190, 190, 190, 190, 190, 117, 1,
  1111. 190, 190, 1, 190, 93, 190, 190, 190,
  1112. 190, 190, 190, 190, 190, 190, 190, 190,
  1113. 1, 1, 1, 190, 192, 190, 79, 190,
  1114. 190, 190, 190, 190, 190, 190, 190, 190,
  1115. 190, 190, 190, 190, 190, 190, 190, 190,
  1116. 190, 190, 190, 190, 190, 190, 190, 190,
  1117. 190, 1, 1, 1, 190, 190, 190, 190,
  1118. 190, 190, 190, 190, 190, 190, 190, 190,
  1119. 190, 190, 190, 190, 190, 190, 190, 190,
  1120. 190, 190, 190, 190, 190, 190, 190, 190,
  1121. 190, 190, 190, 190, 190, 1, 1, 1,
  1122. 1, 1, 1, 1, 1, 1, 1, 1,
  1123. 1, 1, 1, 1, 1, 1, 1, 1,
  1124. 1, 1, 1, 1, 1, 1, 1, 1,
  1125. 1, 1, 1, 1, 1, 1, 1, 1,
  1126. 1, 1, 1, 1, 1, 1, 1, 1,
  1127. 1, 1, 1, 1, 1, 1, 1, 1,
  1128. 1, 1, 1, 1, 1, 1, 1, 1,
  1129. 1, 1, 1, 1, 1, 1, 1, 1,
  1130. 95, 95, 95, 95, 95, 95, 95, 95,
  1131. 95, 95, 95, 95, 95, 95, 95, 95,
  1132. 95, 95, 95, 95, 95, 95, 95, 95,
  1133. 95, 95, 95, 95, 95, 95, 96, 97,
  1134. 97, 97, 97, 97, 97, 97, 97, 97,
  1135. 97, 97, 97, 98, 97, 97, 99, 100,
  1136. 100, 100, 101, 1, 79, 1, 79, 79,
  1137. 79, 79, 79, 1, 1, 79, 79, 1,
  1138. 79, 193, 79, 79, 79, 79, 79, 79,
  1139. 79, 79, 79, 79, 79, 1, 1, 1,
  1140. 79, 192, 79, 79, 79, 79, 79, 79,
  1141. 79, 79, 79, 79, 79, 79, 79, 79,
  1142. 79, 79, 79, 79, 79, 79, 79, 79,
  1143. 79, 79, 79, 79, 79, 79, 1, 1,
  1144. 1, 79, 79, 79, 79, 79, 79, 79,
  1145. 79, 79, 79, 79, 79, 79, 79, 79,
  1146. 79, 79, 79, 79, 79, 79, 79, 79,
  1147. 79, 79, 79, 79, 79, 79, 79, 79,
  1148. 79, 79, 1, 79, 1, 79, 79, 79,
  1149. 79, 79, 1, 1, 79, 79, 1, 79,
  1150. 1, 79, 79, 79, 79, 79, 79, 79,
  1151. 79, 79, 79, 79, 1, 1, 1, 79,
  1152. 192, 79, 79, 79, 79, 79, 79, 79,
  1153. 79, 79, 79, 79, 79, 79, 79, 79,
  1154. 79, 79, 79, 79, 79, 79, 79, 79,
  1155. 79, 79, 79, 79, 79, 1, 1, 1,
  1156. 79, 79, 79, 79, 79, 79, 79, 79,
  1157. 79, 79, 79, 79, 79, 79, 79, 79,
  1158. 79, 79, 79, 79, 79, 79, 79, 79,
  1159. 79, 79, 79, 79, 79, 79, 79, 79,
  1160. 79, 1, 53, 53, 53, 53, 53, 53,
  1161. 53, 53, 53, 53, 53, 53, 53, 53,
  1162. 53, 53, 53, 53, 53, 53, 53, 53,
  1163. 53, 53, 53, 53, 53, 53, 53, 53,
  1164. 53, 53, 53, 53, 53, 53, 53, 53,
  1165. 53, 53, 53, 53, 53, 53, 53, 53,
  1166. 53, 53, 53, 53, 53, 53, 53, 53,
  1167. 53, 53, 53, 53, 53, 53, 53, 53,
  1168. 53, 53, 1, 56, 56, 56, 56, 56,
  1169. 56, 56, 56, 56, 56, 56, 56, 56,
  1170. 56, 56, 56, 56, 56, 56, 56, 56,
  1171. 56, 56, 56, 56, 56, 56, 56, 56,
  1172. 56, 56, 56, 1, 56, 56, 56, 56,
  1173. 56, 56, 56, 56, 56, 56, 56, 56,
  1174. 56, 56, 56, 56, 56, 56, 56, 56,
  1175. 56, 56, 56, 56, 56, 56, 56, 56,
  1176. 56, 56, 56, 56, 56, 56, 56, 56,
  1177. 56, 56, 56, 56, 56, 56, 56, 56,
  1178. 56, 56, 56, 56, 56, 56, 56, 56,
  1179. 56, 56, 56, 56, 56, 56, 56, 56,
  1180. 56, 56, 56, 56, 1, 56, 56, 56,
  1181. 56, 56, 56, 56, 56, 56, 56, 56,
  1182. 56, 56, 56, 56, 56, 56, 56, 56,
  1183. 56, 56, 56, 56, 56, 56, 56, 56,
  1184. 56, 56, 56, 56, 56, 1, 58, 58,
  1185. 58, 58, 58, 58, 58, 58, 58, 58,
  1186. 58, 58, 58, 58, 58, 58, 58, 58,
  1187. 58, 58, 58, 58, 58, 58, 58, 58,
  1188. 58, 58, 58, 58, 58, 58, 58, 58,
  1189. 58, 58, 58, 58, 58, 58, 58, 58,
  1190. 58, 58, 58, 58, 58, 58, 1, 58,
  1191. 58, 58, 58, 58, 58, 58, 58, 58,
  1192. 58, 58, 58, 58, 58, 58, 58, 58,
  1193. 58, 58, 58, 58, 58, 58, 58, 58,
  1194. 58, 58, 58, 58, 58, 58, 58, 58,
  1195. 58, 58, 58, 58, 58, 58, 58, 58,
  1196. 58, 58, 58, 58, 58, 58, 58, 58,
  1197. 58, 58, 58, 58, 58, 58, 58, 58,
  1198. 58, 58, 58, 58, 58, 58, 58, 1,
  1199. 58, 58, 58, 58, 58, 58, 58, 58,
  1200. 58, 58, 58, 58, 58, 58, 58, 58,
  1201. 1, 194, 194, 194, 194, 194, 194, 194,
  1202. 194, 194, 1, 194, 194, 195, 194, 194,
  1203. 194, 194, 194, 194, 194, 194, 194, 194,
  1204. 194, 194, 194, 194, 194, 194, 194, 194,
  1205. 194, 194, 196, 194, 194, 194, 194, 194,
  1206. 194, 194, 194, 194, 194, 194, 194, 194,
  1207. 194, 194, 194, 194, 194, 194, 194, 194,
  1208. 194, 194, 194, 194, 194, 194, 194, 194,
  1209. 194, 194, 194, 194, 194, 194, 194, 194,
  1210. 194, 194, 194, 194, 194, 194, 194, 194,
  1211. 194, 194, 194, 194, 194, 194, 194, 194,
  1212. 194, 194, 194, 194, 197, 194, 194, 194,
  1213. 194, 194, 194, 194, 194, 194, 194, 194,
  1214. 194, 194, 194, 194, 194, 194, 194, 194,
  1215. 194, 194, 194, 194, 194, 194, 194, 194,
  1216. 194, 194, 194, 194, 194, 194, 194, 194,
  1217. 1, 1, 1, 1, 1, 1, 1, 1,
  1218. 1, 1, 1, 1, 1, 1, 1, 1,
  1219. 1, 1, 1, 1, 1, 1, 1, 1,
  1220. 1, 1, 1, 1, 1, 1, 1, 1,
  1221. 1, 1, 1, 1, 1, 1, 1, 1,
  1222. 1, 1, 1, 1, 1, 1, 1, 1,
  1223. 1, 1, 1, 1, 1, 1, 1, 1,
  1224. 1, 1, 1, 1, 1, 1, 1, 1,
  1225. 1, 1, 198, 198, 198, 198, 198, 198,
  1226. 198, 198, 198, 198, 198, 198, 198, 198,
  1227. 198, 198, 198, 198, 198, 198, 198, 198,
  1228. 198, 198, 198, 198, 198, 198, 198, 198,
  1229. 199, 200, 200, 200, 200, 200, 200, 200,
  1230. 200, 200, 200, 200, 200, 201, 200, 200,
  1231. 202, 203, 203, 203, 204, 1, 205, 205,
  1232. 205, 205, 205, 205, 205, 205, 205, 1,
  1233. 205, 205, 206, 205, 205, 205, 205, 205,
  1234. 205, 205, 205, 205, 205, 205, 205, 205,
  1235. 205, 205, 205, 205, 205, 205, 205, 207,
  1236. 205, 205, 205, 205, 205, 205, 205, 205,
  1237. 205, 205, 205, 205, 205, 205, 205, 205,
  1238. 205, 205, 205, 205, 205, 205, 205, 205,
  1239. 205, 205, 205, 205, 205, 205, 205, 205,
  1240. 205, 205, 205, 205, 205, 205, 205, 205,
  1241. 205, 205, 205, 205, 205, 205, 205, 205,
  1242. 205, 205, 205, 205, 205, 205, 205, 205,
  1243. 205, 208, 205, 205, 205, 205, 205, 205,
  1244. 205, 205, 205, 205, 205, 205, 205, 205,
  1245. 205, 205, 205, 205, 205, 205, 205, 205,
  1246. 205, 205, 205, 205, 205, 205, 205, 205,
  1247. 205, 205, 205, 205, 205, 1, 1, 1,
  1248. 1, 1, 1, 1, 1, 1, 1, 1,
  1249. 1, 1, 1, 1, 1, 1, 1, 1,
  1250. 1, 1, 1, 1, 1, 1, 1, 1,
  1251. 1, 1, 1, 1, 1, 1, 1, 1,
  1252. 1, 1, 1, 1, 1, 1, 1, 1,
  1253. 1, 1, 1, 1, 1, 1, 1, 1,
  1254. 1, 1, 1, 1, 1, 1, 1, 1,
  1255. 1, 1, 1, 1, 1, 1, 1, 209,
  1256. 209, 209, 209, 209, 209, 209, 209, 209,
  1257. 209, 209, 209, 209, 209, 209, 209, 209,
  1258. 209, 209, 209, 209, 209, 209, 209, 209,
  1259. 209, 209, 209, 209, 209, 210, 211, 211,
  1260. 211, 211, 211, 211, 211, 211, 211, 211,
  1261. 211, 211, 212, 211, 211, 213, 214, 214,
  1262. 214, 215, 1, 216, 1, 205, 1, 1,
  1263. 1, 1, 1, 1, 1, 1, 1, 1,
  1264. 1, 1, 1, 1, 1, 1, 1, 1,
  1265. 1, 1, 1, 1, 205, 1, 205, 205,
  1266. 205, 205, 205, 205, 205, 205, 205, 205,
  1267. 205, 205, 205, 205, 205, 205, 205, 205,
  1268. 205, 205, 205, 205, 205, 205, 205, 205,
  1269. 205, 205, 205, 205, 205, 205, 205, 205,
  1270. 205, 205, 205, 205, 205, 205, 205, 205,
  1271. 205, 205, 205, 205, 205, 205, 205, 205,
  1272. 205, 205, 205, 205, 205, 205, 205, 205,
  1273. 205, 205, 205, 205, 205, 205, 205, 205,
  1274. 205, 205, 205, 205, 205, 205, 205, 205,
  1275. 205, 205, 205, 205, 205, 205, 205, 205,
  1276. 205, 205, 205, 205, 205, 205, 205, 205,
  1277. 205, 205, 205, 205, 205, 205, 205, 205,
  1278. 205, 205, 205, 205, 205, 205, 205, 205,
  1279. 205, 205, 205, 205, 205, 205, 205, 205,
  1280. 205, 205, 205, 205, 205, 205, 205, 205,
  1281. 205, 205, 205, 205, 205, 205, 1, 1,
  1282. 1, 1, 1, 1, 1, 1, 1, 1,
  1283. 1, 1, 1, 1, 1, 1, 1, 1,
  1284. 1, 1, 1, 1, 1, 1, 1, 1,
  1285. 1, 1, 1, 1, 1, 1, 1, 1,
  1286. 1, 1, 1, 1, 1, 1, 1, 1,
  1287. 1, 1, 1, 1, 1, 1, 1, 1,
  1288. 1, 1, 1, 1, 1, 1, 1, 1,
  1289. 1, 1, 1, 1, 1, 1, 1, 1,
  1290. 209, 209, 209, 209, 209, 209, 209, 209,
  1291. 209, 209, 209, 209, 209, 209, 209, 209,
  1292. 209, 209, 209, 209, 209, 209, 209, 209,
  1293. 209, 209, 209, 209, 209, 209, 210, 211,
  1294. 211, 211, 211, 211, 211, 211, 211, 211,
  1295. 211, 211, 211, 212, 211, 211, 213, 214,
  1296. 214, 214, 215, 1, 205, 205, 205, 205,
  1297. 205, 205, 205, 205, 205, 205, 205, 205,
  1298. 205, 205, 205, 205, 205, 205, 205, 205,
  1299. 205, 205, 205, 205, 205, 205, 205, 205,
  1300. 205, 205, 205, 205, 205, 205, 205, 205,
  1301. 205, 205, 205, 205, 205, 205, 205, 205,
  1302. 205, 205, 205, 205, 205, 205, 205, 205,
  1303. 205, 205, 205, 205, 205, 205, 205, 205,
  1304. 205, 205, 205, 205, 1, 209, 209, 209,
  1305. 209, 209, 209, 209, 209, 209, 209, 209,
  1306. 209, 209, 209, 209, 209, 209, 209, 209,
  1307. 209, 209, 209, 209, 209, 209, 209, 209,
  1308. 209, 209, 209, 209, 209, 1, 209, 209,
  1309. 209, 209, 209, 209, 209, 209, 209, 209,
  1310. 209, 209, 209, 209, 209, 209, 209, 209,
  1311. 209, 209, 209, 209, 209, 209, 209, 209,
  1312. 209, 209, 209, 209, 209, 209, 209, 209,
  1313. 209, 209, 209, 209, 209, 209, 209, 209,
  1314. 209, 209, 209, 209, 209, 209, 209, 209,
  1315. 209, 209, 209, 209, 209, 209, 209, 209,
  1316. 209, 209, 209, 209, 209, 209, 1, 209,
  1317. 209, 209, 209, 209, 209, 209, 209, 209,
  1318. 209, 209, 209, 209, 209, 209, 209, 209,
  1319. 209, 209, 209, 209, 209, 209, 209, 209,
  1320. 209, 209, 209, 209, 209, 209, 209, 1,
  1321. 211, 211, 211, 211, 211, 211, 211, 211,
  1322. 211, 211, 211, 211, 211, 211, 211, 211,
  1323. 211, 211, 211, 211, 211, 211, 211, 211,
  1324. 211, 211, 211, 211, 211, 211, 211, 211,
  1325. 211, 211, 211, 211, 211, 211, 211, 211,
  1326. 211, 211, 211, 211, 211, 211, 211, 211,
  1327. 1, 211, 211, 211, 211, 211, 211, 211,
  1328. 211, 211, 211, 211, 211, 211, 211, 211,
  1329. 211, 211, 211, 211, 211, 211, 211, 211,
  1330. 211, 211, 211, 211, 211, 211, 211, 211,
  1331. 211, 211, 211, 211, 211, 211, 211, 211,
  1332. 211, 211, 211, 211, 211, 211, 211, 211,
  1333. 211, 211, 211, 211, 211, 211, 211, 211,
  1334. 211, 211, 211, 211, 211, 211, 211, 211,
  1335. 211, 1, 211, 211, 211, 211, 211, 211,
  1336. 211, 211, 211, 211, 211, 211, 211, 211,
  1337. 211, 211, 1, 50, 1, 1, 1, 217,
  1338. 1, 1, 1, 1, 1, 1, 1, 1,
  1339. 1, 1, 1, 1, 1, 1, 1, 1,
  1340. 1, 1, 50, 218, 219, 218, 218, 218,
  1341. 218, 218, 220, 1, 218, 218, 1, 218,
  1342. 1, 218, 218, 218, 218, 218, 218, 218,
  1343. 218, 218, 218, 218, 1, 1, 1, 218,
  1344. 1, 218, 1, 218, 218, 218, 218, 218,
  1345. 218, 218, 218, 218, 218, 218, 218, 218,
  1346. 218, 218, 218, 218, 218, 218, 218, 218,
  1347. 218, 218, 218, 218, 218, 1, 1, 1,
  1348. 218, 218, 218, 218, 218, 218, 218, 218,
  1349. 218, 218, 218, 218, 218, 218, 218, 218,
  1350. 218, 218, 218, 218, 218, 218, 218, 218,
  1351. 218, 218, 218, 218, 218, 218, 218, 218,
  1352. 218, 1, 1, 1, 1, 1, 1, 1,
  1353. 1, 1, 1, 1, 1, 1, 1, 1,
  1354. 1, 1, 1, 1, 1, 1, 1, 1,
  1355. 1, 1, 1, 1, 1, 1, 1, 1,
  1356. 1, 1, 1, 1, 1, 1, 1, 1,
  1357. 1, 1, 1, 1, 1, 1, 1, 1,
  1358. 1, 1, 1, 1, 1, 1, 1, 1,
  1359. 1, 1, 1, 1, 1, 1, 1, 1,
  1360. 1, 1, 1, 1, 221, 221, 221, 221,
  1361. 221, 221, 221, 221, 221, 221, 221, 221,
  1362. 221, 221, 221, 221, 221, 221, 221, 221,
  1363. 221, 221, 221, 221, 221, 221, 221, 221,
  1364. 221, 221, 222, 223, 223, 223, 223, 223,
  1365. 223, 223, 223, 223, 223, 223, 223, 224,
  1366. 223, 223, 225, 226, 226, 226, 227, 1,
  1367. 228, 228, 228, 228, 228, 228, 228, 228,
  1368. 30, 1, 228, 228, 229, 228, 228, 228,
  1369. 228, 228, 228, 228, 228, 228, 228, 228,
  1370. 228, 228, 228, 228, 228, 228, 228, 30,
  1371. 228, 1, 228, 228, 228, 228, 228, 228,
  1372. 228, 228, 228, 228, 228, 228, 228, 228,
  1373. 228, 228, 228, 228, 228, 228, 228, 228,
  1374. 228, 228, 228, 228, 228, 228, 228, 228,
  1375. 228, 228, 228, 228, 228, 228, 228, 228,
  1376. 228, 228, 228, 228, 228, 228, 228, 228,
  1377. 228, 228, 228, 228, 228, 228, 228, 228,
  1378. 228, 228, 228, 230, 228, 228, 228, 228,
  1379. 228, 228, 228, 228, 228, 228, 228, 228,
  1380. 228, 228, 228, 228, 228, 228, 228, 228,
  1381. 228, 228, 228, 228, 228, 228, 228, 228,
  1382. 228, 228, 228, 228, 228, 228, 228, 1,
  1383. 1, 1, 1, 1, 1, 1, 1, 1,
  1384. 1, 1, 1, 1, 1, 1, 1, 1,
  1385. 1, 1, 1, 1, 1, 1, 1, 1,
  1386. 1, 1, 1, 1, 1, 1, 1, 1,
  1387. 1, 1, 1, 1, 1, 1, 1, 1,
  1388. 1, 1, 1, 1, 1, 1, 1, 1,
  1389. 1, 1, 1, 1, 1, 1, 1, 1,
  1390. 1, 1, 1, 1, 1, 1, 1, 1,
  1391. 1, 231, 231, 231, 231, 231, 231, 231,
  1392. 231, 231, 231, 231, 231, 231, 231, 231,
  1393. 231, 231, 231, 231, 231, 231, 231, 231,
  1394. 231, 231, 231, 231, 231, 231, 231, 232,
  1395. 233, 233, 233, 233, 233, 233, 233, 233,
  1396. 233, 233, 233, 233, 234, 233, 233, 235,
  1397. 236, 236, 236, 237, 1, 228, 228, 228,
  1398. 228, 228, 228, 228, 228, 228, 1, 228,
  1399. 228, 238, 228, 228, 228, 228, 228, 228,
  1400. 228, 228, 228, 228, 228, 228, 228, 228,
  1401. 228, 228, 228, 228, 228, 228, 239, 228,
  1402. 228, 228, 228, 228, 228, 228, 228, 228,
  1403. 228, 228, 228, 228, 228, 228, 228, 228,
  1404. 228, 228, 228, 228, 228, 228, 228, 228,
  1405. 228, 228, 228, 228, 228, 228, 228, 228,
  1406. 228, 228, 228, 228, 228, 228, 228, 228,
  1407. 228, 228, 228, 228, 228, 228, 228, 228,
  1408. 228, 228, 228, 228, 228, 228, 228, 228,
  1409. 230, 228, 228, 228, 228, 228, 228, 228,
  1410. 228, 228, 228, 228, 228, 228, 228, 228,
  1411. 228, 228, 228, 228, 228, 228, 228, 228,
  1412. 228, 228, 228, 228, 228, 228, 228, 228,
  1413. 228, 228, 228, 228, 1, 1, 1, 1,
  1414. 1, 1, 1, 1, 1, 1, 1, 1,
  1415. 1, 1, 1, 1, 1, 1, 1, 1,
  1416. 1, 1, 1, 1, 1, 1, 1, 1,
  1417. 1, 1, 1, 1, 1, 1, 1, 1,
  1418. 1, 1, 1, 1, 1, 1, 1, 1,
  1419. 1, 1, 1, 1, 1, 1, 1, 1,
  1420. 1, 1, 1, 1, 1, 1, 1, 1,
  1421. 1, 1, 1, 1, 1, 1, 231, 231,
  1422. 231, 231, 231, 231, 231, 231, 231, 231,
  1423. 231, 231, 231, 231, 231, 231, 231, 231,
  1424. 231, 231, 231, 231, 231, 231, 231, 231,
  1425. 231, 231, 231, 231, 232, 233, 233, 233,
  1426. 233, 233, 233, 233, 233, 233, 233, 233,
  1427. 233, 234, 233, 233, 235, 236, 236, 236,
  1428. 237, 1, 240, 1, 228, 1, 1, 1,
  1429. 1, 1, 1, 1, 1, 1, 1, 1,
  1430. 1, 1, 1, 1, 1, 1, 1, 1,
  1431. 1, 1, 1, 228, 1, 241, 1, 1,
  1432. 1, 242, 1, 1, 1, 1, 1, 1,
  1433. 1, 1, 1, 1, 1, 1, 1, 1,
  1434. 1, 1, 1, 1, 241, 239, 30, 239,
  1435. 239, 239, 239, 239, 243, 1, 239, 239,
  1436. 1, 239, 239, 239, 239, 239, 239, 239,
  1437. 239, 239, 239, 239, 239, 239, 1, 1,
  1438. 1, 239, 1, 239, 33, 239, 239, 239,
  1439. 239, 239, 239, 239, 239, 239, 239, 239,
  1440. 239, 239, 239, 239, 239, 239, 239, 239,
  1441. 239, 239, 239, 239, 239, 239, 239, 1,
  1442. 1, 1, 239, 239, 239, 239, 239, 239,
  1443. 239, 239, 239, 239, 239, 239, 239, 239,
  1444. 239, 239, 239, 239, 239, 239, 239, 239,
  1445. 239, 239, 239, 239, 239, 239, 239, 239,
  1446. 239, 239, 239, 1, 1, 1, 1, 1,
  1447. 1, 1, 1, 1, 1, 1, 1, 1,
  1448. 1, 1, 1, 1, 1, 1, 1, 1,
  1449. 1, 1, 1, 1, 1, 1, 1, 1,
  1450. 1, 1, 1, 1, 1, 1, 1, 1,
  1451. 1, 1, 1, 1, 1, 1, 1, 1,
  1452. 1, 1, 1, 1, 1, 1, 1, 1,
  1453. 1, 1, 1, 1, 1, 1, 1, 1,
  1454. 1, 1, 1, 1, 1, 1, 244, 244,
  1455. 244, 244, 244, 244, 244, 244, 244, 244,
  1456. 244, 244, 244, 244, 244, 244, 244, 244,
  1457. 244, 244, 244, 244, 244, 244, 244, 244,
  1458. 244, 244, 244, 244, 245, 246, 246, 246,
  1459. 246, 246, 246, 246, 246, 246, 246, 246,
  1460. 246, 247, 246, 246, 248, 249, 249, 249,
  1461. 250, 1, 251, 1, 1, 1, 252, 1,
  1462. 1, 1, 1, 1, 1, 1, 1, 1,
  1463. 1, 1, 1, 1, 1, 1, 1, 1,
  1464. 1, 251, 1, 1, 1, 1, 1, 1,
  1465. 1, 253, 1, 1, 1, 1, 1, 1,
  1466. 1, 1, 1, 1, 1, 1, 1, 1,
  1467. 1, 1, 1, 1, 1, 1, 1, 1,
  1468. 1, 45, 1, 254, 1, 251, 1, 1,
  1469. 1, 1, 1, 1, 1, 1, 1, 1,
  1470. 1, 1, 1, 1, 1, 1, 1, 1,
  1471. 1, 1, 1, 1, 251, 1, 255, 1,
  1472. 1, 1, 256, 1, 1, 1, 1, 1,
  1473. 1, 1, 1, 1, 1, 1, 1, 1,
  1474. 1, 1, 1, 1, 1, 255, 1, 1,
  1475. 1, 1, 1, 1, 1, 257, 1, 1,
  1476. 1, 1, 1, 1, 1, 1, 1, 1,
  1477. 1, 1, 1, 1, 1, 1, 1, 1,
  1478. 1, 1, 1, 1, 1, 51, 1, 239,
  1479. 239, 239, 239, 239, 239, 239, 239, 239,
  1480. 239, 239, 239, 239, 239, 239, 239, 239,
  1481. 239, 239, 239, 239, 239, 239, 239, 239,
  1482. 239, 239, 239, 239, 239, 239, 239, 239,
  1483. 239, 239, 239, 239, 239, 239, 239, 239,
  1484. 239, 239, 239, 239, 239, 239, 239, 239,
  1485. 239, 239, 239, 239, 239, 239, 239, 239,
  1486. 239, 239, 239, 239, 239, 239, 239, 1,
  1487. 244, 244, 244, 244, 244, 244, 244, 244,
  1488. 244, 244, 244, 244, 244, 244, 244, 244,
  1489. 244, 244, 244, 244, 244, 244, 244, 244,
  1490. 244, 244, 244, 244, 244, 244, 244, 244,
  1491. 1, 244, 244, 244, 244, 244, 244, 244,
  1492. 244, 244, 244, 244, 244, 244, 244, 244,
  1493. 244, 244, 244, 244, 244, 244, 244, 244,
  1494. 244, 244, 244, 244, 244, 244, 244, 244,
  1495. 244, 244, 244, 244, 244, 244, 244, 244,
  1496. 244, 244, 244, 244, 244, 244, 244, 244,
  1497. 244, 244, 244, 244, 244, 244, 244, 244,
  1498. 244, 244, 244, 244, 244, 244, 244, 244,
  1499. 244, 1, 244, 244, 244, 244, 244, 244,
  1500. 244, 244, 244, 244, 244, 244, 244, 244,
  1501. 244, 244, 244, 244, 244, 244, 244, 244,
  1502. 244, 244, 244, 244, 244, 244, 244, 244,
  1503. 244, 244, 1, 246, 246, 246, 246, 246,
  1504. 246, 246, 246, 246, 246, 246, 246, 246,
  1505. 246, 246, 246, 246, 246, 246, 246, 246,
  1506. 246, 246, 246, 246, 246, 246, 246, 246,
  1507. 246, 246, 246, 246, 246, 246, 246, 246,
  1508. 246, 246, 246, 246, 246, 246, 246, 246,
  1509. 246, 246, 246, 1, 246, 246, 246, 246,
  1510. 246, 246, 246, 246, 246, 246, 246, 246,
  1511. 246, 246, 246, 246, 246, 246, 246, 246,
  1512. 246, 246, 246, 246, 246, 246, 246, 246,
  1513. 246, 246, 246, 246, 246, 246, 246, 246,
  1514. 246, 246, 246, 246, 246, 246, 246, 246,
  1515. 246, 246, 246, 246, 246, 246, 246, 246,
  1516. 246, 246, 246, 246, 246, 246, 246, 246,
  1517. 246, 246, 246, 246, 1, 246, 246, 246,
  1518. 246, 246, 246, 246, 246, 246, 246, 246,
  1519. 246, 246, 246, 246, 246, 1, 228, 228,
  1520. 228, 228, 228, 228, 228, 228, 228, 228,
  1521. 228, 228, 228, 228, 228, 228, 228, 228,
  1522. 228, 228, 228, 228, 228, 228, 228, 228,
  1523. 228, 228, 228, 228, 228, 228, 228, 228,
  1524. 228, 228, 228, 228, 228, 228, 228, 228,
  1525. 228, 228, 228, 228, 228, 228, 228, 228,
  1526. 228, 228, 228, 228, 228, 228, 228, 228,
  1527. 228, 228, 228, 228, 228, 228, 228, 228,
  1528. 228, 228, 228, 228, 228, 228, 228, 228,
  1529. 228, 228, 228, 228, 228, 228, 228, 228,
  1530. 228, 228, 228, 228, 228, 228, 228, 228,
  1531. 228, 228, 228, 228, 228, 228, 228, 228,
  1532. 228, 228, 228, 228, 228, 228, 228, 228,
  1533. 228, 228, 228, 228, 228, 228, 228, 228,
  1534. 228, 228, 228, 228, 228, 228, 228, 228,
  1535. 228, 228, 228, 228, 228, 228, 1, 1,
  1536. 1, 1, 1, 1, 1, 1, 1, 1,
  1537. 1, 1, 1, 1, 1, 1, 1, 1,
  1538. 1, 1, 1, 1, 1, 1, 1, 1,
  1539. 1, 1, 1, 1, 1, 1, 1, 1,
  1540. 1, 1, 1, 1, 1, 1, 1, 1,
  1541. 1, 1, 1, 1, 1, 1, 1, 1,
  1542. 1, 1, 1, 1, 1, 1, 1, 1,
  1543. 1, 1, 1, 1, 1, 1, 1, 1,
  1544. 231, 231, 231, 231, 231, 231, 231, 231,
  1545. 231, 231, 231, 231, 231, 231, 231, 231,
  1546. 231, 231, 231, 231, 231, 231, 231, 231,
  1547. 231, 231, 231, 231, 231, 231, 232, 233,
  1548. 233, 233, 233, 233, 233, 233, 233, 233,
  1549. 233, 233, 233, 234, 233, 233, 235, 236,
  1550. 236, 236, 237, 1, 228, 228, 228, 228,
  1551. 228, 228, 228, 228, 228, 228, 228, 228,
  1552. 228, 228, 228, 228, 228, 228, 228, 228,
  1553. 228, 228, 228, 228, 228, 228, 228, 228,
  1554. 228, 228, 228, 228, 228, 228, 228, 228,
  1555. 228, 228, 228, 228, 228, 228, 228, 228,
  1556. 228, 228, 228, 228, 228, 228, 228, 228,
  1557. 228, 228, 228, 228, 228, 228, 228, 228,
  1558. 228, 228, 228, 228, 1, 231, 231, 231,
  1559. 231, 231, 231, 231, 231, 231, 231, 231,
  1560. 231, 231, 231, 231, 231, 231, 231, 231,
  1561. 231, 231, 231, 231, 231, 231, 231, 231,
  1562. 231, 231, 231, 231, 231, 1, 231, 231,
  1563. 231, 231, 231, 231, 231, 231, 231, 231,
  1564. 231, 231, 231, 231, 231, 231, 231, 231,
  1565. 231, 231, 231, 231, 231, 231, 231, 231,
  1566. 231, 231, 231, 231, 231, 231, 231, 231,
  1567. 231, 231, 231, 231, 231, 231, 231, 231,
  1568. 231, 231, 231, 231, 231, 231, 231, 231,
  1569. 231, 231, 231, 231, 231, 231, 231, 231,
  1570. 231, 231, 231, 231, 231, 231, 1, 231,
  1571. 231, 231, 231, 231, 231, 231, 231, 231,
  1572. 231, 231, 231, 231, 231, 231, 231, 231,
  1573. 231, 231, 231, 231, 231, 231, 231, 231,
  1574. 231, 231, 231, 231, 231, 231, 231, 1,
  1575. 233, 233, 233, 233, 233, 233, 233, 233,
  1576. 233, 233, 233, 233, 233, 233, 233, 233,
  1577. 233, 233, 233, 233, 233, 233, 233, 233,
  1578. 233, 233, 233, 233, 233, 233, 233, 233,
  1579. 233, 233, 233, 233, 233, 233, 233, 233,
  1580. 233, 233, 233, 233, 233, 233, 233, 233,
  1581. 1, 233, 233, 233, 233, 233, 233, 233,
  1582. 233, 233, 233, 233, 233, 233, 233, 233,
  1583. 233, 233, 233, 233, 233, 233, 233, 233,
  1584. 233, 233, 233, 233, 233, 233, 233, 233,
  1585. 233, 233, 233, 233, 233, 233, 233, 233,
  1586. 233, 233, 233, 233, 233, 233, 233, 233,
  1587. 233, 233, 233, 233, 233, 233, 233, 233,
  1588. 233, 233, 233, 233, 233, 233, 233, 233,
  1589. 233, 1, 233, 233, 233, 233, 233, 233,
  1590. 233, 233, 233, 233, 233, 233, 233, 233,
  1591. 233, 233, 1, 258, 1, 30, 1, 1,
  1592. 1, 1, 1, 1, 1, 1, 1, 1,
  1593. 1, 1, 1, 1, 1, 1, 1, 1,
  1594. 1, 1, 1, 1, 30, 1, 259, 1,
  1595. 1, 1, 260, 1, 1, 1, 1, 1,
  1596. 1, 1, 1, 1, 1, 1, 1, 1,
  1597. 1, 1, 1, 1, 1, 259, 29, 261,
  1598. 29, 29, 29, 29, 29, 262, 1, 29,
  1599. 29, 1, 29, 239, 29, 29, 29, 29,
  1600. 29, 29, 29, 29, 29, 29, 29, 1,
  1601. 1, 1, 29, 1, 29, 33, 29, 29,
  1602. 29, 29, 29, 29, 29, 29, 29, 29,
  1603. 29, 29, 29, 29, 29, 29, 29, 29,
  1604. 29, 29, 29, 29, 29, 29, 29, 29,
  1605. 1, 1, 1, 29, 29, 29, 29, 29,
  1606. 29, 29, 29, 29, 29, 29, 29, 29,
  1607. 29, 29, 29, 29, 29, 29, 29, 29,
  1608. 29, 29, 29, 29, 29, 29, 29, 29,
  1609. 29, 29, 29, 29, 1, 1, 1, 1,
  1610. 1, 1, 1, 1, 1, 1, 1, 1,
  1611. 1, 1, 1, 1, 1, 1, 1, 1,
  1612. 1, 1, 1, 1, 1, 1, 1, 1,
  1613. 1, 1, 1, 1, 1, 1, 1, 1,
  1614. 1, 1, 1, 1, 1, 1, 1, 1,
  1615. 1, 1, 1, 1, 1, 1, 1, 1,
  1616. 1, 1, 1, 1, 1, 1, 1, 1,
  1617. 1, 1, 1, 1, 1, 1, 1, 34,
  1618. 34, 34, 34, 34, 34, 34, 34, 34,
  1619. 34, 34, 34, 34, 34, 34, 34, 34,
  1620. 34, 34, 34, 34, 34, 34, 34, 34,
  1621. 34, 34, 34, 34, 34, 35, 36, 36,
  1622. 36, 36, 36, 36, 36, 36, 36, 36,
  1623. 36, 36, 37, 36, 36, 38, 39, 39,
  1624. 39, 40, 1, 263, 1, 1, 1, 264,
  1625. 1, 1, 1, 1, 1, 1, 1, 1,
  1626. 1, 1, 1, 1, 1, 1, 1, 1,
  1627. 1, 1, 263, 53, 54, 53, 53, 53,
  1628. 53, 53, 265, 1, 53, 53, 1, 53,
  1629. 1, 53, 53, 53, 53, 53, 53, 53,
  1630. 53, 53, 53, 53, 1, 1, 1, 53,
  1631. 1, 53, 45, 53, 53, 53, 53, 53,
  1632. 53, 53, 53, 53, 53, 53, 53, 53,
  1633. 53, 53, 53, 53, 53, 53, 53, 53,
  1634. 53, 53, 53, 53, 53, 1, 1, 1,
  1635. 53, 53, 53, 53, 53, 53, 53, 53,
  1636. 53, 53, 53, 53, 53, 53, 53, 53,
  1637. 53, 53, 53, 53, 53, 53, 53, 53,
  1638. 53, 53, 53, 53, 53, 53, 53, 53,
  1639. 53, 1, 1, 1, 1, 1, 1, 1,
  1640. 1, 1, 1, 1, 1, 1, 1, 1,
  1641. 1, 1, 1, 1, 1, 1, 1, 1,
  1642. 1, 1, 1, 1, 1, 1, 1, 1,
  1643. 1, 1, 1, 1, 1, 1, 1, 1,
  1644. 1, 1, 1, 1, 1, 1, 1, 1,
  1645. 1, 1, 1, 1, 1, 1, 1, 1,
  1646. 1, 1, 1, 1, 1, 1, 1, 1,
  1647. 1, 1, 1, 1, 56, 56, 56, 56,
  1648. 56, 56, 56, 56, 56, 56, 56, 56,
  1649. 56, 56, 56, 56, 56, 56, 56, 56,
  1650. 56, 56, 56, 56, 56, 56, 56, 56,
  1651. 56, 56, 57, 58, 58, 58, 58, 58,
  1652. 58, 58, 58, 58, 58, 58, 58, 59,
  1653. 58, 58, 60, 61, 61, 61, 62, 1,
  1654. 266, 1, 263, 1, 1, 1, 1, 1,
  1655. 1, 1, 1, 1, 1, 1, 1, 1,
  1656. 1, 1, 1, 1, 1, 1, 1, 1,
  1657. 1, 263, 1, 267, 1, 1, 1, 268,
  1658. 1, 1, 1, 1, 1, 1, 1, 1,
  1659. 1, 1, 1, 1, 1, 1, 1, 1,
  1660. 1, 1, 267, 218, 219, 218, 218, 218,
  1661. 218, 218, 269, 1, 218, 218, 1, 218,
  1662. 1, 218, 218, 218, 218, 218, 218, 218,
  1663. 218, 218, 218, 218, 1, 1, 1, 218,
  1664. 1, 218, 51, 218, 218, 218, 218, 218,
  1665. 218, 218, 218, 218, 218, 218, 218, 218,
  1666. 218, 218, 218, 218, 218, 218, 218, 218,
  1667. 218, 218, 218, 218, 218, 1, 1, 1,
  1668. 218, 218, 218, 218, 218, 218, 218, 218,
  1669. 218, 218, 218, 218, 218, 218, 218, 218,
  1670. 218, 218, 218, 218, 218, 218, 218, 218,
  1671. 218, 218, 218, 218, 218, 218, 218, 218,
  1672. 218, 1, 1, 1, 1, 1, 1, 1,
  1673. 1, 1, 1, 1, 1, 1, 1, 1,
  1674. 1, 1, 1, 1, 1, 1, 1, 1,
  1675. 1, 1, 1, 1, 1, 1, 1, 1,
  1676. 1, 1, 1, 1, 1, 1, 1, 1,
  1677. 1, 1, 1, 1, 1, 1, 1, 1,
  1678. 1, 1, 1, 1, 1, 1, 1, 1,
  1679. 1, 1, 1, 1, 1, 1, 1, 1,
  1680. 1, 1, 1, 1, 221, 221, 221, 221,
  1681. 221, 221, 221, 221, 221, 221, 221, 221,
  1682. 221, 221, 221, 221, 221, 221, 221, 221,
  1683. 221, 221, 221, 221, 221, 221, 221, 221,
  1684. 221, 221, 222, 223, 223, 223, 223, 223,
  1685. 223, 223, 223, 223, 223, 223, 223, 224,
  1686. 223, 223, 225, 226, 226, 226, 227, 1,
  1687. 270, 270, 270, 270, 270, 270, 270, 270,
  1688. 271, 1, 270, 270, 272, 270, 270, 270,
  1689. 270, 270, 270, 270, 270, 270, 270, 270,
  1690. 270, 270, 270, 270, 270, 270, 270, 271,
  1691. 270, 196, 270, 270, 270, 270, 270, 270,
  1692. 270, 270, 270, 270, 270, 270, 270, 270,
  1693. 270, 270, 270, 270, 270, 270, 270, 270,
  1694. 270, 270, 270, 270, 270, 270, 270, 270,
  1695. 270, 270, 270, 270, 270, 270, 270, 270,
  1696. 270, 270, 270, 270, 270, 270, 270, 270,
  1697. 270, 270, 270, 270, 270, 270, 270, 270,
  1698. 270, 270, 270, 273, 270, 270, 270, 270,
  1699. 270, 270, 270, 270, 270, 270, 270, 270,
  1700. 270, 270, 270, 270, 270, 270, 270, 270,
  1701. 270, 270, 270, 270, 270, 270, 270, 270,
  1702. 270, 270, 270, 270, 270, 270, 270, 1,
  1703. 1, 1, 1, 1, 1, 1, 1, 1,
  1704. 1, 1, 1, 1, 1, 1, 1, 1,
  1705. 1, 1, 1, 1, 1, 1, 1, 1,
  1706. 1, 1, 1, 1, 1, 1, 1, 1,
  1707. 1, 1, 1, 1, 1, 1, 1, 1,
  1708. 1, 1, 1, 1, 1, 1, 1, 1,
  1709. 1, 1, 1, 1, 1, 1, 1, 1,
  1710. 1, 1, 1, 1, 1, 1, 1, 1,
  1711. 1, 274, 274, 274, 274, 274, 274, 274,
  1712. 274, 274, 274, 274, 274, 274, 274, 274,
  1713. 274, 274, 274, 274, 274, 274, 274, 274,
  1714. 274, 274, 274, 274, 274, 274, 274, 275,
  1715. 276, 276, 276, 276, 276, 276, 276, 276,
  1716. 276, 276, 276, 276, 277, 276, 276, 278,
  1717. 279, 279, 279, 280, 1, 281, 281, 281,
  1718. 281, 281, 281, 281, 281, 281, 1, 281,
  1719. 281, 282, 281, 281, 281, 281, 281, 281,
  1720. 281, 281, 281, 281, 281, 281, 281, 281,
  1721. 281, 281, 281, 281, 281, 281, 283, 281,
  1722. 281, 281, 281, 281, 281, 281, 281, 281,
  1723. 281, 281, 281, 281, 281, 281, 281, 281,
  1724. 281, 281, 281, 281, 281, 281, 281, 281,
  1725. 281, 281, 281, 281, 281, 281, 281, 281,
  1726. 281, 281, 281, 281, 281, 281, 281, 281,
  1727. 281, 281, 281, 281, 281, 281, 281, 281,
  1728. 281, 281, 281, 281, 281, 281, 281, 281,
  1729. 284, 281, 281, 281, 281, 281, 281, 281,
  1730. 281, 281, 281, 281, 281, 281, 281, 281,
  1731. 281, 281, 281, 281, 281, 281, 281, 281,
  1732. 281, 281, 281, 281, 281, 281, 281, 281,
  1733. 281, 281, 281, 281, 1, 1, 1, 1,
  1734. 1, 1, 1, 1, 1, 1, 1, 1,
  1735. 1, 1, 1, 1, 1, 1, 1, 1,
  1736. 1, 1, 1, 1, 1, 1, 1, 1,
  1737. 1, 1, 1, 1, 1, 1, 1, 1,
  1738. 1, 1, 1, 1, 1, 1, 1, 1,
  1739. 1, 1, 1, 1, 1, 1, 1, 1,
  1740. 1, 1, 1, 1, 1, 1, 1, 1,
  1741. 1, 1, 1, 1, 1, 1, 285, 285,
  1742. 285, 285, 285, 285, 285, 285, 285, 285,
  1743. 285, 285, 285, 285, 285, 285, 285, 285,
  1744. 285, 285, 285, 285, 285, 285, 285, 285,
  1745. 285, 285, 285, 285, 286, 287, 287, 287,
  1746. 287, 287, 287, 287, 287, 287, 287, 287,
  1747. 287, 288, 287, 287, 289, 290, 290, 290,
  1748. 291, 1, 292, 1, 281, 1, 1, 1,
  1749. 1, 1, 1, 1, 1, 1, 1, 1,
  1750. 1, 1, 1, 1, 1, 1, 1, 1,
  1751. 1, 1, 1, 281, 1, 27, 1, 1,
  1752. 1, 28, 1, 1, 1, 1, 1, 1,
  1753. 1, 1, 1, 1, 1, 1, 1, 1,
  1754. 1, 1, 1, 1, 27, 239, 30, 239,
  1755. 239, 239, 239, 239, 31, 1, 239, 239,
  1756. 1, 239, 32, 239, 239, 239, 239, 239,
  1757. 239, 239, 239, 239, 239, 239, 1, 1,
  1758. 1, 239, 1, 239, 33, 239, 239, 239,
  1759. 239, 239, 239, 239, 239, 239, 239, 239,
  1760. 239, 239, 239, 239, 239, 239, 239, 239,
  1761. 239, 239, 239, 239, 239, 239, 239, 1,
  1762. 1, 1, 239, 239, 239, 239, 239, 239,
  1763. 239, 239, 239, 239, 239, 239, 239, 239,
  1764. 239, 239, 239, 239, 239, 239, 239, 239,
  1765. 239, 239, 239, 239, 239, 239, 239, 239,
  1766. 239, 239, 239, 1, 1, 1, 1, 1,
  1767. 1, 1, 1, 1, 1, 1, 1, 1,
  1768. 1, 1, 1, 1, 1, 1, 1, 1,
  1769. 1, 1, 1, 1, 1, 1, 1, 1,
  1770. 1, 1, 1, 1, 1, 1, 1, 1,
  1771. 1, 1, 1, 1, 1, 1, 1, 1,
  1772. 1, 1, 1, 1, 1, 1, 1, 1,
  1773. 1, 1, 1, 1, 1, 1, 1, 1,
  1774. 1, 1, 1, 1, 1, 1, 244, 244,
  1775. 244, 244, 244, 244, 244, 244, 244, 244,
  1776. 244, 244, 244, 244, 244, 244, 244, 244,
  1777. 244, 244, 244, 244, 244, 244, 244, 244,
  1778. 244, 244, 244, 244, 245, 246, 246, 246,
  1779. 246, 246, 246, 246, 246, 246, 246, 246,
  1780. 246, 247, 246, 246, 248, 249, 249, 249,
  1781. 250, 1, 281, 281, 281, 281, 281, 281,
  1782. 281, 281, 281, 281, 281, 281, 281, 281,
  1783. 281, 281, 281, 281, 281, 281, 281, 281,
  1784. 281, 281, 281, 281, 281, 281, 281, 281,
  1785. 281, 281, 281, 281, 281, 281, 281, 281,
  1786. 281, 281, 281, 281, 281, 281, 281, 281,
  1787. 281, 281, 281, 281, 281, 281, 281, 281,
  1788. 281, 281, 281, 281, 281, 281, 281, 281,
  1789. 281, 281, 281, 281, 281, 281, 281, 281,
  1790. 281, 281, 281, 281, 281, 281, 281, 281,
  1791. 281, 281, 281, 281, 281, 281, 281, 281,
  1792. 281, 281, 281, 281, 281, 281, 281, 281,
  1793. 281, 281, 281, 281, 281, 281, 281, 281,
  1794. 281, 281, 281, 281, 281, 281, 281, 281,
  1795. 281, 281, 281, 281, 281, 281, 281, 281,
  1796. 281, 281, 281, 281, 281, 281, 281, 281,
  1797. 281, 281, 1, 1, 1, 1, 1, 1,
  1798. 1, 1, 1, 1, 1, 1, 1, 1,
  1799. 1, 1, 1, 1, 1, 1, 1, 1,
  1800. 1, 1, 1, 1, 1, 1, 1, 1,
  1801. 1, 1, 1, 1, 1, 1, 1, 1,
  1802. 1, 1, 1, 1, 1, 1, 1, 1,
  1803. 1, 1, 1, 1, 1, 1, 1, 1,
  1804. 1, 1, 1, 1, 1, 1, 1, 1,
  1805. 1, 1, 1, 1, 285, 285, 285, 285,
  1806. 285, 285, 285, 285, 285, 285, 285, 285,
  1807. 285, 285, 285, 285, 285, 285, 285, 285,
  1808. 285, 285, 285, 285, 285, 285, 285, 285,
  1809. 285, 285, 286, 287, 287, 287, 287, 287,
  1810. 287, 287, 287, 287, 287, 287, 287, 288,
  1811. 287, 287, 289, 290, 290, 290, 291, 1,
  1812. 281, 281, 281, 281, 281, 281, 281, 281,
  1813. 281, 281, 281, 281, 281, 281, 281, 281,
  1814. 281, 281, 281, 281, 281, 281, 281, 281,
  1815. 281, 281, 281, 281, 281, 281, 281, 281,
  1816. 281, 281, 281, 281, 281, 281, 281, 281,
  1817. 281, 281, 281, 281, 281, 281, 281, 281,
  1818. 281, 281, 281, 281, 281, 281, 281, 281,
  1819. 281, 281, 281, 281, 281, 281, 281, 281,
  1820. 1, 285, 285, 285, 285, 285, 285, 285,
  1821. 285, 285, 285, 285, 285, 285, 285, 285,
  1822. 285, 285, 285, 285, 285, 285, 285, 285,
  1823. 285, 285, 285, 285, 285, 285, 285, 285,
  1824. 285, 1, 285, 285, 285, 285, 285, 285,
  1825. 285, 285, 285, 285, 285, 285, 285, 285,
  1826. 285, 285, 285, 285, 285, 285, 285, 285,
  1827. 285, 285, 285, 285, 285, 285, 285, 285,
  1828. 285, 285, 285, 285, 285, 285, 285, 285,
  1829. 285, 285, 285, 285, 285, 285, 285, 285,
  1830. 285, 285, 285, 285, 285, 285, 285, 285,
  1831. 285, 285, 285, 285, 285, 285, 285, 285,
  1832. 285, 285, 1, 285, 285, 285, 285, 285,
  1833. 285, 285, 285, 285, 285, 285, 285, 285,
  1834. 285, 285, 285, 285, 285, 285, 285, 285,
  1835. 285, 285, 285, 285, 285, 285, 285, 285,
  1836. 285, 285, 285, 1, 287, 287, 287, 287,
  1837. 287, 287, 287, 287, 287, 287, 287, 287,
  1838. 287, 287, 287, 287, 287, 287, 287, 287,
  1839. 287, 287, 287, 287, 287, 287, 287, 287,
  1840. 287, 287, 287, 287, 287, 287, 287, 287,
  1841. 287, 287, 287, 287, 287, 287, 287, 287,
  1842. 287, 287, 287, 287, 1, 287, 287, 287,
  1843. 287, 287, 287, 287, 287, 287, 287, 287,
  1844. 287, 287, 287, 287, 287, 287, 287, 287,
  1845. 287, 287, 287, 287, 287, 287, 287, 287,
  1846. 287, 287, 287, 287, 287, 287, 287, 287,
  1847. 287, 287, 287, 287, 287, 287, 287, 287,
  1848. 287, 287, 287, 287, 287, 287, 287, 287,
  1849. 287, 287, 287, 287, 287, 287, 287, 287,
  1850. 287, 287, 287, 287, 287, 1, 287, 287,
  1851. 287, 287, 287, 287, 287, 287, 287, 287,
  1852. 287, 287, 287, 287, 287, 287, 1, 281,
  1853. 281, 281, 281, 281, 281, 281, 281, 293,
  1854. 1, 281, 281, 294, 281, 281, 281, 281,
  1855. 281, 281, 281, 281, 281, 281, 281, 281,
  1856. 281, 281, 281, 281, 281, 281, 293, 281,
  1857. 207, 281, 281, 281, 281, 281, 281, 281,
  1858. 281, 281, 281, 281, 281, 281, 281, 281,
  1859. 281, 281, 281, 281, 281, 281, 281, 281,
  1860. 281, 281, 281, 281, 281, 281, 281, 281,
  1861. 281, 281, 281, 281, 281, 281, 281, 281,
  1862. 281, 281, 281, 281, 281, 281, 281, 281,
  1863. 281, 281, 281, 281, 281, 281, 281, 281,
  1864. 281, 281, 284, 281, 281, 281, 281, 281,
  1865. 281, 281, 281, 281, 281, 281, 281, 281,
  1866. 281, 281, 281, 281, 281, 281, 281, 281,
  1867. 281, 281, 281, 281, 281, 281, 281, 281,
  1868. 281, 281, 281, 281, 281, 281, 1, 1,
  1869. 1, 1, 1, 1, 1, 1, 1, 1,
  1870. 1, 1, 1, 1, 1, 1, 1, 1,
  1871. 1, 1, 1, 1, 1, 1, 1, 1,
  1872. 1, 1, 1, 1, 1, 1, 1, 1,
  1873. 1, 1, 1, 1, 1, 1, 1, 1,
  1874. 1, 1, 1, 1, 1, 1, 1, 1,
  1875. 1, 1, 1, 1, 1, 1, 1, 1,
  1876. 1, 1, 1, 1, 1, 1, 1, 1,
  1877. 285, 285, 285, 285, 285, 285, 285, 285,
  1878. 285, 285, 285, 285, 285, 285, 285, 285,
  1879. 285, 285, 285, 285, 285, 285, 285, 285,
  1880. 285, 285, 285, 285, 285, 285, 286, 287,
  1881. 287, 287, 287, 287, 287, 287, 287, 287,
  1882. 287, 287, 287, 288, 287, 287, 289, 290,
  1883. 290, 290, 291, 1, 295, 1, 293, 1,
  1884. 1, 1, 1, 1, 1, 1, 1, 1,
  1885. 1, 1, 1, 1, 1, 1, 1, 1,
  1886. 1, 1, 1, 1, 1, 293, 1, 29,
  1887. 29, 29, 29, 29, 29, 29, 29, 29,
  1888. 29, 29, 29, 29, 29, 29, 29, 29,
  1889. 29, 29, 29, 29, 29, 29, 29, 29,
  1890. 29, 29, 29, 29, 29, 29, 29, 29,
  1891. 29, 29, 29, 29, 29, 29, 29, 29,
  1892. 29, 29, 29, 29, 29, 29, 29, 29,
  1893. 29, 29, 29, 29, 29, 29, 29, 29,
  1894. 29, 29, 29, 29, 29, 29, 29, 1,
  1895. 34, 34, 34, 34, 34, 34, 34, 34,
  1896. 34, 34, 34, 34, 34, 34, 34, 34,
  1897. 34, 34, 34, 34, 34, 34, 34, 34,
  1898. 34, 34, 34, 34, 34, 34, 34, 34,
  1899. 1, 34, 34, 34, 34, 34, 34, 34,
  1900. 34, 34, 34, 34, 34, 34, 34, 34,
  1901. 34, 34, 34, 34, 34, 34, 34, 34,
  1902. 34, 34, 34, 34, 34, 34, 34, 34,
  1903. 34, 34, 34, 34, 34, 34, 34, 34,
  1904. 34, 34, 34, 34, 34, 34, 34, 34,
  1905. 34, 34, 34, 34, 34, 34, 34, 34,
  1906. 34, 34, 34, 34, 34, 34, 34, 34,
  1907. 34, 1, 34, 34, 34, 34, 34, 34,
  1908. 34, 34, 34, 34, 34, 34, 34, 34,
  1909. 34, 34, 34, 34, 34, 34, 34, 34,
  1910. 34, 34, 34, 34, 34, 34, 34, 34,
  1911. 34, 34, 1, 36, 36, 36, 36, 36,
  1912. 36, 36, 36, 36, 36, 36, 36, 36,
  1913. 36, 36, 36, 36, 36, 36, 36, 36,
  1914. 36, 36, 36, 36, 36, 36, 36, 36,
  1915. 36, 36, 36, 36, 36, 36, 36, 36,
  1916. 36, 36, 36, 36, 36, 36, 36, 36,
  1917. 36, 36, 36, 1, 36, 36, 36, 36,
  1918. 36, 36, 36, 36, 36, 36, 36, 36,
  1919. 36, 36, 36, 36, 36, 36, 36, 36,
  1920. 36, 36, 36, 36, 36, 36, 36, 36,
  1921. 36, 36, 36, 36, 36, 36, 36, 36,
  1922. 36, 36, 36, 36, 36, 36, 36, 36,
  1923. 36, 36, 36, 36, 36, 36, 36, 36,
  1924. 36, 36, 36, 36, 36, 36, 36, 36,
  1925. 36, 36, 36, 36, 1, 36, 36, 36,
  1926. 36, 36, 36, 36, 36, 36, 36, 36,
  1927. 36, 36, 36, 36, 36, 1, 296, 296,
  1928. 296, 296, 296, 296, 296, 296, 297, 1,
  1929. 296, 296, 298, 296, 296, 296, 296, 296,
  1930. 296, 296, 296, 296, 296, 296, 296, 296,
  1931. 296, 296, 296, 296, 296, 297, 296, 299,
  1932. 296, 296, 296, 296, 296, 296, 296, 296,
  1933. 296, 296, 296, 296, 296, 296, 296, 296,
  1934. 296, 296, 296, 296, 296, 296, 296, 296,
  1935. 296, 296, 296, 296, 296, 296, 296, 296,
  1936. 296, 296, 296, 296, 296, 296, 296, 296,
  1937. 296, 296, 296, 296, 296, 296, 296, 296,
  1938. 296, 296, 296, 296, 296, 296, 296, 296,
  1939. 296, 300, 296, 296, 296, 296, 296, 296,
  1940. 296, 296, 296, 296, 296, 296, 296, 296,
  1941. 296, 296, 296, 296, 296, 296, 296, 296,
  1942. 296, 296, 296, 296, 296, 296, 296, 296,
  1943. 296, 296, 296, 296, 296, 1, 1, 1,
  1944. 1, 1, 1, 1, 1, 1, 1, 1,
  1945. 1, 1, 1, 1, 1, 1, 1, 1,
  1946. 1, 1, 1, 1, 1, 1, 1, 1,
  1947. 1, 1, 1, 1, 1, 1, 1, 1,
  1948. 1, 1, 1, 1, 1, 1, 1, 1,
  1949. 1, 1, 1, 1, 1, 1, 1, 1,
  1950. 1, 1, 1, 1, 1, 1, 1, 1,
  1951. 1, 1, 1, 1, 1, 1, 1, 301,
  1952. 301, 301, 301, 301, 301, 301, 301, 301,
  1953. 301, 301, 301, 301, 301, 301, 301, 301,
  1954. 301, 301, 301, 301, 301, 301, 301, 301,
  1955. 301, 301, 301, 301, 301, 302, 303, 303,
  1956. 303, 303, 303, 303, 303, 303, 303, 303,
  1957. 303, 303, 304, 303, 303, 305, 306, 306,
  1958. 306, 307, 1, 308, 308, 308, 308, 308,
  1959. 308, 308, 308, 308, 1, 308, 308, 309,
  1960. 308, 308, 308, 308, 308, 308, 308, 308,
  1961. 308, 308, 308, 308, 308, 308, 308, 308,
  1962. 308, 308, 308, 308, 310, 308, 308, 308,
  1963. 308, 308, 308, 308, 308, 308, 308, 308,
  1964. 308, 308, 308, 308, 308, 308, 308, 308,
  1965. 308, 308, 308, 308, 308, 308, 308, 308,
  1966. 308, 308, 308, 308, 308, 308, 308, 308,
  1967. 308, 308, 308, 308, 308, 308, 308, 308,
  1968. 308, 308, 308, 308, 308, 308, 308, 308,
  1969. 308, 308, 308, 308, 308, 308, 311, 308,
  1970. 308, 308, 308, 308, 308, 308, 308, 308,
  1971. 308, 308, 308, 308, 308, 308, 308, 308,
  1972. 308, 308, 308, 308, 308, 308, 308, 308,
  1973. 308, 308, 308, 308, 308, 308, 308, 308,
  1974. 308, 308, 1, 1, 1, 1, 1, 1,
  1975. 1, 1, 1, 1, 1, 1, 1, 1,
  1976. 1, 1, 1, 1, 1, 1, 1, 1,
  1977. 1, 1, 1, 1, 1, 1, 1, 1,
  1978. 1, 1, 1, 1, 1, 1, 1, 1,
  1979. 1, 1, 1, 1, 1, 1, 1, 1,
  1980. 1, 1, 1, 1, 1, 1, 1, 1,
  1981. 1, 1, 1, 1, 1, 1, 1, 1,
  1982. 1, 1, 1, 1, 312, 312, 312, 312,
  1983. 312, 312, 312, 312, 312, 312, 312, 312,
  1984. 312, 312, 312, 312, 312, 312, 312, 312,
  1985. 312, 312, 312, 312, 312, 312, 312, 312,
  1986. 312, 312, 313, 314, 314, 314, 314, 314,
  1987. 314, 314, 314, 314, 314, 314, 314, 315,
  1988. 314, 314, 316, 317, 317, 317, 318, 1,
  1989. 319, 1, 308, 1, 1, 1, 1, 1,
  1990. 1, 1, 1, 1, 1, 1, 1, 1,
  1991. 1, 1, 1, 1, 1, 1, 1, 1,
  1992. 1, 308, 1, 320, 1, 1, 1, 321,
  1993. 1, 1, 1, 1, 1, 1, 1, 1,
  1994. 1, 1, 1, 1, 1, 1, 1, 1,
  1995. 1, 1, 320, 239, 30, 239, 239, 239,
  1996. 239, 239, 322, 1, 239, 239, 1, 239,
  1997. 32, 239, 239, 239, 239, 239, 239, 239,
  1998. 239, 239, 239, 239, 1, 1, 1, 239,
  1999. 1, 239, 323, 239, 239, 239, 239, 239,
  2000. 239, 239, 239, 239, 239, 239, 239, 239,
  2001. 239, 239, 239, 239, 239, 239, 239, 239,
  2002. 239, 239, 239, 239, 239, 1, 1, 1,
  2003. 239, 239, 239, 239, 239, 239, 239, 239,
  2004. 239, 239, 239, 239, 239, 239, 239, 239,
  2005. 239, 239, 239, 239, 239, 239, 239, 239,
  2006. 239, 239, 239, 239, 239, 239, 239, 239,
  2007. 239, 1, 1, 1, 1, 1, 1, 1,
  2008. 1, 1, 1, 1, 1, 1, 1, 1,
  2009. 1, 1, 1, 1, 1, 1, 1, 1,
  2010. 1, 1, 1, 1, 1, 1, 1, 1,
  2011. 1, 1, 1, 1, 1, 1, 1, 1,
  2012. 1, 1, 1, 1, 1, 1, 1, 1,
  2013. 1, 1, 1, 1, 1, 1, 1, 1,
  2014. 1, 1, 1, 1, 1, 1, 1, 1,
  2015. 1, 1, 1, 1, 244, 244, 244, 244,
  2016. 244, 244, 244, 244, 244, 244, 244, 244,
  2017. 244, 244, 244, 244, 244, 244, 244, 244,
  2018. 244, 244, 244, 244, 244, 244, 244, 244,
  2019. 244, 244, 245, 246, 246, 246, 246, 246,
  2020. 246, 246, 246, 246, 246, 246, 246, 247,
  2021. 246, 246, 248, 249, 249, 249, 250, 1,
  2022. 324, 1, 1, 1, 325, 1, 1, 1,
  2023. 1, 1, 1, 1, 1, 1, 1, 1,
  2024. 1, 1, 1, 1, 1, 1, 1, 324,
  2025. 1, 1, 1, 1, 1, 1, 1, 326,
  2026. 1, 1, 1, 1, 1, 44, 1, 1,
  2027. 1, 1, 1, 1, 1, 1, 1, 1,
  2028. 1, 1, 1, 1, 1, 1, 1, 327,
  2029. 1, 328, 1, 324, 1, 1, 1, 1,
  2030. 1, 1, 1, 1, 1, 1, 1, 1,
  2031. 1, 1, 1, 1, 1, 1, 1, 1,
  2032. 1, 1, 324, 1, 329, 1, 1, 1,
  2033. 330, 1, 1, 1, 1, 1, 1, 1,
  2034. 1, 1, 1, 1, 1, 1, 1, 1,
  2035. 1, 1, 1, 329, 1, 1, 1, 1,
  2036. 1, 1, 1, 331, 1, 1, 1, 1,
  2037. 1, 50, 1, 1, 1, 1, 1, 1,
  2038. 1, 1, 1, 1, 1, 1, 1, 1,
  2039. 1, 1, 1, 332, 1, 308, 308, 308,
  2040. 308, 308, 308, 308, 308, 308, 308, 308,
  2041. 308, 308, 308, 308, 308, 308, 308, 308,
  2042. 308, 308, 308, 308, 308, 308, 308, 308,
  2043. 308, 308, 308, 308, 308, 308, 308, 308,
  2044. 308, 308, 308, 308, 308, 308, 308, 308,
  2045. 308, 308, 308, 308, 308, 308, 308, 308,
  2046. 308, 308, 308, 308, 308, 308, 308, 308,
  2047. 308, 308, 308, 308, 308, 308, 308, 308,
  2048. 308, 308, 308, 308, 308, 308, 308, 308,
  2049. 308, 308, 308, 308, 308, 308, 308, 308,
  2050. 308, 308, 308, 308, 308, 308, 308, 308,
  2051. 308, 308, 308, 308, 308, 308, 308, 308,
  2052. 308, 308, 308, 308, 308, 308, 308, 308,
  2053. 308, 308, 308, 308, 308, 308, 308, 308,
  2054. 308, 308, 308, 308, 308, 308, 308, 308,
  2055. 308, 308, 308, 308, 308, 1, 1, 1,
  2056. 1, 1, 1, 1, 1, 1, 1, 1,
  2057. 1, 1, 1, 1, 1, 1, 1, 1,
  2058. 1, 1, 1, 1, 1, 1, 1, 1,
  2059. 1, 1, 1, 1, 1, 1, 1, 1,
  2060. 1, 1, 1, 1, 1, 1, 1, 1,
  2061. 1, 1, 1, 1, 1, 1, 1, 1,
  2062. 1, 1, 1, 1, 1, 1, 1, 1,
  2063. 1, 1, 1, 1, 1, 1, 1, 312,
  2064. 312, 312, 312, 312, 312, 312, 312, 312,
  2065. 312, 312, 312, 312, 312, 312, 312, 312,
  2066. 312, 312, 312, 312, 312, 312, 312, 312,
  2067. 312, 312, 312, 312, 312, 313, 314, 314,
  2068. 314, 314, 314, 314, 314, 314, 314, 314,
  2069. 314, 314, 315, 314, 314, 316, 317, 317,
  2070. 317, 318, 1, 308, 308, 308, 308, 308,
  2071. 308, 308, 308, 308, 308, 308, 308, 308,
  2072. 308, 308, 308, 308, 308, 308, 308, 308,
  2073. 308, 308, 308, 308, 308, 308, 308, 308,
  2074. 308, 308, 308, 308, 308, 308, 308, 308,
  2075. 308, 308, 308, 308, 308, 308, 308, 308,
  2076. 308, 308, 308, 308, 308, 308, 308, 308,
  2077. 308, 308, 308, 308, 308, 308, 308, 308,
  2078. 308, 308, 308, 1, 312, 312, 312, 312,
  2079. 312, 312, 312, 312, 312, 312, 312, 312,
  2080. 312, 312, 312, 312, 312, 312, 312, 312,
  2081. 312, 312, 312, 312, 312, 312, 312, 312,
  2082. 312, 312, 312, 312, 1, 312, 312, 312,
  2083. 312, 312, 312, 312, 312, 312, 312, 312,
  2084. 312, 312, 312, 312, 312, 312, 312, 312,
  2085. 312, 312, 312, 312, 312, 312, 312, 312,
  2086. 312, 312, 312, 312, 312, 312, 312, 312,
  2087. 312, 312, 312, 312, 312, 312, 312, 312,
  2088. 312, 312, 312, 312, 312, 312, 312, 312,
  2089. 312, 312, 312, 312, 312, 312, 312, 312,
  2090. 312, 312, 312, 312, 312, 1, 312, 312,
  2091. 312, 312, 312, 312, 312, 312, 312, 312,
  2092. 312, 312, 312, 312, 312, 312, 312, 312,
  2093. 312, 312, 312, 312, 312, 312, 312, 312,
  2094. 312, 312, 312, 312, 312, 312, 1, 314,
  2095. 314, 314, 314, 314, 314, 314, 314, 314,
  2096. 314, 314, 314, 314, 314, 314, 314, 314,
  2097. 314, 314, 314, 314, 314, 314, 314, 314,
  2098. 314, 314, 314, 314, 314, 314, 314, 314,
  2099. 314, 314, 314, 314, 314, 314, 314, 314,
  2100. 314, 314, 314, 314, 314, 314, 314, 1,
  2101. 314, 314, 314, 314, 314, 314, 314, 314,
  2102. 314, 314, 314, 314, 314, 314, 314, 314,
  2103. 314, 314, 314, 314, 314, 314, 314, 314,
  2104. 314, 314, 314, 314, 314, 314, 314, 314,
  2105. 314, 314, 314, 314, 314, 314, 314, 314,
  2106. 314, 314, 314, 314, 314, 314, 314, 314,
  2107. 314, 314, 314, 314, 314, 314, 314, 314,
  2108. 314, 314, 314, 314, 314, 314, 314, 314,
  2109. 1, 314, 314, 314, 314, 314, 314, 314,
  2110. 314, 314, 314, 314, 314, 314, 314, 314,
  2111. 314, 1, 308, 308, 308, 308, 308, 308,
  2112. 308, 308, 333, 1, 308, 308, 334, 308,
  2113. 308, 308, 308, 308, 308, 308, 308, 308,
  2114. 308, 308, 308, 308, 308, 308, 308, 308,
  2115. 308, 333, 308, 335, 308, 308, 308, 308,
  2116. 308, 308, 308, 308, 308, 308, 308, 308,
  2117. 308, 308, 308, 308, 308, 308, 308, 308,
  2118. 308, 308, 308, 308, 308, 308, 308, 308,
  2119. 308, 308, 308, 308, 308, 308, 308, 308,
  2120. 308, 308, 308, 308, 308, 308, 308, 308,
  2121. 308, 308, 308, 308, 308, 308, 308, 308,
  2122. 308, 308, 308, 308, 308, 311, 308, 308,
  2123. 308, 308, 308, 308, 308, 308, 308, 308,
  2124. 308, 308, 308, 308, 308, 308, 308, 308,
  2125. 308, 308, 308, 308, 308, 308, 308, 308,
  2126. 308, 308, 308, 308, 308, 308, 308, 308,
  2127. 308, 1, 1, 1, 1, 1, 1, 1,
  2128. 1, 1, 1, 1, 1, 1, 1, 1,
  2129. 1, 1, 1, 1, 1, 1, 1, 1,
  2130. 1, 1, 1, 1, 1, 1, 1, 1,
  2131. 1, 1, 1, 1, 1, 1, 1, 1,
  2132. 1, 1, 1, 1, 1, 1, 1, 1,
  2133. 1, 1, 1, 1, 1, 1, 1, 1,
  2134. 1, 1, 1, 1, 1, 1, 1, 1,
  2135. 1, 1, 1, 312, 312, 312, 312, 312,
  2136. 312, 312, 312, 312, 312, 312, 312, 312,
  2137. 312, 312, 312, 312, 312, 312, 312, 312,
  2138. 312, 312, 312, 312, 312, 312, 312, 312,
  2139. 312, 313, 314, 314, 314, 314, 314, 314,
  2140. 314, 314, 314, 314, 314, 314, 315, 314,
  2141. 314, 316, 317, 317, 317, 318, 1, 336,
  2142. 1, 333, 1, 1, 1, 1, 1, 1,
  2143. 1, 1, 1, 1, 1, 1, 1, 1,
  2144. 1, 1, 1, 1, 1, 1, 1, 1,
  2145. 333, 1, 337, 1, 1, 1, 338, 1,
  2146. 1, 1, 1, 1, 1, 1, 1, 1,
  2147. 1, 1, 1, 1, 1, 1, 1, 1,
  2148. 1, 337, 1, 1, 1, 1, 1, 1,
  2149. 1, 339, 1, 1, 1, 1, 1, 44,
  2150. 1, 1, 1, 1, 1, 1, 1, 1,
  2151. 1, 1, 1, 1, 1, 1, 1, 1,
  2152. 1, 340, 1, 341, 1, 337, 1, 1,
  2153. 1, 1, 1, 1, 1, 1, 1, 1,
  2154. 1, 1, 1, 1, 1, 1, 1, 1,
  2155. 1, 1, 1, 1, 337, 1, 342, 1,
  2156. 1, 1, 343, 1, 1, 1, 1, 1,
  2157. 1, 1, 1, 1, 1, 1, 1, 1,
  2158. 1, 1, 1, 1, 1, 342, 1, 1,
  2159. 1, 1, 1, 1, 1, 344, 1, 1,
  2160. 1, 1, 1, 50, 1, 1, 1, 1,
  2161. 1, 1, 1, 1, 1, 1, 1, 1,
  2162. 1, 1, 1, 1, 1, 345, 1, 346,
  2163. 1, 1, 1, 347, 1, 1, 1, 1,
  2164. 1, 1, 1, 1, 1, 1, 1, 1,
  2165. 1, 1, 1, 1, 1, 1, 346, 348,
  2166. 349, 348, 348, 348, 348, 348, 350, 1,
  2167. 348, 348, 1, 348, 351, 348, 348, 348,
  2168. 348, 348, 348, 348, 348, 348, 348, 348,
  2169. 1, 1, 1, 348, 1, 348, 1, 348,
  2170. 348, 348, 348, 348, 348, 348, 348, 348,
  2171. 348, 348, 348, 348, 348, 348, 348, 348,
  2172. 348, 348, 348, 348, 348, 348, 348, 348,
  2173. 348, 1, 1, 1, 348, 348, 348, 348,
  2174. 348, 348, 348, 348, 348, 348, 348, 348,
  2175. 348, 348, 348, 348, 348, 348, 348, 348,
  2176. 348, 348, 348, 348, 348, 348, 348, 348,
  2177. 348, 348, 348, 348, 348, 1, 1, 1,
  2178. 1, 1, 1, 1, 1, 1, 1, 1,
  2179. 1, 1, 1, 1, 1, 1, 1, 1,
  2180. 1, 1, 1, 1, 1, 1, 1, 1,
  2181. 1, 1, 1, 1, 1, 1, 1, 1,
  2182. 1, 1, 1, 1, 1, 1, 1, 1,
  2183. 1, 1, 1, 1, 1, 1, 1, 1,
  2184. 1, 1, 1, 1, 1, 1, 1, 1,
  2185. 1, 1, 1, 1, 1, 1, 1, 1,
  2186. 352, 352, 352, 352, 352, 352, 352, 352,
  2187. 352, 352, 352, 352, 352, 352, 352, 352,
  2188. 352, 352, 352, 352, 352, 352, 352, 352,
  2189. 352, 352, 352, 352, 352, 352, 353, 354,
  2190. 354, 354, 354, 354, 354, 354, 354, 354,
  2191. 354, 354, 354, 355, 354, 354, 356, 357,
  2192. 357, 357, 358, 1, 239, 30, 239, 239,
  2193. 239, 239, 239, 1, 1, 239, 239, 1,
  2194. 239, 359, 239, 239, 239, 239, 239, 239,
  2195. 239, 239, 239, 239, 239, 1, 1, 1,
  2196. 239, 1, 239, 1, 239, 239, 239, 239,
  2197. 239, 239, 239, 239, 239, 239, 239, 239,
  2198. 239, 239, 239, 239, 239, 239, 239, 239,
  2199. 239, 239, 239, 239, 239, 239, 1, 1,
  2200. 1, 239, 239, 239, 239, 239, 239, 239,
  2201. 239, 239, 239, 239, 239, 239, 239, 239,
  2202. 239, 239, 239, 239, 239, 239, 239, 239,
  2203. 239, 239, 239, 239, 239, 239, 239, 239,
  2204. 239, 239, 1, 1, 1, 1, 1, 1,
  2205. 1, 1, 1, 1, 1, 1, 1, 1,
  2206. 1, 1, 1, 1, 1, 1, 1, 1,
  2207. 1, 1, 1, 1, 1, 1, 1, 1,
  2208. 1, 1, 1, 1, 1, 1, 1, 1,
  2209. 1, 1, 1, 1, 1, 1, 1, 1,
  2210. 1, 1, 1, 1, 1, 1, 1, 1,
  2211. 1, 1, 1, 1, 1, 1, 1, 1,
  2212. 1, 1, 1, 1, 1, 244, 244, 244,
  2213. 244, 244, 244, 244, 244, 244, 244, 244,
  2214. 244, 244, 244, 244, 244, 244, 244, 244,
  2215. 244, 244, 244, 244, 244, 244, 244, 244,
  2216. 244, 244, 244, 245, 246, 246, 246, 246,
  2217. 246, 246, 246, 246, 246, 246, 246, 246,
  2218. 247, 246, 246, 248, 249, 249, 249, 250,
  2219. 1, 360, 360, 360, 360, 360, 360, 360,
  2220. 360, 360, 1, 360, 360, 361, 360, 360,
  2221. 360, 360, 360, 360, 360, 360, 360, 360,
  2222. 360, 360, 360, 360, 360, 360, 360, 360,
  2223. 360, 360, 360, 360, 360, 360, 360, 360,
  2224. 362, 363, 360, 360, 360, 360, 360, 360,
  2225. 360, 360, 360, 360, 360, 360, 360, 360,
  2226. 360, 360, 360, 360, 360, 360, 360, 360,
  2227. 360, 360, 360, 360, 360, 360, 360, 360,
  2228. 360, 360, 360, 360, 360, 360, 360, 360,
  2229. 360, 360, 360, 360, 360, 360, 360, 360,
  2230. 360, 360, 360, 360, 364, 360, 360, 360,
  2231. 360, 360, 360, 360, 360, 360, 360, 360,
  2232. 360, 360, 360, 360, 360, 360, 360, 360,
  2233. 360, 360, 360, 360, 360, 360, 360, 360,
  2234. 360, 360, 360, 360, 360, 360, 360, 360,
  2235. 1, 1, 1, 1, 1, 1, 1, 1,
  2236. 1, 1, 1, 1, 1, 1, 1, 1,
  2237. 1, 1, 1, 1, 1, 1, 1, 1,
  2238. 1, 1, 1, 1, 1, 1, 1, 1,
  2239. 1, 1, 1, 1, 1, 1, 1, 1,
  2240. 1, 1, 1, 1, 1, 1, 1, 1,
  2241. 1, 1, 1, 1, 1, 1, 1, 1,
  2242. 1, 1, 1, 1, 1, 1, 1, 1,
  2243. 1, 1, 365, 365, 365, 365, 365, 365,
  2244. 365, 365, 365, 365, 365, 365, 365, 365,
  2245. 365, 365, 365, 365, 365, 365, 365, 365,
  2246. 365, 365, 365, 365, 365, 365, 365, 365,
  2247. 366, 367, 367, 367, 367, 367, 367, 367,
  2248. 367, 367, 367, 367, 367, 368, 367, 367,
  2249. 369, 370, 370, 370, 371, 1, 372, 372,
  2250. 372, 372, 372, 372, 372, 372, 372, 1,
  2251. 372, 372, 373, 372, 372, 372, 372, 372,
  2252. 372, 372, 372, 372, 372, 372, 372, 372,
  2253. 372, 372, 372, 372, 372, 372, 372, 372,
  2254. 372, 372, 372, 372, 372, 374, 375, 372,
  2255. 372, 372, 372, 372, 372, 372, 372, 372,
  2256. 372, 372, 372, 372, 372, 372, 372, 372,
  2257. 372, 372, 372, 372, 372, 372, 372, 372,
  2258. 372, 372, 372, 372, 372, 372, 372, 372,
  2259. 372, 372, 372, 372, 372, 372, 372, 372,
  2260. 372, 372, 372, 372, 372, 372, 372, 372,
  2261. 372, 376, 372, 372, 372, 372, 372, 372,
  2262. 372, 372, 372, 372, 372, 372, 372, 372,
  2263. 372, 372, 372, 372, 372, 372, 372, 372,
  2264. 372, 372, 372, 372, 372, 372, 372, 372,
  2265. 372, 372, 372, 372, 372, 1, 1, 1,
  2266. 1, 1, 1, 1, 1, 1, 1, 1,
  2267. 1, 1, 1, 1, 1, 1, 1, 1,
  2268. 1, 1, 1, 1, 1, 1, 1, 1,
  2269. 1, 1, 1, 1, 1, 1, 1, 1,
  2270. 1, 1, 1, 1, 1, 1, 1, 1,
  2271. 1, 1, 1, 1, 1, 1, 1, 1,
  2272. 1, 1, 1, 1, 1, 1, 1, 1,
  2273. 1, 1, 1, 1, 1, 1, 1, 377,
  2274. 377, 377, 377, 377, 377, 377, 377, 377,
  2275. 377, 377, 377, 377, 377, 377, 377, 377,
  2276. 377, 377, 377, 377, 377, 377, 377, 377,
  2277. 377, 377, 377, 377, 377, 378, 379, 379,
  2278. 379, 379, 379, 379, 379, 379, 379, 379,
  2279. 379, 379, 380, 379, 379, 381, 382, 382,
  2280. 382, 383, 1, 384, 1, 372, 1, 1,
  2281. 1, 1, 1, 1, 1, 1, 1, 1,
  2282. 1, 1, 1, 1, 1, 1, 1, 1,
  2283. 1, 1, 1, 1, 372, 1, 372, 372,
  2284. 372, 372, 372, 372, 372, 372, 372, 372,
  2285. 372, 372, 372, 372, 372, 372, 372, 372,
  2286. 372, 372, 372, 372, 372, 372, 372, 372,
  2287. 372, 372, 372, 372, 372, 372, 372, 372,
  2288. 372, 372, 372, 372, 372, 372, 372, 372,
  2289. 372, 372, 372, 372, 372, 372, 372, 372,
  2290. 372, 372, 372, 372, 372, 372, 372, 372,
  2291. 372, 372, 372, 372, 372, 372, 372, 372,
  2292. 372, 372, 372, 372, 372, 372, 372, 372,
  2293. 372, 372, 372, 372, 372, 372, 372, 372,
  2294. 372, 372, 372, 372, 372, 372, 372, 372,
  2295. 372, 372, 372, 372, 372, 372, 372, 372,
  2296. 372, 372, 372, 372, 372, 372, 372, 372,
  2297. 372, 372, 372, 372, 372, 372, 372, 372,
  2298. 372, 372, 372, 372, 372, 372, 372, 372,
  2299. 372, 372, 372, 372, 372, 372, 1, 1,
  2300. 1, 1, 1, 1, 1, 1, 1, 1,
  2301. 1, 1, 1, 1, 1, 1, 1, 1,
  2302. 1, 1, 1, 1, 1, 1, 1, 1,
  2303. 1, 1, 1, 1, 1, 1, 1, 1,
  2304. 1, 1, 1, 1, 1, 1, 1, 1,
  2305. 1, 1, 1, 1, 1, 1, 1, 1,
  2306. 1, 1, 1, 1, 1, 1, 1, 1,
  2307. 1, 1, 1, 1, 1, 1, 1, 1,
  2308. 377, 377, 377, 377, 377, 377, 377, 377,
  2309. 377, 377, 377, 377, 377, 377, 377, 377,
  2310. 377, 377, 377, 377, 377, 377, 377, 377,
  2311. 377, 377, 377, 377, 377, 377, 378, 379,
  2312. 379, 379, 379, 379, 379, 379, 379, 379,
  2313. 379, 379, 379, 380, 379, 379, 381, 382,
  2314. 382, 382, 383, 1, 372, 372, 372, 372,
  2315. 372, 372, 372, 372, 372, 372, 372, 372,
  2316. 372, 372, 372, 372, 372, 372, 372, 372,
  2317. 372, 372, 372, 372, 372, 372, 372, 372,
  2318. 372, 372, 372, 372, 372, 372, 372, 372,
  2319. 372, 372, 372, 372, 372, 372, 372, 372,
  2320. 372, 372, 372, 372, 372, 372, 372, 372,
  2321. 372, 372, 372, 372, 372, 372, 372, 372,
  2322. 372, 372, 372, 372, 1, 377, 377, 377,
  2323. 377, 377, 377, 377, 377, 377, 377, 377,
  2324. 377, 377, 377, 377, 377, 377, 377, 377,
  2325. 377, 377, 377, 377, 377, 377, 377, 377,
  2326. 377, 377, 377, 377, 377, 1, 377, 377,
  2327. 377, 377, 377, 377, 377, 377, 377, 377,
  2328. 377, 377, 377, 377, 377, 377, 377, 377,
  2329. 377, 377, 377, 377, 377, 377, 377, 377,
  2330. 377, 377, 377, 377, 377, 377, 377, 377,
  2331. 377, 377, 377, 377, 377, 377, 377, 377,
  2332. 377, 377, 377, 377, 377, 377, 377, 377,
  2333. 377, 377, 377, 377, 377, 377, 377, 377,
  2334. 377, 377, 377, 377, 377, 377, 1, 377,
  2335. 377, 377, 377, 377, 377, 377, 377, 377,
  2336. 377, 377, 377, 377, 377, 377, 377, 377,
  2337. 377, 377, 377, 377, 377, 377, 377, 377,
  2338. 377, 377, 377, 377, 377, 377, 377, 1,
  2339. 379, 379, 379, 379, 379, 379, 379, 379,
  2340. 379, 379, 379, 379, 379, 379, 379, 379,
  2341. 379, 379, 379, 379, 379, 379, 379, 379,
  2342. 379, 379, 379, 379, 379, 379, 379, 379,
  2343. 379, 379, 379, 379, 379, 379, 379, 379,
  2344. 379, 379, 379, 379, 379, 379, 379, 379,
  2345. 1, 379, 379, 379, 379, 379, 379, 379,
  2346. 379, 379, 379, 379, 379, 379, 379, 379,
  2347. 379, 379, 379, 379, 379, 379, 379, 379,
  2348. 379, 379, 379, 379, 379, 379, 379, 379,
  2349. 379, 379, 379, 379, 379, 379, 379, 379,
  2350. 379, 379, 379, 379, 379, 379, 379, 379,
  2351. 379, 379, 379, 379, 379, 379, 379, 379,
  2352. 379, 379, 379, 379, 379, 379, 379, 379,
  2353. 379, 1, 379, 379, 379, 379, 379, 379,
  2354. 379, 379, 379, 379, 379, 379, 379, 379,
  2355. 379, 379, 1, 385, 1, 1, 1, 386,
  2356. 1, 1, 1, 1, 1, 1, 1, 1,
  2357. 1, 1, 1, 1, 1, 1, 1, 1,
  2358. 1, 1, 385, 1, 1, 1, 1, 1,
  2359. 1, 1, 387, 1, 1, 1, 1, 1,
  2360. 1, 1, 1, 1, 1, 1, 1, 1,
  2361. 1, 1, 1, 1, 1, 1, 388, 1,
  2362. 127, 1, 1, 1, 389, 1, 1, 1,
  2363. 1, 1, 1, 1, 1, 1, 1, 1,
  2364. 1, 1, 1, 1, 1, 1, 1, 127,
  2365. 1, 1, 1, 1, 1, 1, 1, 390,
  2366. 1, 1, 1, 1, 1, 1, 1, 1,
  2367. 1, 1, 1, 1, 1, 1, 1, 1,
  2368. 1, 1, 1, 4, 1, 391, 1, 1,
  2369. 1, 392, 1, 1, 1, 1, 1, 1,
  2370. 1, 1, 1, 1, 1, 1, 1, 1,
  2371. 1, 1, 1, 1, 391, 1, 1, 1,
  2372. 1, 1, 1, 1, 393, 1, 1, 1,
  2373. 1, 1, 1, 1, 1, 1, 1, 1,
  2374. 1, 1, 1, 1, 1, 1, 1, 1,
  2375. 9, 1, 1, 0,
  2376. ]
  2377. 1 class << self
  2378. 1 attr_accessor :_trans_targs
  2379. 1 private :_trans_targs, :_trans_targs=
  2380. end
  2381. 1 self._trans_targs = [
  2382. 1, 0, 2, 4, 5, 3, 1, 2,
  2383. 4, 5, 6, 7, 9, 170, 194, 195,
  2384. 163, 164, 165, 166, 167, 168, 169, 6,
  2385. 7, 194, 8, 10, 11, 9, 116, 13,
  2386. 142, 22, 163, 164, 165, 166, 167, 168,
  2387. 169, 10, 11, 13, 14, 22, 12, 10,
  2388. 11, 13, 14, 22, 15, 17, 103, 115,
  2389. 96, 97, 98, 99, 100, 101, 102, 16,
  2390. 18, 19, 21, 22, 20, 18, 19, 21,
  2391. 22, 23, 24, 92, 45, 80, 54, 94,
  2392. 81, 73, 74, 75, 76, 77, 78, 79,
  2393. 23, 24, 26, 45, 80, 54, 81, 73,
  2394. 74, 75, 76, 77, 78, 79, 25, 27,
  2395. 28, 30, 72, 208, 31, 29, 27, 28,
  2396. 30, 31, 208, 32, 34, 44, 37, 38,
  2397. 39, 40, 41, 42, 43, 33, 36, 209,
  2398. 32, 34, 44, 37, 38, 39, 40, 41,
  2399. 42, 43, 46, 70, 62, 63, 64, 65,
  2400. 66, 67, 68, 69, 47, 49, 48, 50,
  2401. 51, 53, 55, 56, 57, 58, 59, 60,
  2402. 61, 52, 50, 51, 53, 71, 23, 24,
  2403. 26, 45, 80, 54, 81, 73, 74, 75,
  2404. 76, 77, 78, 79, 82, 84, 85, 86,
  2405. 87, 88, 89, 90, 91, 83, 92, 93,
  2406. 208, 95, 104, 105, 18, 107, 108, 109,
  2407. 110, 111, 112, 113, 114, 104, 105, 18,
  2408. 107, 108, 109, 110, 111, 112, 113, 114,
  2409. 106, 15, 17, 103, 115, 96, 97, 98,
  2410. 99, 100, 101, 102, 117, 140, 132, 133,
  2411. 134, 135, 136, 137, 138, 139, 118, 120,
  2412. 119, 121, 122, 124, 125, 126, 127, 128,
  2413. 129, 130, 131, 121, 122, 124, 123, 121,
  2414. 122, 124, 141, 143, 144, 147, 146, 143,
  2415. 144, 146, 145, 143, 144, 146, 148, 160,
  2416. 161, 152, 153, 154, 155, 156, 157, 158,
  2417. 159, 148, 149, 151, 152, 153, 154, 155,
  2418. 156, 157, 158, 159, 150, 160, 161, 162,
  2419. 171, 187, 188, 190, 179, 180, 181, 182,
  2420. 183, 184, 185, 186, 171, 172, 174, 179,
  2421. 180, 181, 182, 183, 184, 185, 186, 173,
  2422. 175, 176, 178, 22, 175, 176, 178, 22,
  2423. 177, 175, 176, 178, 22, 187, 188, 190,
  2424. 189, 190, 191, 193, 22, 192, 190, 191,
  2425. 193, 22, 6, 7, 9, 170, 194, 195,
  2426. 163, 164, 165, 166, 167, 168, 169, 195,
  2427. 197, 198, 197, 211, 200, 201, 202, 203,
  2428. 204, 205, 206, 207, 197, 198, 197, 211,
  2429. 200, 201, 202, 203, 204, 205, 206, 207,
  2430. 199, 209, 35, 210, 5, 35, 210, 209,
  2431. 35, 210,
  2432. ]
  2433. 1 class << self
  2434. 1 attr_accessor :_trans_actions
  2435. 1 private :_trans_actions, :_trans_actions=
  2436. end
  2437. 1 self._trans_actions = [
  2438. 0, 0, 0, 1, 2, 0, 3, 3,
  2439. 4, 5, 6, 6, 6, 6, 7, 6,
  2440. 6, 6, 6, 6, 6, 6, 6, 0,
  2441. 0, 1, 0, 8, 8, 0, 0, 9,
  2442. 0, 10, 0, 0, 0, 0, 0, 0,
  2443. 0, 0, 0, 1, 0, 11, 0, 3,
  2444. 3, 4, 3, 12, 0, 0, 0, 1,
  2445. 0, 0, 0, 0, 0, 0, 0, 0,
  2446. 0, 0, 1, 0, 0, 3, 3, 4,
  2447. 3, 13, 13, 13, 13, 14, 13, 0,
  2448. 13, 13, 13, 13, 13, 13, 13, 13,
  2449. 0, 0, 0, 0, 1, 0, 0, 0,
  2450. 0, 0, 0, 0, 0, 0, 0, 0,
  2451. 0, 1, 0, 15, 0, 0, 3, 3,
  2452. 4, 3, 16, 0, 0, 1, 0, 0,
  2453. 0, 0, 0, 0, 0, 0, 0, 0,
  2454. 3, 3, 4, 3, 3, 3, 3, 3,
  2455. 3, 3, 0, 0, 0, 0, 0, 0,
  2456. 0, 0, 0, 0, 0, 0, 0, 0,
  2457. 0, 1, 0, 0, 0, 0, 0, 0,
  2458. 0, 0, 3, 3, 4, 0, 3, 3,
  2459. 3, 3, 4, 3, 3, 3, 3, 3,
  2460. 3, 3, 3, 3, 0, 0, 0, 0,
  2461. 0, 0, 0, 0, 0, 0, 0, 0,
  2462. 0, 0, 17, 17, 18, 17, 17, 17,
  2463. 17, 17, 17, 17, 17, 0, 0, 19,
  2464. 0, 0, 0, 0, 0, 0, 0, 0,
  2465. 0, 3, 3, 3, 4, 3, 3, 3,
  2466. 3, 3, 3, 3, 0, 0, 0, 0,
  2467. 0, 0, 0, 0, 0, 0, 0, 0,
  2468. 0, 8, 8, 9, 0, 0, 0, 0,
  2469. 0, 0, 0, 0, 0, 1, 0, 3,
  2470. 3, 4, 0, 8, 8, 0, 9, 0,
  2471. 0, 1, 0, 3, 3, 4, 17, 17,
  2472. 17, 17, 17, 17, 17, 17, 17, 17,
  2473. 17, 0, 0, 19, 0, 0, 0, 0,
  2474. 0, 0, 0, 0, 0, 0, 0, 0,
  2475. 17, 17, 17, 18, 17, 17, 17, 17,
  2476. 17, 17, 17, 17, 0, 0, 19, 0,
  2477. 0, 0, 0, 0, 0, 0, 0, 0,
  2478. 8, 8, 9, 20, 0, 0, 1, 21,
  2479. 0, 3, 3, 4, 22, 0, 0, 19,
  2480. 0, 0, 0, 1, 23, 0, 3, 3,
  2481. 4, 24, 3, 3, 25, 25, 4, 25,
  2482. 25, 25, 25, 25, 25, 25, 25, 0,
  2483. 26, 26, 27, 28, 26, 26, 26, 26,
  2484. 26, 26, 26, 26, 0, 0, 1, 29,
  2485. 0, 0, 0, 0, 0, 0, 0, 0,
  2486. 0, 30, 30, 31, 32, 0, 1, 3,
  2487. 3, 4,
  2488. ]
  2489. 1 class << self
  2490. 1 attr_accessor :_eof_actions
  2491. 1 private :_eof_actions, :_eof_actions=
  2492. end
  2493. 1 self._eof_actions = [
  2494. 0, 0, 0, 0, 0, 0, 0, 0,
  2495. 0, 0, 0, 0, 0, 0, 0, 0,
  2496. 0, 0, 0, 0, 0, 0, 0, 0,
  2497. 0, 0, 0, 0, 0, 0, 0, 0,
  2498. 0, 0, 0, 0, 0, 0, 0, 0,
  2499. 0, 0, 0, 0, 0, 0, 0, 0,
  2500. 0, 0, 0, 0, 0, 0, 0, 0,
  2501. 0, 0, 0, 0, 0, 0, 0, 0,
  2502. 0, 0, 0, 0, 0, 0, 0, 0,
  2503. 0, 0, 0, 0, 0, 0, 0, 0,
  2504. 0, 0, 0, 0, 0, 0, 0, 0,
  2505. 0, 0, 0, 0, 0, 0, 0, 0,
  2506. 0, 0, 0, 0, 0, 0, 0, 0,
  2507. 0, 0, 0, 0, 0, 0, 0, 0,
  2508. 0, 0, 0, 0, 0, 0, 0, 0,
  2509. 0, 0, 0, 0, 0, 0, 0, 0,
  2510. 0, 0, 0, 0, 0, 0, 0, 0,
  2511. 0, 0, 0, 0, 0, 0, 0, 0,
  2512. 0, 0, 0, 0, 0, 0, 0, 0,
  2513. 0, 0, 0, 0, 0, 0, 0, 0,
  2514. 0, 0, 0, 0, 0, 0, 0, 0,
  2515. 0, 0, 0, 0, 0, 0, 0, 0,
  2516. 0, 0, 0, 0, 0, 0, 0, 0,
  2517. 0, 0, 0, 0, 0, 0, 0, 0,
  2518. 0, 0, 0, 0, 0, 0, 0, 0,
  2519. 0, 0, 0, 0, 0, 0, 0, 0,
  2520. 30, 0, 3, 0,
  2521. ]
  2522. 1 class << self
  2523. 1 attr_accessor :start
  2524. end
  2525. 1 self.start = 1
  2526. 1 class << self
  2527. 1 attr_accessor :first_final
  2528. end
  2529. 1 self.first_final = 208
  2530. 1 class << self
  2531. 1 attr_accessor :error
  2532. end
  2533. 1 self.error = 0
  2534. 1 class << self
  2535. 1 attr_accessor :en_comment_tail
  2536. end
  2537. 1 self.en_comment_tail = 196
  2538. 1 class << self
  2539. 1 attr_accessor :en_main
  2540. end
  2541. 1 self.en_main = 1
  2542. 1 def self.parse(data)
  2543. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  2544. raise Mail::Field::NilParseError.new(Mail::MessageIdsElement) if data.nil?
  2545. # Parser state
  2546. message_ids = MessageIdsStruct.new([])
  2547. msg_id_s = nil
  2548. # 5.1 Variables Used by Ragel
  2549. p = 0
  2550. eof = pe = data.length
  2551. stack = []
  2552. begin
  2553. p ||= 0
  2554. pe ||= data.length
  2555. cs = start
  2556. top = 0
  2557. end
  2558. begin
  2559. testEof = false
  2560. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  2561. _goto_level = 0
  2562. _resume = 10
  2563. _eof_trans = 15
  2564. _again = 20
  2565. _test_eof = 30
  2566. _out = 40
  2567. while true
  2568. if _goto_level <= 0
  2569. if p == pe
  2570. _goto_level = _test_eof
  2571. next
  2572. end
  2573. if cs == 0
  2574. _goto_level = _out
  2575. next
  2576. end
  2577. end
  2578. if _goto_level <= _resume
  2579. _keys = cs << 1
  2580. _inds = _index_offsets[cs]
  2581. _slen = _key_spans[cs]
  2582. _wide = data[p].ord
  2583. _trans = if (_slen > 0 &&
  2584. _trans_keys[_keys] <= _wide &&
  2585. _wide <= _trans_keys[_keys + 1])
  2586. _indicies[_inds + _wide - _trans_keys[_keys]]
  2587. else
  2588. _indicies[_inds + _slen]
  2589. end
  2590. cs = _trans_targs[_trans]
  2591. if _trans_actions[_trans] != 0
  2592. case _trans_actions[_trans]
  2593. when 2
  2594. begin
  2595. msg_id_s = p
  2596. end
  2597. when 30
  2598. begin
  2599. message_ids.message_ids << chars(data, msg_id_s, p - 1).rstrip
  2600. end
  2601. when 3
  2602. begin
  2603. end
  2604. when 26
  2605. begin
  2606. end
  2607. when 15
  2608. begin
  2609. end
  2610. when 13
  2611. begin
  2612. end
  2613. when 11
  2614. begin
  2615. end
  2616. when 8
  2617. begin
  2618. end
  2619. when 6
  2620. begin
  2621. end
  2622. when 19
  2623. begin
  2624. end
  2625. when 17
  2626. begin
  2627. end
  2628. when 23
  2629. begin
  2630. end
  2631. when 1
  2632. begin
  2633. begin
  2634. stack[top] = cs
  2635. top += 1
  2636. cs = 196
  2637. _goto_level = _again
  2638. next
  2639. end
  2640. end
  2641. when 29
  2642. begin
  2643. begin
  2644. top -= 1
  2645. cs = stack[top]
  2646. _goto_level = _again
  2647. next
  2648. end
  2649. end
  2650. when 32
  2651. begin
  2652. message_ids.message_ids << chars(data, msg_id_s, p - 1).rstrip
  2653. end
  2654. begin
  2655. msg_id_s = p
  2656. end
  2657. when 31
  2658. begin
  2659. message_ids.message_ids << chars(data, msg_id_s, p - 1).rstrip
  2660. end
  2661. begin
  2662. begin
  2663. stack[top] = cs
  2664. top += 1
  2665. cs = 196
  2666. _goto_level = _again
  2667. next
  2668. end
  2669. end
  2670. when 5
  2671. begin
  2672. end
  2673. begin
  2674. msg_id_s = p
  2675. end
  2676. when 16
  2677. begin
  2678. end
  2679. begin
  2680. end
  2681. when 12
  2682. begin
  2683. end
  2684. begin
  2685. end
  2686. when 25
  2687. begin
  2688. end
  2689. begin
  2690. end
  2691. when 24
  2692. begin
  2693. end
  2694. begin
  2695. end
  2696. when 4
  2697. begin
  2698. end
  2699. begin
  2700. begin
  2701. stack[top] = cs
  2702. top += 1
  2703. cs = 196
  2704. _goto_level = _again
  2705. next
  2706. end
  2707. end
  2708. when 27
  2709. begin
  2710. end
  2711. begin
  2712. begin
  2713. stack[top] = cs
  2714. top += 1
  2715. cs = 196
  2716. _goto_level = _again
  2717. next
  2718. end
  2719. end
  2720. when 28
  2721. begin
  2722. end
  2723. begin
  2724. begin
  2725. top -= 1
  2726. cs = stack[top]
  2727. _goto_level = _again
  2728. next
  2729. end
  2730. end
  2731. when 14
  2732. begin
  2733. end
  2734. begin
  2735. begin
  2736. stack[top] = cs
  2737. top += 1
  2738. cs = 196
  2739. _goto_level = _again
  2740. next
  2741. end
  2742. end
  2743. when 21
  2744. begin
  2745. end
  2746. begin
  2747. end
  2748. when 10
  2749. begin
  2750. end
  2751. begin
  2752. end
  2753. when 9
  2754. begin
  2755. end
  2756. begin
  2757. begin
  2758. stack[top] = cs
  2759. top += 1
  2760. cs = 196
  2761. _goto_level = _again
  2762. next
  2763. end
  2764. end
  2765. when 7
  2766. begin
  2767. end
  2768. begin
  2769. begin
  2770. stack[top] = cs
  2771. top += 1
  2772. cs = 196
  2773. _goto_level = _again
  2774. next
  2775. end
  2776. end
  2777. when 18
  2778. begin
  2779. end
  2780. begin
  2781. end
  2782. when 22
  2783. begin
  2784. end
  2785. begin
  2786. end
  2787. begin
  2788. end
  2789. when 20
  2790. begin
  2791. end
  2792. begin
  2793. end
  2794. begin
  2795. end
  2796. end
  2797. end
  2798. end
  2799. if _goto_level <= _again
  2800. if cs == 0
  2801. _goto_level = _out
  2802. next
  2803. end
  2804. p += 1
  2805. if p != pe
  2806. _goto_level = _resume
  2807. next
  2808. end
  2809. end
  2810. if _goto_level <= _test_eof
  2811. if p == eof
  2812. case _eof_actions[cs]
  2813. when 30
  2814. begin
  2815. message_ids.message_ids << chars(data, msg_id_s, p - 1).rstrip
  2816. end
  2817. when 3
  2818. begin
  2819. end
  2820. end
  2821. end
  2822. end
  2823. if _goto_level <= _out
  2824. break
  2825. end
  2826. end
  2827. end
  2828. if p != eof || cs < 208
  2829. raise Mail::Field::IncompleteParseError.new(Mail::MessageIdsElement, data, p)
  2830. end
  2831. message_ids
  2832. end
  2833. end
  2834. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/mime_version_parser.rb

27.93% lines covered

179 relevant lines. 50 lines covered and 129 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module MimeVersionParser
  6. 1 extend Mail::ParserTools
  7. 1 MimeVersionStruct = Struct.new(:major, :minor, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 57, 10, 10,
  14. 9, 32, 9, 57, 40,
  15. 57, 46, 46, 40, 57,
  16. 48, 57, 10, 10, 9, 32,
  17. 1, 244, 1, 244, 10,
  18. 10, 9, 32, 0, 244,
  19. 128, 191, 160, 191, 128, 191,
  20. 128, 159, 144, 191, 128,
  21. 191, 128, 143, 9, 57,
  22. 9, 40, 9, 40, 0, 0,
  23. 0,
  24. ]
  25. 1 class << self
  26. 1 attr_accessor :_key_spans
  27. 1 private :_key_spans, :_key_spans=
  28. end
  29. 1 self._key_spans = [
  30. 0, 49, 1, 24, 49, 18, 1, 18,
  31. 10, 1, 24, 244, 244, 1, 24, 245,
  32. 64, 32, 64, 32, 48, 64, 16, 49,
  33. 32, 32, 0,
  34. ]
  35. 1 class << self
  36. 1 attr_accessor :_index_offsets
  37. 1 private :_index_offsets, :_index_offsets=
  38. end
  39. 1 self._index_offsets = [
  40. 0, 0, 50, 52, 77, 127, 146, 148,
  41. 167, 178, 180, 205, 450, 695, 697, 722,
  42. 968, 1033, 1066, 1131, 1164, 1213, 1278, 1295,
  43. 1345, 1378, 1411,
  44. ]
  45. 1 class << self
  46. 1 attr_accessor :_indicies
  47. 1 private :_indicies, :_indicies=
  48. end
  49. 1 self._indicies = [
  50. 0, 1, 1, 1, 2, 1, 1, 1,
  51. 1, 1, 1, 1, 1, 1, 1, 1,
  52. 1, 1, 1, 1, 1, 1, 1, 0,
  53. 1, 1, 1, 1, 1, 1, 1, 3,
  54. 1, 1, 1, 1, 1, 1, 1, 4,
  55. 4, 4, 4, 4, 4, 4, 4, 4,
  56. 4, 1, 5, 1, 0, 1, 1, 1,
  57. 1, 1, 1, 1, 1, 1, 1, 1,
  58. 1, 1, 1, 1, 1, 1, 1, 1,
  59. 1, 1, 1, 0, 1, 6, 1, 1,
  60. 1, 7, 1, 1, 1, 1, 1, 1,
  61. 1, 1, 1, 1, 1, 1, 1, 1,
  62. 1, 1, 1, 1, 6, 1, 1, 1,
  63. 1, 1, 1, 1, 8, 1, 1, 1,
  64. 1, 1, 1, 1, 9, 9, 9, 9,
  65. 9, 9, 9, 9, 9, 9, 1, 10,
  66. 1, 1, 1, 1, 1, 11, 1, 12,
  67. 12, 12, 12, 12, 12, 12, 12, 12,
  68. 12, 1, 13, 1, 14, 1, 1, 1,
  69. 1, 1, 1, 1, 15, 15, 15, 15,
  70. 15, 15, 15, 15, 15, 15, 1, 16,
  71. 16, 16, 16, 16, 16, 16, 16, 16,
  72. 16, 1, 17, 1, 18, 1, 1, 1,
  73. 1, 1, 1, 1, 1, 1, 1, 1,
  74. 1, 1, 1, 1, 1, 1, 1, 1,
  75. 1, 1, 1, 18, 1, 19, 19, 19,
  76. 19, 19, 19, 19, 19, 19, 1, 19,
  77. 19, 20, 19, 19, 19, 19, 19, 19,
  78. 19, 19, 19, 19, 19, 19, 19, 19,
  79. 19, 19, 19, 19, 19, 19, 19, 19,
  80. 19, 19, 19, 19, 21, 22, 19, 19,
  81. 19, 19, 19, 19, 19, 19, 19, 19,
  82. 19, 19, 19, 19, 19, 19, 19, 19,
  83. 19, 19, 19, 19, 19, 19, 19, 19,
  84. 19, 19, 19, 19, 19, 19, 19, 19,
  85. 19, 19, 19, 19, 19, 19, 19, 19,
  86. 19, 19, 19, 19, 19, 19, 19, 19,
  87. 23, 19, 19, 19, 19, 19, 19, 19,
  88. 19, 19, 19, 19, 19, 19, 19, 19,
  89. 19, 19, 19, 19, 19, 19, 19, 19,
  90. 19, 19, 19, 19, 19, 19, 19, 19,
  91. 19, 19, 19, 19, 1, 1, 1, 1,
  92. 1, 1, 1, 1, 1, 1, 1, 1,
  93. 1, 1, 1, 1, 1, 1, 1, 1,
  94. 1, 1, 1, 1, 1, 1, 1, 1,
  95. 1, 1, 1, 1, 1, 1, 1, 1,
  96. 1, 1, 1, 1, 1, 1, 1, 1,
  97. 1, 1, 1, 1, 1, 1, 1, 1,
  98. 1, 1, 1, 1, 1, 1, 1, 1,
  99. 1, 1, 1, 1, 1, 1, 24, 24,
  100. 24, 24, 24, 24, 24, 24, 24, 24,
  101. 24, 24, 24, 24, 24, 24, 24, 24,
  102. 24, 24, 24, 24, 24, 24, 24, 24,
  103. 24, 24, 24, 24, 25, 26, 26, 26,
  104. 26, 26, 26, 26, 26, 26, 26, 26,
  105. 26, 27, 26, 26, 28, 29, 29, 29,
  106. 30, 1, 31, 31, 31, 31, 31, 31,
  107. 31, 31, 31, 1, 31, 31, 32, 31,
  108. 31, 31, 31, 31, 31, 31, 31, 31,
  109. 31, 31, 31, 31, 31, 31, 31, 31,
  110. 31, 31, 31, 31, 31, 31, 31, 31,
  111. 31, 33, 34, 31, 31, 31, 31, 31,
  112. 31, 31, 31, 31, 31, 31, 31, 31,
  113. 31, 31, 31, 31, 31, 31, 31, 31,
  114. 31, 31, 31, 31, 31, 31, 31, 31,
  115. 31, 31, 31, 31, 31, 31, 31, 31,
  116. 31, 31, 31, 31, 31, 31, 31, 31,
  117. 31, 31, 31, 31, 31, 35, 31, 31,
  118. 31, 31, 31, 31, 31, 31, 31, 31,
  119. 31, 31, 31, 31, 31, 31, 31, 31,
  120. 31, 31, 31, 31, 31, 31, 31, 31,
  121. 31, 31, 31, 31, 31, 31, 31, 31,
  122. 31, 1, 1, 1, 1, 1, 1, 1,
  123. 1, 1, 1, 1, 1, 1, 1, 1,
  124. 1, 1, 1, 1, 1, 1, 1, 1,
  125. 1, 1, 1, 1, 1, 1, 1, 1,
  126. 1, 1, 1, 1, 1, 1, 1, 1,
  127. 1, 1, 1, 1, 1, 1, 1, 1,
  128. 1, 1, 1, 1, 1, 1, 1, 1,
  129. 1, 1, 1, 1, 1, 1, 1, 1,
  130. 1, 1, 1, 36, 36, 36, 36, 36,
  131. 36, 36, 36, 36, 36, 36, 36, 36,
  132. 36, 36, 36, 36, 36, 36, 36, 36,
  133. 36, 36, 36, 36, 36, 36, 36, 36,
  134. 36, 37, 38, 38, 38, 38, 38, 38,
  135. 38, 38, 38, 38, 38, 38, 39, 38,
  136. 38, 40, 41, 41, 41, 42, 1, 43,
  137. 1, 31, 1, 1, 1, 1, 1, 1,
  138. 1, 1, 1, 1, 1, 1, 1, 1,
  139. 1, 1, 1, 1, 1, 1, 1, 1,
  140. 31, 1, 31, 31, 31, 31, 31, 31,
  141. 31, 31, 31, 31, 31, 31, 31, 31,
  142. 31, 31, 31, 31, 31, 31, 31, 31,
  143. 31, 31, 31, 31, 31, 31, 31, 31,
  144. 31, 31, 31, 31, 31, 31, 31, 31,
  145. 31, 31, 31, 31, 31, 31, 31, 31,
  146. 31, 31, 31, 31, 31, 31, 31, 31,
  147. 31, 31, 31, 31, 31, 31, 31, 31,
  148. 31, 31, 31, 31, 31, 31, 31, 31,
  149. 31, 31, 31, 31, 31, 31, 31, 31,
  150. 31, 31, 31, 31, 31, 31, 31, 31,
  151. 31, 31, 31, 31, 31, 31, 31, 31,
  152. 31, 31, 31, 31, 31, 31, 31, 31,
  153. 31, 31, 31, 31, 31, 31, 31, 31,
  154. 31, 31, 31, 31, 31, 31, 31, 31,
  155. 31, 31, 31, 31, 31, 31, 31, 31,
  156. 31, 31, 1, 1, 1, 1, 1, 1,
  157. 1, 1, 1, 1, 1, 1, 1, 1,
  158. 1, 1, 1, 1, 1, 1, 1, 1,
  159. 1, 1, 1, 1, 1, 1, 1, 1,
  160. 1, 1, 1, 1, 1, 1, 1, 1,
  161. 1, 1, 1, 1, 1, 1, 1, 1,
  162. 1, 1, 1, 1, 1, 1, 1, 1,
  163. 1, 1, 1, 1, 1, 1, 1, 1,
  164. 1, 1, 1, 1, 36, 36, 36, 36,
  165. 36, 36, 36, 36, 36, 36, 36, 36,
  166. 36, 36, 36, 36, 36, 36, 36, 36,
  167. 36, 36, 36, 36, 36, 36, 36, 36,
  168. 36, 36, 37, 38, 38, 38, 38, 38,
  169. 38, 38, 38, 38, 38, 38, 38, 39,
  170. 38, 38, 40, 41, 41, 41, 42, 1,
  171. 31, 31, 31, 31, 31, 31, 31, 31,
  172. 31, 31, 31, 31, 31, 31, 31, 31,
  173. 31, 31, 31, 31, 31, 31, 31, 31,
  174. 31, 31, 31, 31, 31, 31, 31, 31,
  175. 31, 31, 31, 31, 31, 31, 31, 31,
  176. 31, 31, 31, 31, 31, 31, 31, 31,
  177. 31, 31, 31, 31, 31, 31, 31, 31,
  178. 31, 31, 31, 31, 31, 31, 31, 31,
  179. 1, 36, 36, 36, 36, 36, 36, 36,
  180. 36, 36, 36, 36, 36, 36, 36, 36,
  181. 36, 36, 36, 36, 36, 36, 36, 36,
  182. 36, 36, 36, 36, 36, 36, 36, 36,
  183. 36, 1, 36, 36, 36, 36, 36, 36,
  184. 36, 36, 36, 36, 36, 36, 36, 36,
  185. 36, 36, 36, 36, 36, 36, 36, 36,
  186. 36, 36, 36, 36, 36, 36, 36, 36,
  187. 36, 36, 36, 36, 36, 36, 36, 36,
  188. 36, 36, 36, 36, 36, 36, 36, 36,
  189. 36, 36, 36, 36, 36, 36, 36, 36,
  190. 36, 36, 36, 36, 36, 36, 36, 36,
  191. 36, 36, 1, 36, 36, 36, 36, 36,
  192. 36, 36, 36, 36, 36, 36, 36, 36,
  193. 36, 36, 36, 36, 36, 36, 36, 36,
  194. 36, 36, 36, 36, 36, 36, 36, 36,
  195. 36, 36, 36, 1, 38, 38, 38, 38,
  196. 38, 38, 38, 38, 38, 38, 38, 38,
  197. 38, 38, 38, 38, 38, 38, 38, 38,
  198. 38, 38, 38, 38, 38, 38, 38, 38,
  199. 38, 38, 38, 38, 38, 38, 38, 38,
  200. 38, 38, 38, 38, 38, 38, 38, 38,
  201. 38, 38, 38, 38, 1, 38, 38, 38,
  202. 38, 38, 38, 38, 38, 38, 38, 38,
  203. 38, 38, 38, 38, 38, 38, 38, 38,
  204. 38, 38, 38, 38, 38, 38, 38, 38,
  205. 38, 38, 38, 38, 38, 38, 38, 38,
  206. 38, 38, 38, 38, 38, 38, 38, 38,
  207. 38, 38, 38, 38, 38, 38, 38, 38,
  208. 38, 38, 38, 38, 38, 38, 38, 38,
  209. 38, 38, 38, 38, 38, 1, 38, 38,
  210. 38, 38, 38, 38, 38, 38, 38, 38,
  211. 38, 38, 38, 38, 38, 38, 1, 44,
  212. 1, 1, 1, 45, 1, 1, 1, 1,
  213. 1, 1, 1, 1, 1, 1, 1, 1,
  214. 1, 1, 1, 1, 1, 1, 44, 1,
  215. 1, 1, 1, 1, 1, 1, 46, 1,
  216. 1, 1, 1, 1, 1, 1, 47, 47,
  217. 47, 47, 47, 47, 47, 47, 47, 47,
  218. 1, 18, 1, 1, 1, 48, 1, 1,
  219. 1, 1, 1, 1, 1, 1, 1, 1,
  220. 1, 1, 1, 1, 1, 1, 1, 1,
  221. 18, 1, 1, 1, 1, 1, 1, 1,
  222. 49, 1, 50, 1, 1, 1, 51, 1,
  223. 1, 1, 1, 1, 1, 1, 1, 1,
  224. 1, 1, 1, 1, 1, 1, 1, 1,
  225. 1, 50, 1, 1, 1, 1, 1, 1,
  226. 1, 52, 1, 1, 0,
  227. ]
  228. 1 class << self
  229. 1 attr_accessor :_trans_targs
  230. 1 private :_trans_targs, :_trans_targs=
  231. end
  232. 1 self._trans_targs = [
  233. 1, 0, 2, 4, 5, 3, 1, 2,
  234. 4, 5, 6, 7, 5, 7, 8, 23,
  235. 23, 10, 24, 12, 13, 12, 26, 15,
  236. 16, 17, 18, 19, 20, 21, 22, 12,
  237. 13, 12, 26, 15, 16, 17, 18, 19,
  238. 20, 21, 22, 14, 24, 9, 25, 23,
  239. 9, 25, 24, 9, 25,
  240. ]
  241. 1 class << self
  242. 1 attr_accessor :_trans_actions
  243. 1 private :_trans_actions, :_trans_actions=
  244. end
  245. 1 self._trans_actions = [
  246. 0, 0, 0, 1, 2, 0, 3, 3,
  247. 4, 5, 6, 7, 0, 3, 1, 8,
  248. 9, 0, 0, 10, 10, 11, 12, 10,
  249. 10, 10, 10, 10, 10, 10, 10, 0,
  250. 0, 1, 13, 0, 0, 0, 0, 0,
  251. 0, 0, 0, 0, 14, 14, 15, 0,
  252. 0, 1, 3, 3, 4,
  253. ]
  254. 1 class << self
  255. 1 attr_accessor :_eof_actions
  256. 1 private :_eof_actions, :_eof_actions=
  257. end
  258. 1 self._eof_actions = [
  259. 0, 0, 0, 0, 0, 0, 0, 0,
  260. 0, 0, 0, 0, 0, 0, 0, 0,
  261. 0, 0, 0, 0, 0, 0, 0, 14,
  262. 0, 3, 0,
  263. ]
  264. 1 class << self
  265. 1 attr_accessor :start
  266. end
  267. 1 self.start = 1
  268. 1 class << self
  269. 1 attr_accessor :first_final
  270. end
  271. 1 self.first_final = 23
  272. 1 class << self
  273. 1 attr_accessor :error
  274. end
  275. 1 self.error = 0
  276. 1 class << self
  277. 1 attr_accessor :en_comment_tail
  278. end
  279. 1 self.en_comment_tail = 11
  280. 1 class << self
  281. 1 attr_accessor :en_main
  282. end
  283. 1 self.en_main = 1
  284. 1 def self.parse(data)
  285. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  286. return MimeVersionStruct.new("", nil) if Mail::Utilities.blank?(data)
  287. # Parser state
  288. mime_version = MimeVersionStruct.new
  289. major_digits_s = minor_digits_s = nil
  290. # 5.1 Variables Used by Ragel
  291. p = 0
  292. eof = pe = data.length
  293. stack = []
  294. begin
  295. p ||= 0
  296. pe ||= data.length
  297. cs = start
  298. top = 0
  299. end
  300. begin
  301. testEof = false
  302. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  303. _goto_level = 0
  304. _resume = 10
  305. _eof_trans = 15
  306. _again = 20
  307. _test_eof = 30
  308. _out = 40
  309. while true
  310. if _goto_level <= 0
  311. if p == pe
  312. _goto_level = _test_eof
  313. next
  314. end
  315. if cs == 0
  316. _goto_level = _out
  317. next
  318. end
  319. end
  320. if _goto_level <= _resume
  321. _keys = cs << 1
  322. _inds = _index_offsets[cs]
  323. _slen = _key_spans[cs]
  324. _wide = data[p].ord
  325. _trans = if (_slen > 0 &&
  326. _trans_keys[_keys] <= _wide &&
  327. _wide <= _trans_keys[_keys + 1])
  328. _indicies[_inds + _wide - _trans_keys[_keys]]
  329. else
  330. _indicies[_inds + _slen]
  331. end
  332. cs = _trans_targs[_trans]
  333. if _trans_actions[_trans] != 0
  334. case _trans_actions[_trans]
  335. when 2
  336. begin
  337. major_digits_s = p
  338. end
  339. when 7
  340. begin
  341. mime_version.major = chars(data, major_digits_s, p - 1)
  342. end
  343. when 8
  344. begin
  345. minor_digits_s = p
  346. end
  347. when 14
  348. begin
  349. mime_version.minor = chars(data, minor_digits_s, p - 1)
  350. end
  351. when 10
  352. begin
  353. end
  354. when 3
  355. begin
  356. end
  357. when 1
  358. begin
  359. begin
  360. stack[top] = cs
  361. top += 1
  362. cs = 11
  363. _goto_level = _again
  364. next
  365. end
  366. end
  367. when 13
  368. begin
  369. begin
  370. top -= 1
  371. cs = stack[top]
  372. _goto_level = _again
  373. next
  374. end
  375. end
  376. when 6
  377. begin
  378. mime_version.major = chars(data, major_digits_s, p - 1)
  379. end
  380. begin
  381. begin
  382. stack[top] = cs
  383. top += 1
  384. cs = 11
  385. _goto_level = _again
  386. next
  387. end
  388. end
  389. when 15
  390. begin
  391. mime_version.minor = chars(data, minor_digits_s, p - 1)
  392. end
  393. begin
  394. begin
  395. stack[top] = cs
  396. top += 1
  397. cs = 11
  398. _goto_level = _again
  399. next
  400. end
  401. end
  402. when 11
  403. begin
  404. end
  405. begin
  406. begin
  407. stack[top] = cs
  408. top += 1
  409. cs = 11
  410. _goto_level = _again
  411. next
  412. end
  413. end
  414. when 12
  415. begin
  416. end
  417. begin
  418. begin
  419. top -= 1
  420. cs = stack[top]
  421. _goto_level = _again
  422. next
  423. end
  424. end
  425. when 5
  426. begin
  427. end
  428. begin
  429. major_digits_s = p
  430. end
  431. when 9
  432. begin
  433. end
  434. begin
  435. minor_digits_s = p
  436. end
  437. when 4
  438. begin
  439. end
  440. begin
  441. begin
  442. stack[top] = cs
  443. top += 1
  444. cs = 11
  445. _goto_level = _again
  446. next
  447. end
  448. end
  449. end
  450. end
  451. end
  452. if _goto_level <= _again
  453. if cs == 0
  454. _goto_level = _out
  455. next
  456. end
  457. p += 1
  458. if p != pe
  459. _goto_level = _resume
  460. next
  461. end
  462. end
  463. if _goto_level <= _test_eof
  464. if p == eof
  465. case _eof_actions[cs]
  466. when 14
  467. begin
  468. mime_version.minor = chars(data, minor_digits_s, p - 1)
  469. end
  470. when 3
  471. begin
  472. end
  473. end
  474. end
  475. end
  476. if _goto_level <= _out
  477. break
  478. end
  479. end
  480. end
  481. if p != eof || cs < 23
  482. raise Mail::Field::IncompleteParseError.new(Mail::MimeVersionElement, data, p)
  483. end
  484. mime_version
  485. end
  486. end
  487. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/phrase_lists_parser.rb

28.9% lines covered

173 relevant lines. 50 lines covered and 123 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 class PhraseListsParser
  6. 1 extend Mail::ParserTools
  7. 1 PhraseListsStruct = Struct.new(:phrases, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 244, 9, 244,
  14. 10, 10, 9, 32, 10,
  15. 10, 9, 32, 1, 244,
  16. 1, 244, 10, 10, 9, 32,
  17. 0, 244, 128, 191, 160,
  18. 191, 128, 191, 128, 159,
  19. 144, 191, 128, 191, 128, 143,
  20. 9, 244, 10, 10, 9,
  21. 32, 9, 244, 128, 191,
  22. 160, 191, 128, 191, 128, 159,
  23. 144, 191, 128, 191, 128,
  24. 143, 1, 244, 1, 244,
  25. 10, 10, 9, 32, 0, 244,
  26. 128, 191, 160, 191, 128,
  27. 191, 128, 159, 144, 191,
  28. 128, 191, 128, 143, 9, 244,
  29. 9, 244, 9, 244, 0,
  30. 0, 0,
  31. ]
  32. 1 class << self
  33. 1 attr_accessor :_key_spans
  34. 1 private :_key_spans, :_key_spans=
  35. end
  36. 1 self._key_spans = [
  37. 0, 236, 236, 1, 24, 1, 24, 244,
  38. 244, 1, 24, 245, 64, 32, 64, 32,
  39. 48, 64, 16, 236, 1, 24, 236, 64,
  40. 32, 64, 32, 48, 64, 16, 244, 244,
  41. 1, 24, 245, 64, 32, 64, 32, 48,
  42. 64, 16, 236, 236, 236, 0,
  43. ]
  44. 1 class << self
  45. 1 attr_accessor :_index_offsets
  46. 1 private :_index_offsets, :_index_offsets=
  47. end
  48. 1 self._index_offsets = [
  49. 0, 0, 237, 474, 476, 501, 503, 528,
  50. 773, 1018, 1020, 1045, 1291, 1356, 1389, 1454,
  51. 1487, 1536, 1601, 1618, 1855, 1857, 1882, 2119,
  52. 2184, 2217, 2282, 2315, 2364, 2429, 2446, 2691,
  53. 2936, 2938, 2963, 3209, 3274, 3307, 3372, 3405,
  54. 3454, 3519, 3536, 3773, 4010, 4247,
  55. ]
  56. 1 class << self
  57. 1 attr_accessor :_indicies
  58. 1 private :_indicies, :_indicies=
  59. end
  60. 1 self._indicies = [
  61. 0, 1, 1, 1, 2, 1, 1, 1,
  62. 1, 1, 1, 1, 1, 1, 1, 1,
  63. 1, 1, 1, 1, 1, 1, 1, 0,
  64. 3, 4, 3, 3, 3, 3, 3, 5,
  65. 1, 3, 3, 1, 3, 6, 3, 3,
  66. 3, 3, 3, 3, 3, 3, 3, 3,
  67. 3, 1, 1, 1, 3, 1, 3, 6,
  68. 3, 3, 3, 3, 3, 3, 3, 3,
  69. 3, 3, 3, 3, 3, 3, 3, 3,
  70. 3, 3, 3, 3, 3, 3, 3, 3,
  71. 3, 3, 1, 1, 1, 3, 3, 3,
  72. 3, 3, 3, 3, 3, 3, 3, 3,
  73. 3, 3, 3, 3, 3, 3, 3, 3,
  74. 3, 3, 3, 3, 3, 3, 3, 3,
  75. 3, 3, 3, 3, 3, 3, 1, 1,
  76. 1, 1, 1, 1, 1, 1, 1, 1,
  77. 1, 1, 1, 1, 1, 1, 1, 1,
  78. 1, 1, 1, 1, 1, 1, 1, 1,
  79. 1, 1, 1, 1, 1, 1, 1, 1,
  80. 1, 1, 1, 1, 1, 1, 1, 1,
  81. 1, 1, 1, 1, 1, 1, 1, 1,
  82. 1, 1, 1, 1, 1, 1, 1, 1,
  83. 1, 1, 1, 1, 1, 1, 1, 1,
  84. 1, 7, 7, 7, 7, 7, 7, 7,
  85. 7, 7, 7, 7, 7, 7, 7, 7,
  86. 7, 7, 7, 7, 7, 7, 7, 7,
  87. 7, 7, 7, 7, 7, 7, 7, 8,
  88. 9, 9, 9, 9, 9, 9, 9, 9,
  89. 9, 9, 9, 9, 10, 9, 9, 11,
  90. 12, 12, 12, 13, 1, 14, 1, 1,
  91. 1, 15, 1, 1, 1, 1, 1, 1,
  92. 1, 1, 1, 1, 1, 1, 1, 1,
  93. 1, 1, 1, 1, 14, 16, 17, 16,
  94. 16, 16, 16, 16, 18, 1, 16, 16,
  95. 1, 16, 1, 16, 16, 16, 16, 16,
  96. 16, 16, 16, 16, 16, 16, 1, 1,
  97. 1, 16, 1, 16, 1, 16, 16, 16,
  98. 16, 16, 16, 16, 16, 16, 16, 16,
  99. 16, 16, 16, 16, 16, 16, 16, 16,
  100. 16, 16, 16, 16, 16, 16, 16, 1,
  101. 1, 1, 16, 16, 16, 16, 16, 16,
  102. 16, 16, 16, 16, 16, 16, 16, 16,
  103. 16, 16, 16, 16, 16, 16, 16, 16,
  104. 16, 16, 16, 16, 16, 16, 16, 16,
  105. 16, 16, 16, 1, 1, 1, 1, 1,
  106. 1, 1, 1, 1, 1, 1, 1, 1,
  107. 1, 1, 1, 1, 1, 1, 1, 1,
  108. 1, 1, 1, 1, 1, 1, 1, 1,
  109. 1, 1, 1, 1, 1, 1, 1, 1,
  110. 1, 1, 1, 1, 1, 1, 1, 1,
  111. 1, 1, 1, 1, 1, 1, 1, 1,
  112. 1, 1, 1, 1, 1, 1, 1, 1,
  113. 1, 1, 1, 1, 1, 1, 19, 19,
  114. 19, 19, 19, 19, 19, 19, 19, 19,
  115. 19, 19, 19, 19, 19, 19, 19, 19,
  116. 19, 19, 19, 19, 19, 19, 19, 19,
  117. 19, 19, 19, 19, 20, 21, 21, 21,
  118. 21, 21, 21, 21, 21, 21, 21, 21,
  119. 21, 22, 21, 21, 23, 24, 24, 24,
  120. 25, 1, 26, 1, 14, 1, 1, 1,
  121. 1, 1, 1, 1, 1, 1, 1, 1,
  122. 1, 1, 1, 1, 1, 1, 1, 1,
  123. 1, 1, 1, 14, 1, 27, 1, 16,
  124. 1, 1, 1, 1, 1, 1, 1, 1,
  125. 1, 1, 1, 1, 1, 1, 1, 1,
  126. 1, 1, 1, 1, 1, 1, 16, 1,
  127. 28, 28, 28, 28, 28, 28, 28, 28,
  128. 28, 1, 28, 28, 29, 28, 28, 28,
  129. 28, 28, 28, 28, 28, 28, 28, 28,
  130. 28, 28, 28, 28, 28, 28, 28, 28,
  131. 28, 30, 28, 28, 28, 28, 28, 28,
  132. 28, 28, 28, 28, 28, 28, 28, 28,
  133. 28, 28, 28, 28, 28, 28, 28, 28,
  134. 28, 28, 28, 28, 28, 28, 28, 28,
  135. 28, 28, 28, 28, 28, 28, 28, 28,
  136. 28, 28, 28, 28, 28, 28, 28, 28,
  137. 28, 28, 28, 28, 28, 28, 28, 28,
  138. 28, 28, 28, 31, 28, 28, 28, 28,
  139. 28, 28, 28, 28, 28, 28, 28, 28,
  140. 28, 28, 28, 28, 28, 28, 28, 28,
  141. 28, 28, 28, 28, 28, 28, 28, 28,
  142. 28, 28, 28, 28, 28, 28, 28, 1,
  143. 1, 1, 1, 1, 1, 1, 1, 1,
  144. 1, 1, 1, 1, 1, 1, 1, 1,
  145. 1, 1, 1, 1, 1, 1, 1, 1,
  146. 1, 1, 1, 1, 1, 1, 1, 1,
  147. 1, 1, 1, 1, 1, 1, 1, 1,
  148. 1, 1, 1, 1, 1, 1, 1, 1,
  149. 1, 1, 1, 1, 1, 1, 1, 1,
  150. 1, 1, 1, 1, 1, 1, 1, 1,
  151. 1, 32, 32, 32, 32, 32, 32, 32,
  152. 32, 32, 32, 32, 32, 32, 32, 32,
  153. 32, 32, 32, 32, 32, 32, 32, 32,
  154. 32, 32, 32, 32, 32, 32, 32, 33,
  155. 34, 34, 34, 34, 34, 34, 34, 34,
  156. 34, 34, 34, 34, 35, 34, 34, 36,
  157. 37, 37, 37, 38, 1, 39, 39, 39,
  158. 39, 39, 39, 39, 39, 39, 1, 39,
  159. 39, 40, 39, 39, 39, 39, 39, 39,
  160. 39, 39, 39, 39, 39, 39, 39, 39,
  161. 39, 39, 39, 39, 39, 39, 41, 39,
  162. 39, 39, 39, 39, 39, 39, 39, 39,
  163. 39, 39, 39, 39, 39, 39, 39, 39,
  164. 39, 39, 39, 39, 39, 39, 39, 39,
  165. 39, 39, 39, 39, 39, 39, 39, 39,
  166. 39, 39, 39, 39, 39, 39, 39, 39,
  167. 39, 39, 39, 39, 39, 39, 39, 39,
  168. 39, 39, 39, 39, 39, 39, 39, 39,
  169. 42, 39, 39, 39, 39, 39, 39, 39,
  170. 39, 39, 39, 39, 39, 39, 39, 39,
  171. 39, 39, 39, 39, 39, 39, 39, 39,
  172. 39, 39, 39, 39, 39, 39, 39, 39,
  173. 39, 39, 39, 39, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 1, 1, 1, 1, 1,
  176. 1, 1, 1, 1, 1, 1, 1, 1,
  177. 1, 1, 1, 1, 1, 1, 1, 1,
  178. 1, 1, 1, 1, 1, 1, 1, 1,
  179. 1, 1, 1, 1, 1, 1, 1, 1,
  180. 1, 1, 1, 1, 1, 1, 1, 1,
  181. 1, 1, 1, 1, 1, 1, 43, 43,
  182. 43, 43, 43, 43, 43, 43, 43, 43,
  183. 43, 43, 43, 43, 43, 43, 43, 43,
  184. 43, 43, 43, 43, 43, 43, 43, 43,
  185. 43, 43, 43, 43, 44, 45, 45, 45,
  186. 45, 45, 45, 45, 45, 45, 45, 45,
  187. 45, 46, 45, 45, 47, 48, 48, 48,
  188. 49, 1, 50, 1, 39, 1, 1, 1,
  189. 1, 1, 1, 1, 1, 1, 1, 1,
  190. 1, 1, 1, 1, 1, 1, 1, 1,
  191. 1, 1, 1, 39, 1, 39, 39, 39,
  192. 39, 39, 39, 39, 39, 39, 39, 39,
  193. 39, 39, 39, 39, 39, 39, 39, 39,
  194. 39, 39, 39, 39, 39, 39, 39, 39,
  195. 39, 39, 39, 39, 39, 39, 39, 39,
  196. 39, 39, 39, 39, 39, 39, 39, 39,
  197. 39, 39, 39, 39, 39, 39, 39, 39,
  198. 39, 39, 39, 39, 39, 39, 39, 39,
  199. 39, 39, 39, 39, 39, 39, 39, 39,
  200. 39, 39, 39, 39, 39, 39, 39, 39,
  201. 39, 39, 39, 39, 39, 39, 39, 39,
  202. 39, 39, 39, 39, 39, 39, 39, 39,
  203. 39, 39, 39, 39, 39, 39, 39, 39,
  204. 39, 39, 39, 39, 39, 39, 39, 39,
  205. 39, 39, 39, 39, 39, 39, 39, 39,
  206. 39, 39, 39, 39, 39, 39, 39, 39,
  207. 39, 39, 39, 39, 39, 1, 1, 1,
  208. 1, 1, 1, 1, 1, 1, 1, 1,
  209. 1, 1, 1, 1, 1, 1, 1, 1,
  210. 1, 1, 1, 1, 1, 1, 1, 1,
  211. 1, 1, 1, 1, 1, 1, 1, 1,
  212. 1, 1, 1, 1, 1, 1, 1, 1,
  213. 1, 1, 1, 1, 1, 1, 1, 1,
  214. 1, 1, 1, 1, 1, 1, 1, 1,
  215. 1, 1, 1, 1, 1, 1, 1, 43,
  216. 43, 43, 43, 43, 43, 43, 43, 43,
  217. 43, 43, 43, 43, 43, 43, 43, 43,
  218. 43, 43, 43, 43, 43, 43, 43, 43,
  219. 43, 43, 43, 43, 43, 44, 45, 45,
  220. 45, 45, 45, 45, 45, 45, 45, 45,
  221. 45, 45, 46, 45, 45, 47, 48, 48,
  222. 48, 49, 1, 39, 39, 39, 39, 39,
  223. 39, 39, 39, 39, 39, 39, 39, 39,
  224. 39, 39, 39, 39, 39, 39, 39, 39,
  225. 39, 39, 39, 39, 39, 39, 39, 39,
  226. 39, 39, 39, 39, 39, 39, 39, 39,
  227. 39, 39, 39, 39, 39, 39, 39, 39,
  228. 39, 39, 39, 39, 39, 39, 39, 39,
  229. 39, 39, 39, 39, 39, 39, 39, 39,
  230. 39, 39, 39, 1, 43, 43, 43, 43,
  231. 43, 43, 43, 43, 43, 43, 43, 43,
  232. 43, 43, 43, 43, 43, 43, 43, 43,
  233. 43, 43, 43, 43, 43, 43, 43, 43,
  234. 43, 43, 43, 43, 1, 43, 43, 43,
  235. 43, 43, 43, 43, 43, 43, 43, 43,
  236. 43, 43, 43, 43, 43, 43, 43, 43,
  237. 43, 43, 43, 43, 43, 43, 43, 43,
  238. 43, 43, 43, 43, 43, 43, 43, 43,
  239. 43, 43, 43, 43, 43, 43, 43, 43,
  240. 43, 43, 43, 43, 43, 43, 43, 43,
  241. 43, 43, 43, 43, 43, 43, 43, 43,
  242. 43, 43, 43, 43, 43, 1, 43, 43,
  243. 43, 43, 43, 43, 43, 43, 43, 43,
  244. 43, 43, 43, 43, 43, 43, 43, 43,
  245. 43, 43, 43, 43, 43, 43, 43, 43,
  246. 43, 43, 43, 43, 43, 43, 1, 45,
  247. 45, 45, 45, 45, 45, 45, 45, 45,
  248. 45, 45, 45, 45, 45, 45, 45, 45,
  249. 45, 45, 45, 45, 45, 45, 45, 45,
  250. 45, 45, 45, 45, 45, 45, 45, 45,
  251. 45, 45, 45, 45, 45, 45, 45, 45,
  252. 45, 45, 45, 45, 45, 45, 45, 1,
  253. 45, 45, 45, 45, 45, 45, 45, 45,
  254. 45, 45, 45, 45, 45, 45, 45, 45,
  255. 45, 45, 45, 45, 45, 45, 45, 45,
  256. 45, 45, 45, 45, 45, 45, 45, 45,
  257. 45, 45, 45, 45, 45, 45, 45, 45,
  258. 45, 45, 45, 45, 45, 45, 45, 45,
  259. 45, 45, 45, 45, 45, 45, 45, 45,
  260. 45, 45, 45, 45, 45, 45, 45, 45,
  261. 1, 45, 45, 45, 45, 45, 45, 45,
  262. 45, 45, 45, 45, 45, 45, 45, 45,
  263. 45, 1, 51, 1, 1, 1, 52, 1,
  264. 1, 1, 1, 1, 1, 1, 1, 1,
  265. 1, 1, 1, 1, 1, 1, 1, 1,
  266. 1, 51, 3, 4, 3, 3, 3, 3,
  267. 3, 5, 1, 3, 3, 1, 3, 6,
  268. 3, 3, 3, 3, 3, 3, 3, 3,
  269. 3, 3, 3, 1, 1, 1, 3, 1,
  270. 3, 6, 3, 3, 3, 3, 3, 3,
  271. 3, 3, 3, 3, 3, 3, 3, 3,
  272. 3, 3, 3, 3, 3, 3, 3, 3,
  273. 3, 3, 3, 3, 1, 1, 1, 3,
  274. 3, 3, 3, 3, 3, 3, 3, 3,
  275. 3, 3, 3, 3, 3, 3, 3, 3,
  276. 3, 3, 3, 3, 3, 3, 3, 3,
  277. 3, 3, 3, 3, 3, 3, 3, 3,
  278. 1, 1, 1, 1, 1, 1, 1, 1,
  279. 1, 1, 1, 1, 1, 1, 1, 1,
  280. 1, 1, 1, 1, 1, 1, 1, 1,
  281. 1, 1, 1, 1, 1, 1, 1, 1,
  282. 1, 1, 1, 1, 1, 1, 1, 1,
  283. 1, 1, 1, 1, 1, 1, 1, 1,
  284. 1, 1, 1, 1, 1, 1, 1, 1,
  285. 1, 1, 1, 1, 1, 1, 1, 1,
  286. 1, 1, 1, 7, 7, 7, 7, 7,
  287. 7, 7, 7, 7, 7, 7, 7, 7,
  288. 7, 7, 7, 7, 7, 7, 7, 7,
  289. 7, 7, 7, 7, 7, 7, 7, 7,
  290. 7, 8, 9, 9, 9, 9, 9, 9,
  291. 9, 9, 9, 9, 9, 9, 10, 9,
  292. 9, 11, 12, 12, 12, 13, 1, 53,
  293. 1, 54, 1, 1, 1, 1, 1, 1,
  294. 1, 1, 1, 1, 1, 1, 1, 1,
  295. 1, 1, 1, 1, 1, 1, 1, 1,
  296. 54, 1, 55, 1, 1, 1, 56, 1,
  297. 1, 1, 1, 1, 1, 1, 1, 1,
  298. 1, 1, 1, 1, 1, 1, 1, 1,
  299. 1, 55, 57, 58, 57, 57, 57, 57,
  300. 57, 59, 1, 57, 57, 1, 57, 1,
  301. 57, 57, 57, 57, 57, 57, 57, 57,
  302. 57, 57, 57, 1, 1, 1, 57, 1,
  303. 57, 1, 57, 57, 57, 57, 57, 57,
  304. 57, 57, 57, 57, 57, 57, 57, 57,
  305. 57, 57, 57, 57, 57, 57, 57, 57,
  306. 57, 57, 57, 57, 1, 1, 1, 57,
  307. 57, 57, 57, 57, 57, 57, 57, 57,
  308. 57, 57, 57, 57, 57, 57, 57, 57,
  309. 57, 57, 57, 57, 57, 57, 57, 57,
  310. 57, 57, 57, 57, 57, 57, 57, 57,
  311. 1, 1, 1, 1, 1, 1, 1, 1,
  312. 1, 1, 1, 1, 1, 1, 1, 1,
  313. 1, 1, 1, 1, 1, 1, 1, 1,
  314. 1, 1, 1, 1, 1, 1, 1, 1,
  315. 1, 1, 1, 1, 1, 1, 1, 1,
  316. 1, 1, 1, 1, 1, 1, 1, 1,
  317. 1, 1, 1, 1, 1, 1, 1, 1,
  318. 1, 1, 1, 1, 1, 1, 1, 1,
  319. 1, 1, 1, 60, 60, 60, 60, 60,
  320. 60, 60, 60, 60, 60, 60, 60, 60,
  321. 60, 60, 60, 60, 60, 60, 60, 60,
  322. 60, 60, 60, 60, 60, 60, 60, 60,
  323. 60, 61, 62, 62, 62, 62, 62, 62,
  324. 62, 62, 62, 62, 62, 62, 63, 62,
  325. 62, 64, 65, 65, 65, 66, 1, 16,
  326. 16, 16, 16, 16, 16, 16, 16, 16,
  327. 16, 16, 16, 16, 16, 16, 16, 16,
  328. 16, 16, 16, 16, 16, 16, 16, 16,
  329. 16, 16, 16, 16, 16, 16, 16, 16,
  330. 16, 16, 16, 16, 16, 16, 16, 16,
  331. 16, 16, 16, 16, 16, 16, 16, 16,
  332. 16, 16, 16, 16, 16, 16, 16, 16,
  333. 16, 16, 16, 16, 16, 16, 16, 1,
  334. 19, 19, 19, 19, 19, 19, 19, 19,
  335. 19, 19, 19, 19, 19, 19, 19, 19,
  336. 19, 19, 19, 19, 19, 19, 19, 19,
  337. 19, 19, 19, 19, 19, 19, 19, 19,
  338. 1, 19, 19, 19, 19, 19, 19, 19,
  339. 19, 19, 19, 19, 19, 19, 19, 19,
  340. 19, 19, 19, 19, 19, 19, 19, 19,
  341. 19, 19, 19, 19, 19, 19, 19, 19,
  342. 19, 19, 19, 19, 19, 19, 19, 19,
  343. 19, 19, 19, 19, 19, 19, 19, 19,
  344. 19, 19, 19, 19, 19, 19, 19, 19,
  345. 19, 19, 19, 19, 19, 19, 19, 19,
  346. 19, 1, 19, 19, 19, 19, 19, 19,
  347. 19, 19, 19, 19, 19, 19, 19, 19,
  348. 19, 19, 19, 19, 19, 19, 19, 19,
  349. 19, 19, 19, 19, 19, 19, 19, 19,
  350. 19, 19, 1, 21, 21, 21, 21, 21,
  351. 21, 21, 21, 21, 21, 21, 21, 21,
  352. 21, 21, 21, 21, 21, 21, 21, 21,
  353. 21, 21, 21, 21, 21, 21, 21, 21,
  354. 21, 21, 21, 21, 21, 21, 21, 21,
  355. 21, 21, 21, 21, 21, 21, 21, 21,
  356. 21, 21, 21, 1, 21, 21, 21, 21,
  357. 21, 21, 21, 21, 21, 21, 21, 21,
  358. 21, 21, 21, 21, 21, 21, 21, 21,
  359. 21, 21, 21, 21, 21, 21, 21, 21,
  360. 21, 21, 21, 21, 21, 21, 21, 21,
  361. 21, 21, 21, 21, 21, 21, 21, 21,
  362. 21, 21, 21, 21, 21, 21, 21, 21,
  363. 21, 21, 21, 21, 21, 21, 21, 21,
  364. 21, 21, 21, 21, 1, 21, 21, 21,
  365. 21, 21, 21, 21, 21, 21, 21, 21,
  366. 21, 21, 21, 21, 21, 1, 67, 67,
  367. 67, 67, 67, 67, 67, 67, 67, 1,
  368. 67, 67, 68, 67, 67, 67, 67, 67,
  369. 67, 67, 67, 67, 67, 67, 67, 67,
  370. 67, 67, 67, 67, 67, 67, 67, 67,
  371. 67, 67, 67, 67, 67, 69, 70, 67,
  372. 67, 67, 67, 67, 67, 67, 67, 67,
  373. 67, 67, 67, 67, 67, 67, 67, 67,
  374. 67, 67, 67, 67, 67, 67, 67, 67,
  375. 67, 67, 67, 67, 67, 67, 67, 67,
  376. 67, 67, 67, 67, 67, 67, 67, 67,
  377. 67, 67, 67, 67, 67, 67, 67, 67,
  378. 67, 71, 67, 67, 67, 67, 67, 67,
  379. 67, 67, 67, 67, 67, 67, 67, 67,
  380. 67, 67, 67, 67, 67, 67, 67, 67,
  381. 67, 67, 67, 67, 67, 67, 67, 67,
  382. 67, 67, 67, 67, 67, 1, 1, 1,
  383. 1, 1, 1, 1, 1, 1, 1, 1,
  384. 1, 1, 1, 1, 1, 1, 1, 1,
  385. 1, 1, 1, 1, 1, 1, 1, 1,
  386. 1, 1, 1, 1, 1, 1, 1, 1,
  387. 1, 1, 1, 1, 1, 1, 1, 1,
  388. 1, 1, 1, 1, 1, 1, 1, 1,
  389. 1, 1, 1, 1, 1, 1, 1, 1,
  390. 1, 1, 1, 1, 1, 1, 1, 72,
  391. 72, 72, 72, 72, 72, 72, 72, 72,
  392. 72, 72, 72, 72, 72, 72, 72, 72,
  393. 72, 72, 72, 72, 72, 72, 72, 72,
  394. 72, 72, 72, 72, 72, 73, 74, 74,
  395. 74, 74, 74, 74, 74, 74, 74, 74,
  396. 74, 74, 75, 74, 74, 76, 77, 77,
  397. 77, 78, 1, 79, 79, 79, 79, 79,
  398. 79, 79, 79, 79, 1, 79, 79, 80,
  399. 79, 79, 79, 79, 79, 79, 79, 79,
  400. 79, 79, 79, 79, 79, 79, 79, 79,
  401. 79, 79, 79, 79, 79, 79, 79, 79,
  402. 79, 79, 81, 82, 79, 79, 79, 79,
  403. 79, 79, 79, 79, 79, 79, 79, 79,
  404. 79, 79, 79, 79, 79, 79, 79, 79,
  405. 79, 79, 79, 79, 79, 79, 79, 79,
  406. 79, 79, 79, 79, 79, 79, 79, 79,
  407. 79, 79, 79, 79, 79, 79, 79, 79,
  408. 79, 79, 79, 79, 79, 79, 83, 79,
  409. 79, 79, 79, 79, 79, 79, 79, 79,
  410. 79, 79, 79, 79, 79, 79, 79, 79,
  411. 79, 79, 79, 79, 79, 79, 79, 79,
  412. 79, 79, 79, 79, 79, 79, 79, 79,
  413. 79, 79, 1, 1, 1, 1, 1, 1,
  414. 1, 1, 1, 1, 1, 1, 1, 1,
  415. 1, 1, 1, 1, 1, 1, 1, 1,
  416. 1, 1, 1, 1, 1, 1, 1, 1,
  417. 1, 1, 1, 1, 1, 1, 1, 1,
  418. 1, 1, 1, 1, 1, 1, 1, 1,
  419. 1, 1, 1, 1, 1, 1, 1, 1,
  420. 1, 1, 1, 1, 1, 1, 1, 1,
  421. 1, 1, 1, 1, 84, 84, 84, 84,
  422. 84, 84, 84, 84, 84, 84, 84, 84,
  423. 84, 84, 84, 84, 84, 84, 84, 84,
  424. 84, 84, 84, 84, 84, 84, 84, 84,
  425. 84, 84, 85, 86, 86, 86, 86, 86,
  426. 86, 86, 86, 86, 86, 86, 86, 87,
  427. 86, 86, 88, 89, 89, 89, 90, 1,
  428. 91, 1, 79, 1, 1, 1, 1, 1,
  429. 1, 1, 1, 1, 1, 1, 1, 1,
  430. 1, 1, 1, 1, 1, 1, 1, 1,
  431. 1, 79, 1, 79, 79, 79, 79, 79,
  432. 79, 79, 79, 79, 79, 79, 79, 79,
  433. 79, 79, 79, 79, 79, 79, 79, 79,
  434. 79, 79, 79, 79, 79, 79, 79, 79,
  435. 79, 79, 79, 79, 79, 79, 79, 79,
  436. 79, 79, 79, 79, 79, 79, 79, 79,
  437. 79, 79, 79, 79, 79, 79, 79, 79,
  438. 79, 79, 79, 79, 79, 79, 79, 79,
  439. 79, 79, 79, 79, 79, 79, 79, 79,
  440. 79, 79, 79, 79, 79, 79, 79, 79,
  441. 79, 79, 79, 79, 79, 79, 79, 79,
  442. 79, 79, 79, 79, 79, 79, 79, 79,
  443. 79, 79, 79, 79, 79, 79, 79, 79,
  444. 79, 79, 79, 79, 79, 79, 79, 79,
  445. 79, 79, 79, 79, 79, 79, 79, 79,
  446. 79, 79, 79, 79, 79, 79, 79, 79,
  447. 79, 79, 79, 1, 1, 1, 1, 1,
  448. 1, 1, 1, 1, 1, 1, 1, 1,
  449. 1, 1, 1, 1, 1, 1, 1, 1,
  450. 1, 1, 1, 1, 1, 1, 1, 1,
  451. 1, 1, 1, 1, 1, 1, 1, 1,
  452. 1, 1, 1, 1, 1, 1, 1, 1,
  453. 1, 1, 1, 1, 1, 1, 1, 1,
  454. 1, 1, 1, 1, 1, 1, 1, 1,
  455. 1, 1, 1, 1, 1, 84, 84, 84,
  456. 84, 84, 84, 84, 84, 84, 84, 84,
  457. 84, 84, 84, 84, 84, 84, 84, 84,
  458. 84, 84, 84, 84, 84, 84, 84, 84,
  459. 84, 84, 84, 85, 86, 86, 86, 86,
  460. 86, 86, 86, 86, 86, 86, 86, 86,
  461. 87, 86, 86, 88, 89, 89, 89, 90,
  462. 1, 79, 79, 79, 79, 79, 79, 79,
  463. 79, 79, 79, 79, 79, 79, 79, 79,
  464. 79, 79, 79, 79, 79, 79, 79, 79,
  465. 79, 79, 79, 79, 79, 79, 79, 79,
  466. 79, 79, 79, 79, 79, 79, 79, 79,
  467. 79, 79, 79, 79, 79, 79, 79, 79,
  468. 79, 79, 79, 79, 79, 79, 79, 79,
  469. 79, 79, 79, 79, 79, 79, 79, 79,
  470. 79, 1, 84, 84, 84, 84, 84, 84,
  471. 84, 84, 84, 84, 84, 84, 84, 84,
  472. 84, 84, 84, 84, 84, 84, 84, 84,
  473. 84, 84, 84, 84, 84, 84, 84, 84,
  474. 84, 84, 1, 84, 84, 84, 84, 84,
  475. 84, 84, 84, 84, 84, 84, 84, 84,
  476. 84, 84, 84, 84, 84, 84, 84, 84,
  477. 84, 84, 84, 84, 84, 84, 84, 84,
  478. 84, 84, 84, 84, 84, 84, 84, 84,
  479. 84, 84, 84, 84, 84, 84, 84, 84,
  480. 84, 84, 84, 84, 84, 84, 84, 84,
  481. 84, 84, 84, 84, 84, 84, 84, 84,
  482. 84, 84, 84, 1, 84, 84, 84, 84,
  483. 84, 84, 84, 84, 84, 84, 84, 84,
  484. 84, 84, 84, 84, 84, 84, 84, 84,
  485. 84, 84, 84, 84, 84, 84, 84, 84,
  486. 84, 84, 84, 84, 1, 86, 86, 86,
  487. 86, 86, 86, 86, 86, 86, 86, 86,
  488. 86, 86, 86, 86, 86, 86, 86, 86,
  489. 86, 86, 86, 86, 86, 86, 86, 86,
  490. 86, 86, 86, 86, 86, 86, 86, 86,
  491. 86, 86, 86, 86, 86, 86, 86, 86,
  492. 86, 86, 86, 86, 86, 1, 86, 86,
  493. 86, 86, 86, 86, 86, 86, 86, 86,
  494. 86, 86, 86, 86, 86, 86, 86, 86,
  495. 86, 86, 86, 86, 86, 86, 86, 86,
  496. 86, 86, 86, 86, 86, 86, 86, 86,
  497. 86, 86, 86, 86, 86, 86, 86, 86,
  498. 86, 86, 86, 86, 86, 86, 86, 86,
  499. 86, 86, 86, 86, 86, 86, 86, 86,
  500. 86, 86, 86, 86, 86, 86, 1, 86,
  501. 86, 86, 86, 86, 86, 86, 86, 86,
  502. 86, 86, 86, 86, 86, 86, 86, 1,
  503. 16, 1, 1, 1, 92, 1, 1, 1,
  504. 1, 1, 1, 1, 1, 1, 1, 1,
  505. 1, 1, 1, 1, 1, 1, 1, 16,
  506. 16, 17, 16, 16, 16, 16, 16, 93,
  507. 1, 16, 16, 94, 16, 95, 16, 16,
  508. 16, 16, 16, 16, 16, 16, 16, 16,
  509. 16, 1, 1, 1, 16, 1, 16, 95,
  510. 16, 16, 16, 16, 16, 16, 16, 16,
  511. 16, 16, 16, 16, 16, 16, 16, 16,
  512. 16, 16, 16, 16, 16, 16, 16, 16,
  513. 16, 16, 1, 1, 1, 16, 16, 16,
  514. 16, 16, 16, 16, 16, 16, 16, 16,
  515. 16, 16, 16, 16, 16, 16, 16, 16,
  516. 16, 16, 16, 16, 16, 16, 16, 16,
  517. 16, 16, 16, 16, 16, 16, 1, 1,
  518. 1, 1, 1, 1, 1, 1, 1, 1,
  519. 1, 1, 1, 1, 1, 1, 1, 1,
  520. 1, 1, 1, 1, 1, 1, 1, 1,
  521. 1, 1, 1, 1, 1, 1, 1, 1,
  522. 1, 1, 1, 1, 1, 1, 1, 1,
  523. 1, 1, 1, 1, 1, 1, 1, 1,
  524. 1, 1, 1, 1, 1, 1, 1, 1,
  525. 1, 1, 1, 1, 1, 1, 1, 1,
  526. 1, 19, 19, 19, 19, 19, 19, 19,
  527. 19, 19, 19, 19, 19, 19, 19, 19,
  528. 19, 19, 19, 19, 19, 19, 19, 19,
  529. 19, 19, 19, 19, 19, 19, 19, 20,
  530. 21, 21, 21, 21, 21, 21, 21, 21,
  531. 21, 21, 21, 21, 22, 21, 21, 23,
  532. 24, 24, 24, 25, 1, 57, 1, 1,
  533. 1, 96, 1, 1, 1, 1, 1, 1,
  534. 1, 1, 1, 1, 1, 1, 1, 1,
  535. 1, 1, 1, 1, 57, 57, 58, 57,
  536. 57, 57, 57, 57, 97, 1, 57, 57,
  537. 98, 57, 99, 57, 57, 57, 57, 57,
  538. 57, 57, 57, 57, 57, 57, 1, 1,
  539. 1, 57, 1, 57, 99, 57, 57, 57,
  540. 57, 57, 57, 57, 57, 57, 57, 57,
  541. 57, 57, 57, 57, 57, 57, 57, 57,
  542. 57, 57, 57, 57, 57, 57, 57, 1,
  543. 1, 1, 57, 57, 57, 57, 57, 57,
  544. 57, 57, 57, 57, 57, 57, 57, 57,
  545. 57, 57, 57, 57, 57, 57, 57, 57,
  546. 57, 57, 57, 57, 57, 57, 57, 57,
  547. 57, 57, 57, 1, 1, 1, 1, 1,
  548. 1, 1, 1, 1, 1, 1, 1, 1,
  549. 1, 1, 1, 1, 1, 1, 1, 1,
  550. 1, 1, 1, 1, 1, 1, 1, 1,
  551. 1, 1, 1, 1, 1, 1, 1, 1,
  552. 1, 1, 1, 1, 1, 1, 1, 1,
  553. 1, 1, 1, 1, 1, 1, 1, 1,
  554. 1, 1, 1, 1, 1, 1, 1, 1,
  555. 1, 1, 1, 1, 1, 1, 60, 60,
  556. 60, 60, 60, 60, 60, 60, 60, 60,
  557. 60, 60, 60, 60, 60, 60, 60, 60,
  558. 60, 60, 60, 60, 60, 60, 60, 60,
  559. 60, 60, 60, 60, 61, 62, 62, 62,
  560. 62, 62, 62, 62, 62, 62, 62, 62,
  561. 62, 63, 62, 62, 64, 65, 65, 65,
  562. 66, 1, 14, 1, 1, 1, 15, 1,
  563. 1, 1, 1, 1, 1, 1, 1, 1,
  564. 1, 1, 1, 1, 1, 1, 1, 1,
  565. 1, 14, 16, 17, 16, 16, 16, 16,
  566. 16, 18, 1, 16, 16, 94, 16, 95,
  567. 16, 16, 16, 16, 16, 16, 16, 16,
  568. 16, 16, 16, 1, 1, 1, 16, 1,
  569. 16, 95, 16, 16, 16, 16, 16, 16,
  570. 16, 16, 16, 16, 16, 16, 16, 16,
  571. 16, 16, 16, 16, 16, 16, 16, 16,
  572. 16, 16, 16, 16, 1, 1, 1, 16,
  573. 16, 16, 16, 16, 16, 16, 16, 16,
  574. 16, 16, 16, 16, 16, 16, 16, 16,
  575. 16, 16, 16, 16, 16, 16, 16, 16,
  576. 16, 16, 16, 16, 16, 16, 16, 16,
  577. 1, 1, 1, 1, 1, 1, 1, 1,
  578. 1, 1, 1, 1, 1, 1, 1, 1,
  579. 1, 1, 1, 1, 1, 1, 1, 1,
  580. 1, 1, 1, 1, 1, 1, 1, 1,
  581. 1, 1, 1, 1, 1, 1, 1, 1,
  582. 1, 1, 1, 1, 1, 1, 1, 1,
  583. 1, 1, 1, 1, 1, 1, 1, 1,
  584. 1, 1, 1, 1, 1, 1, 1, 1,
  585. 1, 1, 1, 19, 19, 19, 19, 19,
  586. 19, 19, 19, 19, 19, 19, 19, 19,
  587. 19, 19, 19, 19, 19, 19, 19, 19,
  588. 19, 19, 19, 19, 19, 19, 19, 19,
  589. 19, 20, 21, 21, 21, 21, 21, 21,
  590. 21, 21, 21, 21, 21, 21, 22, 21,
  591. 21, 23, 24, 24, 24, 25, 1, 1,
  592. 0,
  593. ]
  594. 1 class << self
  595. 1 attr_accessor :_trans_targs
  596. 1 private :_trans_targs, :_trans_targs=
  597. end
  598. 1 self._trans_targs = [
  599. 2, 0, 3, 42, 7, 22, 44, 23,
  600. 24, 25, 26, 27, 28, 29, 2, 3,
  601. 42, 7, 22, 23, 24, 25, 26, 27,
  602. 28, 29, 4, 6, 8, 9, 42, 11,
  603. 12, 13, 14, 15, 16, 17, 18, 8,
  604. 9, 42, 11, 12, 13, 14, 15, 16,
  605. 17, 18, 10, 19, 20, 21, 19, 2,
  606. 3, 42, 7, 22, 23, 24, 25, 26,
  607. 27, 28, 29, 31, 32, 31, 45, 34,
  608. 35, 36, 37, 38, 39, 40, 41, 31,
  609. 32, 31, 45, 34, 35, 36, 37, 38,
  610. 39, 40, 41, 33, 5, 43, 19, 44,
  611. 5, 43, 19, 44,
  612. ]
  613. 1 class << self
  614. 1 attr_accessor :_trans_actions
  615. 1 private :_trans_actions, :_trans_actions=
  616. end
  617. 1 self._trans_actions = [
  618. 1, 0, 1, 1, 1, 2, 1, 1,
  619. 1, 1, 1, 1, 1, 1, 0, 0,
  620. 0, 0, 3, 0, 0, 0, 0, 0,
  621. 0, 0, 0, 0, 4, 4, 5, 4,
  622. 4, 4, 4, 4, 4, 4, 4, 0,
  623. 0, 6, 0, 0, 0, 0, 0, 0,
  624. 0, 0, 0, 1, 1, 0, 0, 7,
  625. 7, 7, 7, 8, 7, 7, 7, 7,
  626. 7, 7, 7, 9, 9, 10, 11, 9,
  627. 9, 9, 9, 9, 9, 9, 9, 0,
  628. 0, 3, 12, 0, 0, 0, 0, 0,
  629. 0, 0, 0, 0, 0, 3, 13, 0,
  630. 7, 8, 14, 7,
  631. ]
  632. 1 class << self
  633. 1 attr_accessor :_eof_actions
  634. 1 private :_eof_actions, :_eof_actions=
  635. end
  636. 1 self._eof_actions = [
  637. 0, 0, 0, 0, 0, 0, 0, 0,
  638. 0, 0, 0, 0, 0, 0, 0, 0,
  639. 0, 0, 0, 0, 0, 0, 0, 0,
  640. 0, 0, 0, 0, 0, 0, 0, 0,
  641. 0, 0, 0, 0, 0, 0, 0, 0,
  642. 0, 0, 13, 14, 13, 0,
  643. ]
  644. 1 class << self
  645. 1 attr_accessor :start
  646. end
  647. 1 self.start = 1
  648. 1 class << self
  649. 1 attr_accessor :first_final
  650. end
  651. 1 self.first_final = 42
  652. 1 class << self
  653. 1 attr_accessor :error
  654. end
  655. 1 self.error = 0
  656. 1 class << self
  657. 1 attr_accessor :en_comment_tail
  658. end
  659. 1 self.en_comment_tail = 30
  660. 1 class << self
  661. 1 attr_accessor :en_main
  662. end
  663. 1 self.en_main = 1
  664. 1 def self.parse(data)
  665. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  666. raise Mail::Field::NilParseError.new(Mail::PhraseList) if data.nil?
  667. # Parser state
  668. phrase_lists = PhraseListsStruct.new([])
  669. phrase_s = nil
  670. # 5.1 Variables Used by Ragel
  671. p = 0
  672. eof = pe = data.length
  673. stack = []
  674. begin
  675. p ||= 0
  676. pe ||= data.length
  677. cs = start
  678. top = 0
  679. end
  680. begin
  681. testEof = false
  682. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  683. _goto_level = 0
  684. _resume = 10
  685. _eof_trans = 15
  686. _again = 20
  687. _test_eof = 30
  688. _out = 40
  689. while true
  690. if _goto_level <= 0
  691. if p == pe
  692. _goto_level = _test_eof
  693. next
  694. end
  695. if cs == 0
  696. _goto_level = _out
  697. next
  698. end
  699. end
  700. if _goto_level <= _resume
  701. _keys = cs << 1
  702. _inds = _index_offsets[cs]
  703. _slen = _key_spans[cs]
  704. _wide = data[p].ord
  705. _trans = if (_slen > 0 &&
  706. _trans_keys[_keys] <= _wide &&
  707. _wide <= _trans_keys[_keys + 1])
  708. _indicies[_inds + _wide - _trans_keys[_keys]]
  709. else
  710. _indicies[_inds + _slen]
  711. end
  712. cs = _trans_targs[_trans]
  713. if _trans_actions[_trans] != 0
  714. case _trans_actions[_trans]
  715. when 1
  716. begin
  717. phrase_s = p
  718. end
  719. when 13
  720. begin
  721. phrase_lists.phrases << chars(data, phrase_s, p - 1) if phrase_s
  722. phrase_s = nil
  723. end
  724. when 7
  725. begin
  726. end
  727. when 9
  728. begin
  729. end
  730. when 6
  731. begin
  732. end
  733. when 4
  734. begin
  735. end
  736. when 3
  737. begin
  738. begin
  739. stack[top] = cs
  740. top += 1
  741. cs = 30
  742. _goto_level = _again
  743. next
  744. end
  745. end
  746. when 12
  747. begin
  748. begin
  749. top -= 1
  750. cs = stack[top]
  751. _goto_level = _again
  752. next
  753. end
  754. end
  755. when 2
  756. begin
  757. phrase_s = p
  758. end
  759. begin
  760. begin
  761. stack[top] = cs
  762. top += 1
  763. cs = 30
  764. _goto_level = _again
  765. next
  766. end
  767. end
  768. when 14
  769. begin
  770. end
  771. begin
  772. phrase_lists.phrases << chars(data, phrase_s, p - 1) if phrase_s
  773. phrase_s = nil
  774. end
  775. when 8
  776. begin
  777. end
  778. begin
  779. begin
  780. stack[top] = cs
  781. top += 1
  782. cs = 30
  783. _goto_level = _again
  784. next
  785. end
  786. end
  787. when 10
  788. begin
  789. end
  790. begin
  791. begin
  792. stack[top] = cs
  793. top += 1
  794. cs = 30
  795. _goto_level = _again
  796. next
  797. end
  798. end
  799. when 11
  800. begin
  801. end
  802. begin
  803. begin
  804. top -= 1
  805. cs = stack[top]
  806. _goto_level = _again
  807. next
  808. end
  809. end
  810. when 5
  811. begin
  812. end
  813. begin
  814. end
  815. end
  816. end
  817. end
  818. if _goto_level <= _again
  819. if cs == 0
  820. _goto_level = _out
  821. next
  822. end
  823. p += 1
  824. if p != pe
  825. _goto_level = _resume
  826. next
  827. end
  828. end
  829. if _goto_level <= _test_eof
  830. if p == eof
  831. case _eof_actions[cs]
  832. when 13
  833. begin
  834. phrase_lists.phrases << chars(data, phrase_s, p - 1) if phrase_s
  835. phrase_s = nil
  836. end
  837. when 14
  838. begin
  839. end
  840. begin
  841. phrase_lists.phrases << chars(data, phrase_s, p - 1) if phrase_s
  842. phrase_s = nil
  843. end
  844. end
  845. end
  846. end
  847. if _goto_level <= _out
  848. break
  849. end
  850. end
  851. end
  852. if p != eof || cs < 42
  853. raise Mail::Field::IncompleteParseError.new(Mail::PhraseListsElement, data, p)
  854. end
  855. phrase_lists
  856. end
  857. end
  858. end

target/rubygems/gems/mail-2.7.1/lib/mail/parsers/received_parser.rb

6.89% lines covered

726 relevant lines. 50 lines covered and 676 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "mail/utilities"
  3. 1 require "mail/parser_tools"
  4. 1 module Mail::Parsers
  5. 1 module ReceivedParser
  6. 1 extend Mail::ParserTools
  7. 1 ReceivedStruct = Struct.new(:date, :time, :info, :error)
  8. 1 class << self
  9. 1 attr_accessor :_trans_keys
  10. 1 private :_trans_keys, :_trans_keys=
  11. end
  12. 1 self._trans_keys = [
  13. 0, 0, 9, 244, 9, 244,
  14. 10, 10, 9, 32, 9,
  15. 244, 9, 244, 10, 10,
  16. 9, 32, 1, 244, 1, 244,
  17. 10, 10, 9, 32, 9,
  18. 244, 9, 244, 10, 10,
  19. 9, 32, 9, 244, 9, 244,
  20. 9, 244, 10, 10, 9,
  21. 32, 9, 244, 10, 10,
  22. 9, 32, 9, 244, 9, 87,
  23. 9, 87, 10, 10, 9,
  24. 32, 9, 87, 9, 83,
  25. 9, 83, 10, 10, 9, 32,
  26. 9, 83, 112, 117, 114,
  27. 114, 9, 57, 10, 10,
  28. 9, 32, 9, 57, 48, 57,
  29. 9, 57, 9, 57, 10,
  30. 10, 9, 32, 9, 57,
  31. 48, 57, 9, 58, 10, 10,
  32. 9, 32, 9, 58, 9,
  33. 57, 10, 10, 9, 32,
  34. 9, 57, 48, 57, 9, 58,
  35. 9, 122, 10, 10, 9,
  36. 32, 9, 58, 9, 57,
  37. 10, 10, 9, 32, 9, 57,
  38. 48, 57, 9, 40, 9,
  39. 122, 10, 10, 9, 32,
  40. 9, 40, 48, 57, 48, 57,
  41. 48, 57, 48, 57, 10,
  42. 10, 9, 32, 84, 84,
  43. 103, 103, 101, 101, 99, 99,
  44. 101, 101, 98, 98, 97,
  45. 117, 110, 110, 108, 110,
  46. 97, 97, 114, 121, 111, 111,
  47. 118, 118, 99, 99, 116,
  48. 116, 101, 101, 112, 112,
  49. 114, 114, 105, 105, 9, 44,
  50. 10, 10, 9, 32, 9,
  51. 44, 9, 57, 9, 57,
  52. 10, 10, 9, 32, 9, 57,
  53. 111, 111, 110, 110, 97,
  54. 117, 116, 116, 104, 117,
  55. 117, 117, 101, 101, 101, 101,
  56. 100, 100, 9, 244, 9,
  57. 244, 10, 10, 9, 32,
  58. 9, 244, 9, 64, 10, 10,
  59. 9, 32, 9, 64, 9,
  60. 244, 10, 10, 9, 32,
  61. 9, 244, 9, 64, 10, 10,
  62. 9, 32, 9, 64, 9,
  63. 244, 9, 244, 10, 10,
  64. 9, 32, 9, 244, 9, 62,
  65. 10, 10, 9, 32, 9,
  66. 62, 9, 244, 10, 10,
  67. 9, 32, 9, 244, 128, 191,
  68. 160, 191, 128, 191, 128,
  69. 159, 144, 191, 128, 191,
  70. 128, 143, 9, 244, 1, 244,
  71. 1, 244, 10, 10, 9,
  72. 32, 9, 244, 9, 62,
  73. 10, 10, 9, 32, 9, 62,
  74. 33, 244, 128, 191, 160,
  75. 191, 128, 191, 128, 159,
  76. 144, 191, 128, 191, 128, 143,
  77. 0, 244, 128, 191, 160,
  78. 191, 128, 191, 128, 159,
  79. 144, 191, 128, 191, 128, 143,
  80. 10, 10, 9, 32, 9,
  81. 244, 128, 191, 160, 191,
  82. 128, 191, 128, 159, 144, 191,
  83. 128, 191, 128, 143, 9,
  84. 244, 1, 244, 10, 10,
  85. 9, 32, 0, 244, 128, 191,
  86. 160, 191, 128, 191, 128,
  87. 159, 144, 191, 128, 191,
  88. 128, 143, 128, 191, 160, 191,
  89. 128, 191, 128, 159, 144,
  90. 191, 128, 191, 128, 143,
  91. 1, 244, 1, 244, 10, 10,
  92. 9, 32, 0, 244, 128,
  93. 191, 160, 191, 128, 191,
  94. 128, 159, 144, 191, 128, 191,
  95. 128, 143, 9, 244, 1,
  96. 244, 1, 244, 10, 10,
  97. 9, 32, 9, 244, 9, 64,
  98. 10, 10, 9, 32, 9,
  99. 64, 128, 191, 160, 191,
  100. 128, 191, 128, 159, 144, 191,
  101. 128, 191, 128, 143, 0,
  102. 244, 128, 191, 160, 191,
  103. 128, 191, 128, 159, 144, 191,
  104. 128, 191, 128, 143, 10,
  105. 10, 9, 32, 9, 244,
  106. 9, 244, 10, 10, 9, 32,
  107. 9, 244, 1, 244, 1,
  108. 244, 10, 10, 9, 32,
  109. 9, 244, 0, 244, 128, 191,
  110. 160, 191, 128, 191, 128,
  111. 159, 144, 191, 128, 191,
  112. 128, 143, 1, 244, 10, 10,
  113. 9, 32, 128, 191, 160,
  114. 191, 128, 191, 128, 159,
  115. 144, 191, 128, 191, 128, 143,
  116. 1, 244, 1, 244, 10,
  117. 10, 9, 32, 9, 244,
  118. 9, 64, 10, 10, 9, 32,
  119. 9, 64, 0, 244, 128,
  120. 191, 160, 191, 128, 191,
  121. 128, 159, 144, 191, 128, 191,
  122. 128, 143, 1, 244, 10,
  123. 10, 9, 32, 9, 64,
  124. 10, 10, 9, 32, 9, 64,
  125. 9, 244, 9, 64, 10,
  126. 10, 9, 32, 9, 64,
  127. 9, 244, 9, 244, 10, 10,
  128. 9, 32, 9, 244, 9,
  129. 58, 10, 10, 9, 32,
  130. 9, 58, 9, 64, 10, 10,
  131. 9, 32, 9, 64, 9,
  132. 244, 9, 244, 10, 10,
  133. 9, 32, 9, 244, 33, 244,
  134. 9, 244, 10, 10, 9,
  135. 32, 9, 244, 128, 191,
  136. 160, 191, 128, 191, 128, 159,
  137. 144, 191, 128, 191, 128,
  138. 143, 9, 244, 1, 244,
  139. 1, 244, 10, 10, 9, 32,
  140. 9, 244, 9, 58, 10,
  141. 10, 9, 32, 9, 58,
  142. 33, 244, 128, 191, 160, 191,
  143. 128, 191, 128, 159, 144,
  144. 191, 128, 191, 128, 143,
  145. 0, 244, 128, 191, 160, 191,
  146. 128, 191, 128, 159, 144,
  147. 191, 128, 191, 128, 143,
  148. 10, 10, 9, 32, 9, 244,
  149. 128, 191, 160, 191, 128,
  150. 191, 128, 159, 144, 191,
  151. 128, 191, 128, 143, 9, 244,
  152. 1, 244, 10, 10, 9,
  153. 32, 0, 244, 128, 191,
  154. 160, 191, 128, 191, 128, 159,
  155. 144, 191, 128, 191, 128,
  156. 143, 9, 244, 9, 244,
  157. 10, 10, 9, 32, 9, 244,
  158. 9, 244, 10, 10, 9,
  159. 32, 9, 244, 9, 244,
  160. 9, 244, 10, 10, 9, 32,
  161. 9, 244, 9, 244, 1,
  162. 244, 10, 10, 9, 32,
  163. 0, 244, 128, 191, 160, 191,
  164. 128, 191, 128, 159, 144,
  165. 191, 128, 191, 128, 143,
  166. 9, 244, 9, 244, 10, 10,
  167. 9, 32, 9, 244, 33,
  168. 244, 9, 244, 9, 244,
  169. 10, 10, 9, 32, 9, 244,
  170. 128, 191, 160, 191, 128,
  171. 191, 128, 159, 144, 191,
  172. 128, 191, 128, 143, 9, 244,
  173. 9, 244, 10, 10, 9,
  174. 32, 9, 244, 1, 244,
  175. 1, 244, 10, 10, 9, 32,
  176. 0, 244, 128, 191, 160,
  177. 191, 128, 191, 128, 159,
  178. 144, 191, 128, 191, 128, 143,
  179. 10, 10, 9, 32, 128,
  180. 191, 160, 191, 128, 191,
  181. 128, 159, 144, 191, 128, 191,
  182. 128, 143, 128, 191, 160,
  183. 191, 128, 191, 128, 159,
  184. 144, 191, 128, 191, 128, 143,
  185. 9, 244, 128, 191, 160,
  186. 191, 128, 191, 128, 159,
  187. 144, 191, 128, 191, 128, 143,
  188. 9, 244, 1, 244, 1,
  189. 244, 10, 10, 9, 32,
  190. 9, 244, 9, 244, 33, 244,
  191. 1, 244, 1, 244, 10,
  192. 10, 9, 32, 0, 244,
  193. 128, 191, 160, 191, 128, 191,
  194. 128, 159, 144, 191, 128,
  195. 191, 128, 143, 10, 10,
  196. 9, 32, 128, 191, 160, 191,
  197. 128, 191, 128, 159, 144,
  198. 191, 128, 191, 128, 143,
  199. 0, 244, 128, 191, 160, 191,
  200. 128, 191, 128, 159, 144,
  201. 191, 128, 191, 128, 143,
  202. 1, 244, 10, 10, 9, 32,
  203. 9, 244, 9, 244, 10,
  204. 10, 9, 32, 9, 244,
  205. 9, 244, 128, 191, 160, 191,
  206. 128, 191, 128, 159, 144,
  207. 191, 128, 191, 128, 143,
  208. 1, 244, 1, 244, 10, 10,
  209. 9, 32, 9, 244, 0,
  210. 244, 128, 191, 160, 191,
  211. 128, 191, 128, 159, 144, 191,
  212. 128, 191, 128, 143, 10,
  213. 10, 9, 32, 9, 244,
  214. 33, 244, 128, 191, 160, 191,
  215. 128, 191, 128, 159, 144,
  216. 191, 128, 191, 128, 143,
  217. 128, 191, 160, 191, 128, 191,
  218. 128, 159, 144, 191, 128,
  219. 191, 128, 143, 1, 244,
  220. 1, 244, 10, 10, 9, 32,
  221. 0, 244, 128, 191, 160,
  222. 191, 128, 191, 128, 159,
  223. 144, 191, 128, 191, 128, 143,
  224. 9, 244, 128, 191, 160,
  225. 191, 128, 191, 128, 159,
  226. 144, 191, 128, 191, 128, 143,
  227. 9, 244, 9, 244, 10,
  228. 10, 9, 32, 9, 244,
  229. 1, 244, 1, 244, 10, 10,
  230. 9, 32, 0, 244, 128,
  231. 191, 160, 191, 128, 191,
  232. 128, 159, 144, 191, 128, 191,
  233. 128, 143, 1, 244, 10,
  234. 10, 9, 32, 128, 191,
  235. 160, 191, 128, 191, 128, 159,
  236. 144, 191, 128, 191, 128,
  237. 143, 0, 244, 128, 191,
  238. 160, 191, 128, 191, 128, 159,
  239. 144, 191, 128, 191, 128,
  240. 143, 1, 244, 10, 10,
  241. 9, 32, 9, 244, 9, 244,
  242. 9, 244, 10, 10, 9,
  243. 32, 9, 244, 9, 244,
  244. 10, 10, 9, 32, 9, 244,
  245. 9, 244, 128, 191, 160,
  246. 191, 128, 191, 128, 159,
  247. 144, 191, 128, 191, 128, 143,
  248. 9, 244, 128, 191, 160,
  249. 191, 128, 191, 128, 159,
  250. 144, 191, 128, 191, 128, 143,
  251. 9, 244, 1, 244, 1,
  252. 244, 10, 10, 9, 32,
  253. 0, 244, 128, 191, 160, 191,
  254. 128, 191, 128, 159, 144,
  255. 191, 128, 191, 128, 143,
  256. 9, 40, 9, 40, 9, 40,
  257. 9, 83, 9, 77, 9,
  258. 84, 0, 0, 0,
  259. ]
  260. 1 class << self
  261. 1 attr_accessor :_key_spans
  262. 1 private :_key_spans, :_key_spans=
  263. end
  264. 1 self._key_spans = [
  265. 0, 236, 236, 1, 24, 236, 236, 1,
  266. 24, 244, 244, 1, 24, 236, 236, 1,
  267. 24, 236, 236, 236, 1, 24, 236, 1,
  268. 24, 236, 79, 79, 1, 24, 79, 75,
  269. 75, 1, 24, 75, 6, 1, 49, 1,
  270. 24, 49, 10, 49, 49, 1, 24, 49,
  271. 10, 50, 1, 24, 50, 49, 1, 24,
  272. 49, 10, 50, 114, 1, 24, 50, 49,
  273. 1, 24, 49, 10, 32, 114, 1, 24,
  274. 32, 10, 10, 10, 10, 1, 24, 1,
  275. 1, 1, 1, 1, 1, 21, 1, 3,
  276. 1, 8, 1, 1, 1, 1, 1, 1,
  277. 1, 1, 36, 1, 24, 36, 49, 49,
  278. 1, 24, 49, 1, 1, 21, 1, 14,
  279. 1, 1, 1, 1, 236, 236, 1, 24,
  280. 236, 56, 1, 24, 56, 236, 1, 24,
  281. 236, 56, 1, 24, 56, 236, 236, 1,
  282. 24, 236, 54, 1, 24, 54, 236, 1,
  283. 24, 236, 64, 32, 64, 32, 48, 64,
  284. 16, 236, 244, 244, 1, 24, 236, 54,
  285. 1, 24, 54, 212, 64, 32, 64, 32,
  286. 48, 64, 16, 245, 64, 32, 64, 32,
  287. 48, 64, 16, 1, 24, 236, 64, 32,
  288. 64, 32, 48, 64, 16, 236, 244, 1,
  289. 24, 245, 64, 32, 64, 32, 48, 64,
  290. 16, 64, 32, 64, 32, 48, 64, 16,
  291. 244, 244, 1, 24, 245, 64, 32, 64,
  292. 32, 48, 64, 16, 236, 244, 244, 1,
  293. 24, 236, 56, 1, 24, 56, 64, 32,
  294. 64, 32, 48, 64, 16, 245, 64, 32,
  295. 64, 32, 48, 64, 16, 1, 24, 236,
  296. 236, 1, 24, 236, 244, 244, 1, 24,
  297. 236, 245, 64, 32, 64, 32, 48, 64,
  298. 16, 244, 1, 24, 64, 32, 64, 32,
  299. 48, 64, 16, 244, 244, 1, 24, 236,
  300. 56, 1, 24, 56, 245, 64, 32, 64,
  301. 32, 48, 64, 16, 244, 1, 24, 56,
  302. 1, 24, 56, 236, 56, 1, 24, 56,
  303. 236, 236, 1, 24, 236, 50, 1, 24,
  304. 50, 56, 1, 24, 56, 236, 236, 1,
  305. 24, 236, 212, 236, 1, 24, 236, 64,
  306. 32, 64, 32, 48, 64, 16, 236, 244,
  307. 244, 1, 24, 236, 50, 1, 24, 50,
  308. 212, 64, 32, 64, 32, 48, 64, 16,
  309. 245, 64, 32, 64, 32, 48, 64, 16,
  310. 1, 24, 236, 64, 32, 64, 32, 48,
  311. 64, 16, 236, 244, 1, 24, 245, 64,
  312. 32, 64, 32, 48, 64, 16, 236, 236,
  313. 1, 24, 236, 236, 1, 24, 236, 236,
  314. 236, 1, 24, 236, 236, 244, 1, 24,
  315. 245, 64, 32, 64, 32, 48, 64, 16,
  316. 236, 236, 1, 24, 236, 212, 236, 236,
  317. 1, 24, 236, 64, 32, 64, 32, 48,
  318. 64, 16, 236, 236, 1, 24, 236, 244,
  319. 244, 1, 24, 245, 64, 32, 64, 32,
  320. 48, 64, 16, 1, 24, 64, 32, 64,
  321. 32, 48, 64, 16, 64, 32, 64, 32,
  322. 48, 64, 16, 236, 64, 32, 64, 32,
  323. 48, 64, 16, 236, 244, 244, 1, 24,
  324. 236, 236, 212, 244, 244, 1, 24, 245,
  325. 64, 32, 64, 32, 48, 64, 16, 1,
  326. 24, 64, 32, 64, 32, 48, 64, 16,
  327. 245, 64, 32, 64, 32, 48, 64, 16,
  328. 244, 1, 24, 236, 236, 1, 24, 236,
  329. 236, 64, 32, 64, 32, 48, 64, 16,
  330. 244, 244, 1, 24, 236, 245, 64, 32,
  331. 64, 32, 48, 64, 16, 1, 24, 236,
  332. 212, 64, 32, 64, 32, 48, 64, 16,
  333. 64, 32, 64, 32, 48, 64, 16, 244,
  334. 244, 1, 24, 245, 64, 32, 64, 32,
  335. 48, 64, 16, 236, 64, 32, 64, 32,
  336. 48, 64, 16, 236, 236, 1, 24, 236,
  337. 244, 244, 1, 24, 245, 64, 32, 64,
  338. 32, 48, 64, 16, 244, 1, 24, 64,
  339. 32, 64, 32, 48, 64, 16, 245, 64,
  340. 32, 64, 32, 48, 64, 16, 244, 1,
  341. 24, 236, 236, 236, 1, 24, 236, 236,
  342. 1, 24, 236, 236, 64, 32, 64, 32,
  343. 48, 64, 16, 236, 64, 32, 64, 32,
  344. 48, 64, 16, 236, 244, 244, 1, 24,
  345. 245, 64, 32, 64, 32, 48, 64, 16,
  346. 32, 32, 32, 75, 69, 76, 0,
  347. ]
  348. 1 class << self
  349. 1 attr_accessor :_index_offsets
  350. 1 private :_index_offsets, :_index_offsets=
  351. end
  352. 1 self._index_offsets = [
  353. 0, 0, 237, 474, 476, 501, 738, 975,
  354. 977, 1002, 1247, 1492, 1494, 1519, 1756, 1993,
  355. 1995, 2020, 2257, 2494, 2731, 2733, 2758, 2995,
  356. 2997, 3022, 3259, 3339, 3419, 3421, 3446, 3526,
  357. 3602, 3678, 3680, 3705, 3781, 3788, 3790, 3840,
  358. 3842, 3867, 3917, 3928, 3978, 4028, 4030, 4055,
  359. 4105, 4116, 4167, 4169, 4194, 4245, 4295, 4297,
  360. 4322, 4372, 4383, 4434, 4549, 4551, 4576, 4627,
  361. 4677, 4679, 4704, 4754, 4765, 4798, 4913, 4915,
  362. 4940, 4973, 4984, 4995, 5006, 5017, 5019, 5044,
  363. 5046, 5048, 5050, 5052, 5054, 5056, 5078, 5080,
  364. 5084, 5086, 5095, 5097, 5099, 5101, 5103, 5105,
  365. 5107, 5109, 5111, 5148, 5150, 5175, 5212, 5262,
  366. 5312, 5314, 5339, 5389, 5391, 5393, 5415, 5417,
  367. 5432, 5434, 5436, 5438, 5440, 5677, 5914, 5916,
  368. 5941, 6178, 6235, 6237, 6262, 6319, 6556, 6558,
  369. 6583, 6820, 6877, 6879, 6904, 6961, 7198, 7435,
  370. 7437, 7462, 7699, 7754, 7756, 7781, 7836, 8073,
  371. 8075, 8100, 8337, 8402, 8435, 8500, 8533, 8582,
  372. 8647, 8664, 8901, 9146, 9391, 9393, 9418, 9655,
  373. 9710, 9712, 9737, 9792, 10005, 10070, 10103, 10168,
  374. 10201, 10250, 10315, 10332, 10578, 10643, 10676, 10741,
  375. 10774, 10823, 10888, 10905, 10907, 10932, 11169, 11234,
  376. 11267, 11332, 11365, 11414, 11479, 11496, 11733, 11978,
  377. 11980, 12005, 12251, 12316, 12349, 12414, 12447, 12496,
  378. 12561, 12578, 12643, 12676, 12741, 12774, 12823, 12888,
  379. 12905, 13150, 13395, 13397, 13422, 13668, 13733, 13766,
  380. 13831, 13864, 13913, 13978, 13995, 14232, 14477, 14722,
  381. 14724, 14749, 14986, 15043, 15045, 15070, 15127, 15192,
  382. 15225, 15290, 15323, 15372, 15437, 15454, 15700, 15765,
  383. 15798, 15863, 15896, 15945, 16010, 16027, 16029, 16054,
  384. 16291, 16528, 16530, 16555, 16792, 17037, 17282, 17284,
  385. 17309, 17546, 17792, 17857, 17890, 17955, 17988, 18037,
  386. 18102, 18119, 18364, 18366, 18391, 18456, 18489, 18554,
  387. 18587, 18636, 18701, 18718, 18963, 19208, 19210, 19235,
  388. 19472, 19529, 19531, 19556, 19613, 19859, 19924, 19957,
  389. 20022, 20055, 20104, 20169, 20186, 20431, 20433, 20458,
  390. 20515, 20517, 20542, 20599, 20836, 20893, 20895, 20920,
  391. 20977, 21214, 21451, 21453, 21478, 21715, 21766, 21768,
  392. 21793, 21844, 21901, 21903, 21928, 21985, 22222, 22459,
  393. 22461, 22486, 22723, 22936, 23173, 23175, 23200, 23437,
  394. 23502, 23535, 23600, 23633, 23682, 23747, 23764, 24001,
  395. 24246, 24491, 24493, 24518, 24755, 24806, 24808, 24833,
  396. 24884, 25097, 25162, 25195, 25260, 25293, 25342, 25407,
  397. 25424, 25670, 25735, 25768, 25833, 25866, 25915, 25980,
  398. 25997, 25999, 26024, 26261, 26326, 26359, 26424, 26457,
  399. 26506, 26571, 26588, 26825, 27070, 27072, 27097, 27343,
  400. 27408, 27441, 27506, 27539, 27588, 27653, 27670, 27907,
  401. 28144, 28146, 28171, 28408, 28645, 28647, 28672, 28909,
  402. 29146, 29383, 29385, 29410, 29647, 29884, 30129, 30131,
  403. 30156, 30402, 30467, 30500, 30565, 30598, 30647, 30712,
  404. 30729, 30966, 31203, 31205, 31230, 31467, 31680, 31917,
  405. 32154, 32156, 32181, 32418, 32483, 32516, 32581, 32614,
  406. 32663, 32728, 32745, 32982, 33219, 33221, 33246, 33483,
  407. 33728, 33973, 33975, 34000, 34246, 34311, 34344, 34409,
  408. 34442, 34491, 34556, 34573, 34575, 34600, 34665, 34698,
  409. 34763, 34796, 34845, 34910, 34927, 34992, 35025, 35090,
  410. 35123, 35172, 35237, 35254, 35491, 35556, 35589, 35654,
  411. 35687, 35736, 35801, 35818, 36055, 36300, 36545, 36547,
  412. 36572, 36809, 37046, 37259, 37504, 37749, 37751, 37776,
  413. 38022, 38087, 38120, 38185, 38218, 38267, 38332, 38349,
  414. 38351, 38376, 38441, 38474, 38539, 38572, 38621, 38686,
  415. 38703, 38949, 39014, 39047, 39112, 39145, 39194, 39259,
  416. 39276, 39521, 39523, 39548, 39785, 40022, 40024, 40049,
  417. 40286, 40523, 40588, 40621, 40686, 40719, 40768, 40833,
  418. 40850, 41095, 41340, 41342, 41367, 41604, 41850, 41915,
  419. 41948, 42013, 42046, 42095, 42160, 42177, 42179, 42204,
  420. 42441, 42654, 42719, 42752, 42817, 42850, 42899, 42964,
  421. 42981, 43046, 43079, 43144, 43177, 43226, 43291, 43308,
  422. 43553, 43798, 43800, 43825, 44071, 44136, 44169, 44234,
  423. 44267, 44316, 44381, 44398, 44635, 44700, 44733, 44798,
  424. 44831, 44880, 44945, 44962, 45199, 45436, 45438, 45463,
  425. 45700, 45945, 46190, 46192, 46217, 46463, 46528, 46561,
  426. 46626, 46659, 46708, 46773, 46790, 47035, 47037, 47062,
  427. 47127, 47160, 47225, 47258, 47307, 47372, 47389, 47635,
  428. 47700, 47733, 47798, 47831, 47880, 47945, 47962, 48207,
  429. 48209, 48234, 48471, 48708, 48945, 48947, 48972, 49209,
  430. 49446, 49448, 49473, 49710, 49947, 50012, 50045, 50110,
  431. 50143, 50192, 50257, 50274, 50511, 50576, 50609, 50674,
  432. 50707, 50756, 50821, 50838, 51075, 51320, 51565, 51567,
  433. 51592, 51838, 51903, 51936, 52001, 52034, 52083, 52148,
  434. 52165, 52198, 52231, 52264, 52340, 52410, 52487,
  435. ]
  436. 1 class << self
  437. 1 attr_accessor :_indicies
  438. 1 private :_indicies, :_indicies=
  439. end
  440. 1 self._indicies = [
  441. 0, 1, 1, 1, 2, 1, 1, 1,
  442. 1, 1, 1, 1, 1, 1, 1, 1,
  443. 1, 1, 1, 1, 1, 1, 1, 0,
  444. 3, 4, 3, 3, 3, 3, 3, 5,
  445. 1, 3, 3, 1, 3, 6, 3, 3,
  446. 3, 3, 3, 3, 3, 3, 3, 3,
  447. 3, 1, 7, 8, 3, 1, 3, 1,
  448. 3, 3, 3, 3, 3, 3, 3, 3,
  449. 3, 3, 3, 3, 3, 3, 3, 3,
  450. 3, 3, 3, 3, 3, 3, 3, 3,
  451. 3, 3, 9, 1, 1, 3, 3, 3,
  452. 3, 3, 3, 3, 3, 3, 3, 3,
  453. 3, 3, 3, 3, 3, 3, 3, 3,
  454. 3, 3, 3, 3, 3, 3, 3, 3,
  455. 3, 3, 3, 3, 3, 3, 1, 1,
  456. 1, 1, 1, 1, 1, 1, 1, 1,
  457. 1, 1, 1, 1, 1, 1, 1, 1,
  458. 1, 1, 1, 1, 1, 1, 1, 1,
  459. 1, 1, 1, 1, 1, 1, 1, 1,
  460. 1, 1, 1, 1, 1, 1, 1, 1,
  461. 1, 1, 1, 1, 1, 1, 1, 1,
  462. 1, 1, 1, 1, 1, 1, 1, 1,
  463. 1, 1, 1, 1, 1, 1, 1, 1,
  464. 1, 10, 10, 10, 10, 10, 10, 10,
  465. 10, 10, 10, 10, 10, 10, 10, 10,
  466. 10, 10, 10, 10, 10, 10, 10, 10,
  467. 10, 10, 10, 10, 10, 10, 10, 11,
  468. 12, 12, 12, 12, 12, 12, 12, 12,
  469. 12, 12, 12, 12, 13, 12, 12, 14,
  470. 15, 15, 15, 16, 1, 17, 1, 1,
  471. 1, 18, 1, 1, 1, 1, 1, 1,
  472. 1, 1, 1, 1, 1, 1, 1, 1,
  473. 1, 1, 1, 1, 17, 19, 20, 19,
  474. 19, 19, 19, 19, 21, 1, 19, 19,
  475. 1, 19, 22, 19, 19, 19, 19, 19,
  476. 19, 19, 19, 19, 19, 19, 1, 23,
  477. 24, 19, 1, 19, 1, 19, 19, 19,
  478. 19, 19, 19, 19, 19, 19, 19, 19,
  479. 19, 19, 19, 19, 19, 19, 19, 19,
  480. 19, 19, 19, 19, 19, 19, 19, 25,
  481. 1, 1, 19, 19, 19, 19, 19, 19,
  482. 19, 19, 19, 19, 19, 19, 19, 19,
  483. 19, 19, 19, 19, 19, 19, 19, 19,
  484. 19, 19, 19, 19, 19, 19, 19, 19,
  485. 19, 19, 19, 1, 1, 1, 1, 1,
  486. 1, 1, 1, 1, 1, 1, 1, 1,
  487. 1, 1, 1, 1, 1, 1, 1, 1,
  488. 1, 1, 1, 1, 1, 1, 1, 1,
  489. 1, 1, 1, 1, 1, 1, 1, 1,
  490. 1, 1, 1, 1, 1, 1, 1, 1,
  491. 1, 1, 1, 1, 1, 1, 1, 1,
  492. 1, 1, 1, 1, 1, 1, 1, 1,
  493. 1, 1, 1, 1, 1, 1, 26, 26,
  494. 26, 26, 26, 26, 26, 26, 26, 26,
  495. 26, 26, 26, 26, 26, 26, 26, 26,
  496. 26, 26, 26, 26, 26, 26, 26, 26,
  497. 26, 26, 26, 26, 27, 28, 28, 28,
  498. 28, 28, 28, 28, 28, 28, 28, 28,
  499. 28, 29, 28, 28, 30, 31, 31, 31,
  500. 32, 1, 33, 1, 34, 1, 1, 1,
  501. 1, 1, 1, 1, 1, 1, 1, 1,
  502. 1, 1, 1, 1, 1, 1, 1, 1,
  503. 1, 1, 1, 34, 1, 35, 1, 1,
  504. 1, 36, 1, 1, 1, 1, 1, 1,
  505. 1, 1, 1, 1, 1, 1, 1, 1,
  506. 1, 1, 1, 1, 35, 37, 38, 37,
  507. 37, 37, 37, 37, 39, 1, 37, 37,
  508. 1, 37, 40, 37, 37, 37, 37, 37,
  509. 37, 37, 37, 37, 37, 37, 1, 41,
  510. 42, 37, 1, 37, 43, 37, 37, 37,
  511. 37, 37, 37, 37, 37, 37, 37, 37,
  512. 37, 37, 37, 37, 37, 37, 37, 37,
  513. 37, 37, 37, 37, 37, 37, 37, 44,
  514. 1, 1, 37, 37, 37, 37, 37, 37,
  515. 37, 37, 37, 37, 37, 37, 37, 37,
  516. 37, 37, 37, 37, 37, 37, 37, 37,
  517. 37, 37, 37, 37, 37, 37, 37, 37,
  518. 37, 37, 37, 1, 1, 1, 1, 1,
  519. 1, 1, 1, 1, 1, 1, 1, 1,
  520. 1, 1, 1, 1, 1, 1, 1, 1,
  521. 1, 1, 1, 1, 1, 1, 1, 1,
  522. 1, 1, 1, 1, 1, 1, 1, 1,
  523. 1, 1, 1, 1, 1, 1, 1, 1,
  524. 1, 1, 1, 1, 1, 1, 1, 1,
  525. 1, 1, 1, 1, 1, 1, 1, 1,
  526. 1, 1, 1, 1, 1, 1, 45, 45,
  527. 45, 45, 45, 45, 45, 45, 45, 45,
  528. 45, 45, 45, 45, 45, 45, 45, 45,
  529. 45, 45, 45, 45, 45, 45, 45, 45,
  530. 45, 45, 45, 45, 46, 47, 47, 47,
  531. 47, 47, 47, 47, 47, 47, 47, 47,
  532. 47, 48, 47, 47, 49, 50, 50, 50,
  533. 51, 1, 52, 1, 1, 1, 53, 1,
  534. 1, 1, 1, 1, 1, 1, 1, 1,
  535. 1, 1, 1, 1, 1, 1, 1, 1,
  536. 1, 52, 54, 55, 54, 54, 54, 54,
  537. 54, 56, 1, 54, 54, 1, 54, 57,
  538. 54, 54, 54, 54, 54, 54, 54, 54,
  539. 54, 54, 54, 1, 58, 59, 54, 1,
  540. 54, 60, 54, 54, 54, 54, 54, 54,
  541. 54, 54, 54, 54, 54, 54, 54, 54,
  542. 54, 54, 54, 54, 54, 54, 54, 54,
  543. 54, 54, 54, 54, 61, 1, 1, 54,
  544. 54, 54, 54, 54, 54, 54, 54, 54,
  545. 54, 54, 54, 54, 54, 54, 54, 54,
  546. 54, 54, 54, 54, 54, 54, 54, 54,
  547. 54, 54, 54, 54, 54, 54, 54, 54,
  548. 1, 1, 1, 1, 1, 1, 1, 1,
  549. 1, 1, 1, 1, 1, 1, 1, 1,
  550. 1, 1, 1, 1, 1, 1, 1, 1,
  551. 1, 1, 1, 1, 1, 1, 1, 1,
  552. 1, 1, 1, 1, 1, 1, 1, 1,
  553. 1, 1, 1, 1, 1, 1, 1, 1,
  554. 1, 1, 1, 1, 1, 1, 1, 1,
  555. 1, 1, 1, 1, 1, 1, 1, 1,
  556. 1, 1, 1, 62, 62, 62, 62, 62,
  557. 62, 62, 62, 62, 62, 62, 62, 62,
  558. 62, 62, 62, 62, 62, 62, 62, 62,
  559. 62, 62, 62, 62, 62, 62, 62, 62,
  560. 62, 63, 64, 64, 64, 64, 64, 64,
  561. 64, 64, 64, 64, 64, 64, 65, 64,
  562. 64, 66, 67, 67, 67, 68, 1, 69,
  563. 1, 70, 1, 1, 1, 1, 1, 1,
  564. 1, 1, 1, 1, 1, 1, 1, 1,
  565. 1, 1, 1, 1, 1, 1, 1, 1,
  566. 70, 1, 71, 71, 71, 71, 71, 71,
  567. 71, 71, 72, 1, 71, 71, 73, 71,
  568. 71, 71, 71, 71, 71, 71, 71, 71,
  569. 71, 71, 71, 71, 71, 71, 71, 71,
  570. 71, 72, 71, 74, 71, 71, 71, 71,
  571. 71, 71, 71, 71, 71, 71, 71, 71,
  572. 71, 71, 71, 71, 71, 71, 71, 71,
  573. 71, 71, 71, 71, 71, 71, 71, 71,
  574. 71, 71, 71, 71, 71, 71, 71, 71,
  575. 71, 71, 71, 71, 71, 71, 71, 71,
  576. 71, 71, 71, 71, 71, 71, 71, 71,
  577. 71, 71, 71, 71, 71, 75, 71, 71,
  578. 71, 71, 71, 71, 71, 71, 71, 71,
  579. 71, 71, 71, 71, 71, 71, 71, 71,
  580. 71, 71, 71, 71, 71, 71, 71, 71,
  581. 71, 71, 71, 71, 71, 71, 71, 71,
  582. 71, 1, 1, 1, 1, 1, 1, 1,
  583. 1, 1, 1, 1, 1, 1, 1, 1,
  584. 1, 1, 1, 1, 1, 1, 1, 1,
  585. 1, 1, 1, 1, 1, 1, 1, 1,
  586. 1, 1, 1, 1, 1, 1, 1, 1,
  587. 1, 1, 1, 1, 1, 1, 1, 1,
  588. 1, 1, 1, 1, 1, 1, 1, 1,
  589. 1, 1, 1, 1, 1, 1, 1, 1,
  590. 1, 1, 1, 76, 76, 76, 76, 76,
  591. 76, 76, 76, 76, 76, 76, 76, 76,
  592. 76, 76, 76, 76, 76, 76, 76, 76,
  593. 76, 76, 76, 76, 76, 76, 76, 76,
  594. 76, 77, 78, 78, 78, 78, 78, 78,
  595. 78, 78, 78, 78, 78, 78, 79, 78,
  596. 78, 80, 81, 81, 81, 82, 1, 83,
  597. 83, 83, 83, 83, 83, 83, 83, 83,
  598. 1, 83, 83, 84, 83, 83, 83, 83,
  599. 83, 83, 83, 83, 83, 83, 83, 83,
  600. 83, 83, 83, 83, 83, 83, 83, 83,
  601. 85, 83, 83, 83, 83, 83, 83, 83,
  602. 83, 83, 83, 83, 83, 83, 83, 83,
  603. 83, 83, 83, 83, 83, 83, 83, 83,
  604. 83, 83, 83, 83, 83, 83, 83, 83,
  605. 83, 83, 83, 83, 83, 83, 83, 83,
  606. 83, 83, 83, 83, 83, 83, 83, 83,
  607. 83, 83, 83, 83, 83, 83, 83, 83,
  608. 83, 83, 86, 83, 83, 83, 83, 83,
  609. 83, 83, 83, 83, 83, 83, 83, 83,
  610. 83, 83, 83, 83, 83, 83, 83, 83,
  611. 83, 83, 83, 83, 83, 83, 83, 83,
  612. 83, 83, 83, 83, 83, 83, 1, 1,
  613. 1, 1, 1, 1, 1, 1, 1, 1,
  614. 1, 1, 1, 1, 1, 1, 1, 1,
  615. 1, 1, 1, 1, 1, 1, 1, 1,
  616. 1, 1, 1, 1, 1, 1, 1, 1,
  617. 1, 1, 1, 1, 1, 1, 1, 1,
  618. 1, 1, 1, 1, 1, 1, 1, 1,
  619. 1, 1, 1, 1, 1, 1, 1, 1,
  620. 1, 1, 1, 1, 1, 1, 1, 1,
  621. 87, 87, 87, 87, 87, 87, 87, 87,
  622. 87, 87, 87, 87, 87, 87, 87, 87,
  623. 87, 87, 87, 87, 87, 87, 87, 87,
  624. 87, 87, 87, 87, 87, 87, 88, 89,
  625. 89, 89, 89, 89, 89, 89, 89, 89,
  626. 89, 89, 89, 90, 89, 89, 91, 92,
  627. 92, 92, 93, 1, 94, 1, 83, 1,
  628. 1, 1, 1, 1, 1, 1, 1, 1,
  629. 1, 1, 1, 1, 1, 1, 1, 1,
  630. 1, 1, 1, 1, 1, 83, 1, 95,
  631. 1, 1, 1, 96, 1, 1, 1, 1,
  632. 1, 1, 1, 1, 1, 1, 1, 1,
  633. 1, 1, 1, 1, 1, 1, 95, 97,
  634. 98, 97, 97, 97, 97, 97, 99, 1,
  635. 97, 97, 1, 97, 100, 97, 97, 97,
  636. 97, 97, 97, 97, 97, 97, 97, 97,
  637. 1, 101, 102, 97, 1, 97, 103, 97,
  638. 97, 97, 97, 97, 97, 97, 97, 97,
  639. 97, 97, 97, 97, 97, 97, 97, 97,
  640. 97, 97, 97, 97, 97, 97, 97, 97,
  641. 97, 104, 1, 1, 97, 97, 97, 97,
  642. 97, 97, 97, 97, 97, 97, 97, 97,
  643. 97, 97, 97, 97, 97, 97, 97, 97,
  644. 97, 97, 97, 97, 97, 97, 97, 97,
  645. 97, 97, 97, 97, 97, 1, 1, 1,
  646. 1, 1, 1, 1, 1, 1, 1, 1,
  647. 1, 1, 1, 1, 1, 1, 1, 1,
  648. 1, 1, 1, 1, 1, 1, 1, 1,
  649. 1, 1, 1, 1, 1, 1, 1, 1,
  650. 1, 1, 1, 1, 1, 1, 1, 1,
  651. 1, 1, 1, 1, 1, 1, 1, 1,
  652. 1, 1, 1, 1, 1, 1, 1, 1,
  653. 1, 1, 1, 1, 1, 1, 1, 1,
  654. 105, 105, 105, 105, 105, 105, 105, 105,
  655. 105, 105, 105, 105, 105, 105, 105, 105,
  656. 105, 105, 105, 105, 105, 105, 105, 105,
  657. 105, 105, 105, 105, 105, 105, 106, 107,
  658. 107, 107, 107, 107, 107, 107, 107, 107,
  659. 107, 107, 107, 108, 107, 107, 109, 110,
  660. 110, 110, 111, 1, 112, 1, 1, 1,
  661. 113, 1, 1, 1, 1, 1, 1, 1,
  662. 1, 1, 1, 1, 1, 1, 1, 1,
  663. 1, 1, 1, 112, 114, 115, 114, 114,
  664. 114, 114, 114, 116, 1, 114, 114, 1,
  665. 114, 117, 114, 114, 114, 114, 114, 114,
  666. 114, 114, 114, 114, 114, 1, 118, 119,
  667. 114, 1, 114, 120, 114, 114, 114, 114,
  668. 114, 114, 114, 114, 114, 114, 114, 114,
  669. 114, 114, 114, 114, 114, 114, 114, 114,
  670. 114, 114, 114, 114, 114, 114, 121, 1,
  671. 1, 114, 114, 114, 114, 114, 114, 114,
  672. 114, 114, 114, 114, 114, 114, 114, 114,
  673. 114, 114, 114, 114, 114, 114, 114, 114,
  674. 114, 114, 114, 114, 114, 114, 114, 114,
  675. 114, 114, 1, 1, 1, 1, 1, 1,
  676. 1, 1, 1, 1, 1, 1, 1, 1,
  677. 1, 1, 1, 1, 1, 1, 1, 1,
  678. 1, 1, 1, 1, 1, 1, 1, 1,
  679. 1, 1, 1, 1, 1, 1, 1, 1,
  680. 1, 1, 1, 1, 1, 1, 1, 1,
  681. 1, 1, 1, 1, 1, 1, 1, 1,
  682. 1, 1, 1, 1, 1, 1, 1, 1,
  683. 1, 1, 1, 1, 1, 122, 122, 122,
  684. 122, 122, 122, 122, 122, 122, 122, 122,
  685. 122, 122, 122, 122, 122, 122, 122, 122,
  686. 122, 122, 122, 122, 122, 122, 122, 122,
  687. 122, 122, 122, 123, 124, 124, 124, 124,
  688. 124, 124, 124, 124, 124, 124, 124, 124,
  689. 125, 124, 124, 126, 127, 127, 127, 128,
  690. 1, 129, 1, 130, 1, 1, 1, 1,
  691. 1, 1, 1, 1, 1, 1, 1, 1,
  692. 1, 1, 1, 1, 1, 1, 1, 1,
  693. 1, 1, 130, 1, 131, 1, 1, 1,
  694. 132, 1, 1, 1, 1, 1, 1, 1,
  695. 1, 1, 1, 1, 1, 1, 1, 1,
  696. 1, 1, 1, 131, 133, 134, 133, 133,
  697. 133, 133, 133, 135, 1, 133, 133, 1,
  698. 133, 136, 133, 133, 133, 133, 133, 133,
  699. 133, 133, 133, 133, 133, 1, 137, 138,
  700. 133, 1, 133, 139, 133, 133, 133, 133,
  701. 133, 133, 133, 133, 133, 133, 133, 133,
  702. 133, 133, 133, 133, 133, 133, 133, 133,
  703. 133, 133, 133, 133, 133, 133, 140, 1,
  704. 1, 133, 133, 133, 133, 133, 133, 133,
  705. 133, 133, 133, 133, 133, 133, 133, 133,
  706. 133, 133, 133, 133, 133, 133, 133, 133,
  707. 133, 133, 133, 133, 133, 133, 133, 133,
  708. 133, 133, 1, 1, 1, 1, 1, 1,
  709. 1, 1, 1, 1, 1, 1, 1, 1,
  710. 1, 1, 1, 1, 1, 1, 1, 1,
  711. 1, 1, 1, 1, 1, 1, 1, 1,
  712. 1, 1, 1, 1, 1, 1, 1, 1,
  713. 1, 1, 1, 1, 1, 1, 1, 1,
  714. 1, 1, 1, 1, 1, 1, 1, 1,
  715. 1, 1, 1, 1, 1, 1, 1, 1,
  716. 1, 1, 1, 1, 1, 141, 141, 141,
  717. 141, 141, 141, 141, 141, 141, 141, 141,
  718. 141, 141, 141, 141, 141, 141, 141, 141,
  719. 141, 141, 141, 141, 141, 141, 141, 141,
  720. 141, 141, 141, 142, 143, 143, 143, 143,
  721. 143, 143, 143, 143, 143, 143, 143, 143,
  722. 144, 143, 143, 145, 146, 146, 146, 147,
  723. 1, 148, 1, 1, 1, 149, 1, 1,
  724. 1, 1, 1, 1, 1, 1, 1, 1,
  725. 1, 1, 1, 1, 1, 1, 1, 1,
  726. 148, 150, 151, 150, 150, 150, 150, 150,
  727. 152, 1, 150, 150, 1, 150, 153, 150,
  728. 150, 150, 150, 150, 150, 150, 150, 150,
  729. 150, 150, 1, 1, 1, 150, 1, 150,
  730. 1, 150, 150, 150, 150, 150, 150, 150,
  731. 150, 150, 150, 150, 150, 150, 150, 150,
  732. 150, 150, 150, 150, 150, 150, 150, 150,
  733. 150, 150, 150, 1, 1, 1, 150, 150,
  734. 150, 150, 150, 150, 150, 150, 150, 150,
  735. 150, 150, 150, 150, 150, 150, 150, 150,
  736. 150, 150, 150, 150, 150, 150, 150, 150,
  737. 150, 150, 150, 150, 150, 150, 150, 1,
  738. 1, 1, 1, 1, 1, 1, 1, 1,
  739. 1, 1, 1, 1, 1, 1, 1, 1,
  740. 1, 1, 1, 1, 1, 1, 1, 1,
  741. 1, 1, 1, 1, 1, 1, 1, 1,
  742. 1, 1, 1, 1, 1, 1, 1, 1,
  743. 1, 1, 1, 1, 1, 1, 1, 1,
  744. 1, 1, 1, 1, 1, 1, 1, 1,
  745. 1, 1, 1, 1, 1, 1, 1, 1,
  746. 1, 1, 154, 154, 154, 154, 154, 154,
  747. 154, 154, 154, 154, 154, 154, 154, 154,
  748. 154, 154, 154, 154, 154, 154, 154, 154,
  749. 154, 154, 154, 154, 154, 154, 154, 154,
  750. 155, 156, 156, 156, 156, 156, 156, 156,
  751. 156, 156, 156, 156, 156, 157, 156, 156,
  752. 158, 159, 159, 159, 160, 1, 148, 1,
  753. 1, 1, 149, 1, 1, 1, 1, 1,
  754. 1, 1, 1, 1, 1, 1, 1, 1,
  755. 1, 1, 1, 1, 1, 148, 161, 162,
  756. 161, 161, 161, 161, 161, 152, 1, 161,
  757. 161, 1, 161, 1, 161, 161, 161, 161,
  758. 161, 161, 161, 161, 161, 161, 161, 1,
  759. 1, 1, 161, 1, 161, 1, 161, 161,
  760. 161, 161, 161, 161, 161, 161, 161, 161,
  761. 161, 161, 161, 161, 161, 161, 161, 161,
  762. 161, 161, 161, 161, 161, 161, 161, 161,
  763. 1, 1, 1, 161, 161, 161, 161, 161,
  764. 161, 161, 161, 161, 161, 161, 161, 161,
  765. 161, 161, 161, 161, 161, 161, 161, 161,
  766. 161, 161, 161, 161, 161, 161, 161, 161,
  767. 161, 161, 161, 161, 1, 1, 1, 1,
  768. 1, 1, 1, 1, 1, 1, 1, 1,
  769. 1, 1, 1, 1, 1, 1, 1, 1,
  770. 1, 1, 1, 1, 1, 1, 1, 1,
  771. 1, 1, 1, 1, 1, 1, 1, 1,
  772. 1, 1, 1, 1, 1, 1, 1, 1,
  773. 1, 1, 1, 1, 1, 1, 1, 1,
  774. 1, 1, 1, 1, 1, 1, 1, 1,
  775. 1, 1, 1, 1, 1, 1, 1, 163,
  776. 163, 163, 163, 163, 163, 163, 163, 163,
  777. 163, 163, 163, 163, 163, 163, 163, 163,
  778. 163, 163, 163, 163, 163, 163, 163, 163,
  779. 163, 163, 163, 163, 163, 164, 165, 165,
  780. 165, 165, 165, 165, 165, 165, 165, 165,
  781. 165, 165, 166, 165, 165, 167, 168, 168,
  782. 168, 169, 1, 170, 1, 148, 1, 1,
  783. 1, 1, 1, 1, 1, 1, 1, 1,
  784. 1, 1, 1, 1, 1, 1, 1, 1,
  785. 1, 1, 1, 1, 148, 1, 171, 1,
  786. 1, 1, 172, 1, 1, 1, 1, 1,
  787. 1, 1, 1, 1, 1, 1, 1, 1,
  788. 1, 1, 1, 1, 1, 171, 19, 20,
  789. 19, 19, 19, 19, 19, 173, 1, 19,
  790. 19, 1, 19, 174, 19, 19, 19, 19,
  791. 19, 19, 19, 19, 19, 19, 19, 1,
  792. 23, 24, 19, 1, 19, 175, 19, 19,
  793. 19, 19, 19, 19, 19, 19, 19, 19,
  794. 19, 19, 19, 19, 19, 19, 19, 19,
  795. 19, 19, 19, 19, 19, 19, 19, 19,
  796. 25, 1, 1, 19, 19, 19, 19, 19,
  797. 19, 19, 19, 19, 19, 19, 19, 19,
  798. 19, 19, 19, 19, 19, 19, 19, 19,
  799. 19, 19, 19, 19, 19, 19, 19, 19,
  800. 19, 19, 19, 19, 1, 1, 1, 1,
  801. 1, 1, 1, 1, 1, 1, 1, 1,
  802. 1, 1, 1, 1, 1, 1, 1, 1,
  803. 1, 1, 1, 1, 1, 1, 1, 1,
  804. 1, 1, 1, 1, 1, 1, 1, 1,
  805. 1, 1, 1, 1, 1, 1, 1, 1,
  806. 1, 1, 1, 1, 1, 1, 1, 1,
  807. 1, 1, 1, 1, 1, 1, 1, 1,
  808. 1, 1, 1, 1, 1, 1, 1, 26,
  809. 26, 26, 26, 26, 26, 26, 26, 26,
  810. 26, 26, 26, 26, 26, 26, 26, 26,
  811. 26, 26, 26, 26, 26, 26, 26, 26,
  812. 26, 26, 26, 26, 26, 27, 28, 28,
  813. 28, 28, 28, 28, 28, 28, 28, 28,
  814. 28, 28, 29, 28, 28, 30, 31, 31,
  815. 31, 32, 1, 176, 1, 161, 1, 1,
  816. 1, 1, 1, 1, 1, 1, 1, 1,
  817. 1, 1, 1, 1, 1, 1, 1, 1,
  818. 1, 1, 1, 1, 161, 1, 177, 1,
  819. 1, 1, 178, 1, 1, 1, 1, 1,
  820. 1, 1, 1, 1, 1, 1, 1, 1,
  821. 1, 1, 1, 1, 1, 177, 179, 180,
  822. 179, 179, 179, 179, 179, 181, 1, 179,
  823. 179, 1, 179, 182, 179, 179, 179, 179,
  824. 179, 179, 179, 179, 179, 179, 179, 1,
  825. 183, 184, 179, 1, 179, 185, 179, 179,
  826. 179, 179, 179, 179, 179, 179, 179, 179,
  827. 179, 179, 179, 179, 179, 179, 179, 179,
  828. 179, 179, 179, 179, 179, 179, 179, 179,
  829. 186, 1, 1, 179, 179, 179, 179, 179,
  830. 179, 179, 179, 179, 179, 179, 179, 179,
  831. 179, 179, 179, 179, 179, 179, 179, 179,
  832. 179, 179, 179, 179, 179, 179, 179, 179,
  833. 179, 179, 179, 179, 1, 1, 1, 1,
  834. 1, 1, 1, 1, 1, 1, 1, 1,
  835. 1, 1, 1, 1, 1, 1, 1, 1,
  836. 1, 1, 1, 1, 1, 1, 1, 1,
  837. 1, 1, 1, 1, 1, 1, 1, 1,
  838. 1, 1, 1, 1, 1, 1, 1, 1,
  839. 1, 1, 1, 1, 1, 1, 1, 1,
  840. 1, 1, 1, 1, 1, 1, 1, 1,
  841. 1, 1, 1, 1, 1, 1, 1, 187,
  842. 187, 187, 187, 187, 187, 187, 187, 187,
  843. 187, 187, 187, 187, 187, 187, 187, 187,
  844. 187, 187, 187, 187, 187, 187, 187, 187,
  845. 187, 187, 187, 187, 187, 188, 189, 189,
  846. 189, 189, 189, 189, 189, 189, 189, 189,
  847. 189, 189, 190, 189, 189, 191, 192, 192,
  848. 192, 193, 1, 194, 1, 1, 1, 195,
  849. 1, 1, 1, 1, 1, 1, 1, 1,
  850. 1, 1, 1, 1, 1, 1, 1, 1,
  851. 1, 1, 194, 1, 1, 1, 1, 1,
  852. 1, 1, 196, 1, 1, 1, 1, 1,
  853. 1, 1, 197, 197, 197, 197, 197, 197,
  854. 197, 197, 197, 197, 1, 1, 1, 1,
  855. 1, 1, 1, 1, 1, 1, 1, 1,
  856. 198, 1, 1, 1, 1, 1, 1, 199,
  857. 1, 1, 1, 1, 1, 200, 201, 1,
  858. 1, 202, 1, 203, 1, 1, 1, 204,
  859. 1, 1, 1, 1, 1, 1, 1, 1,
  860. 1, 1, 1, 1, 1, 1, 1, 1,
  861. 1, 1, 203, 1, 1, 1, 1, 1,
  862. 1, 1, 205, 1, 1, 1, 1, 1,
  863. 1, 1, 206, 206, 206, 206, 206, 206,
  864. 206, 206, 206, 206, 1, 1, 1, 1,
  865. 1, 1, 1, 1, 1, 1, 1, 1,
  866. 198, 1, 1, 1, 1, 1, 1, 199,
  867. 1, 1, 1, 1, 1, 200, 201, 1,
  868. 1, 202, 1, 207, 1, 203, 1, 1,
  869. 1, 1, 1, 1, 1, 1, 1, 1,
  870. 1, 1, 1, 1, 1, 1, 1, 1,
  871. 1, 1, 1, 1, 203, 1, 208, 1,
  872. 1, 1, 209, 1, 1, 1, 1, 1,
  873. 1, 1, 1, 1, 1, 1, 1, 1,
  874. 1, 1, 1, 1, 1, 208, 1, 1,
  875. 1, 1, 1, 1, 1, 210, 1, 1,
  876. 1, 1, 1, 1, 1, 211, 211, 211,
  877. 211, 211, 211, 211, 211, 211, 211, 1,
  878. 1, 1, 1, 1, 1, 1, 1, 1,
  879. 1, 1, 1, 212, 1, 1, 1, 1,
  880. 1, 1, 213, 1, 1, 1, 1, 1,
  881. 214, 215, 1, 1, 216, 1, 217, 1,
  882. 1, 1, 218, 1, 1, 1, 1, 1,
  883. 1, 1, 1, 1, 1, 1, 1, 1,
  884. 1, 1, 1, 1, 1, 217, 1, 1,
  885. 1, 1, 1, 1, 1, 219, 1, 1,
  886. 1, 1, 1, 1, 1, 217, 217, 217,
  887. 217, 217, 217, 217, 217, 217, 217, 1,
  888. 1, 1, 1, 1, 1, 1, 220, 1,
  889. 1, 221, 1, 222, 1, 1, 1, 223,
  890. 1, 1, 224, 225, 226, 1, 1, 1,
  891. 227, 1, 217, 1, 1, 1, 218, 1,
  892. 1, 1, 1, 1, 1, 1, 1, 1,
  893. 1, 1, 1, 1, 1, 1, 1, 1,
  894. 1, 217, 1, 1, 1, 1, 1, 1,
  895. 1, 219, 1, 1, 1, 1, 1, 1,
  896. 1, 1, 1, 1, 1, 1, 1, 1,
  897. 1, 1, 1, 1, 1, 1, 1, 1,
  898. 1, 1, 220, 1, 1, 221, 1, 222,
  899. 1, 1, 1, 223, 1, 1, 224, 225,
  900. 226, 1, 1, 1, 227, 1, 228, 1,
  901. 217, 1, 1, 1, 1, 1, 1, 1,
  902. 1, 1, 1, 1, 1, 1, 1, 1,
  903. 1, 1, 1, 1, 1, 1, 1, 217,
  904. 1, 229, 1, 1, 1, 230, 1, 1,
  905. 1, 1, 1, 1, 1, 1, 1, 1,
  906. 1, 1, 1, 1, 1, 1, 1, 1,
  907. 229, 1, 1, 1, 1, 1, 1, 1,
  908. 231, 1, 1, 1, 1, 1, 1, 1,
  909. 1, 1, 1, 1, 1, 1, 1, 1,
  910. 1, 1, 1, 1, 1, 1, 1, 1,
  911. 1, 232, 1, 1, 233, 1, 234, 1,
  912. 1, 1, 235, 1, 1, 236, 237, 238,
  913. 1, 1, 1, 239, 1, 240, 1, 1,
  914. 1, 1, 241, 1, 242, 1, 242, 1,
  915. 1, 1, 243, 1, 1, 1, 1, 1,
  916. 1, 1, 1, 1, 1, 1, 1, 1,
  917. 1, 1, 1, 1, 1, 242, 1, 1,
  918. 1, 1, 1, 1, 1, 244, 1, 1,
  919. 1, 1, 1, 1, 1, 245, 245, 245,
  920. 245, 245, 245, 245, 245, 245, 245, 1,
  921. 246, 1, 242, 1, 1, 1, 1, 1,
  922. 1, 1, 1, 1, 1, 1, 1, 1,
  923. 1, 1, 1, 1, 1, 1, 1, 1,
  924. 1, 242, 1, 247, 1, 1, 1, 248,
  925. 1, 1, 1, 1, 1, 1, 1, 1,
  926. 1, 1, 1, 1, 1, 1, 1, 1,
  927. 1, 1, 247, 1, 1, 1, 1, 1,
  928. 1, 1, 249, 1, 1, 1, 1, 1,
  929. 1, 1, 250, 250, 250, 250, 250, 250,
  930. 250, 250, 250, 250, 1, 251, 251, 251,
  931. 251, 251, 251, 251, 251, 251, 251, 1,
  932. 252, 1, 1, 1, 253, 1, 1, 1,
  933. 1, 1, 1, 1, 1, 1, 1, 1,
  934. 1, 1, 1, 1, 1, 1, 1, 252,
  935. 1, 1, 1, 1, 1, 1, 1, 254,
  936. 1, 1, 1, 1, 1, 1, 1, 251,
  937. 251, 251, 251, 251, 251, 251, 251, 251,
  938. 251, 1, 252, 1, 1, 1, 253, 1,
  939. 1, 1, 1, 1, 1, 1, 1, 1,
  940. 1, 1, 1, 1, 1, 1, 1, 1,
  941. 1, 252, 1, 1, 1, 1, 1, 1,
  942. 1, 254, 1, 1, 1, 1, 1, 1,
  943. 1, 255, 255, 255, 255, 255, 255, 255,
  944. 255, 255, 255, 1, 256, 1, 252, 1,
  945. 1, 1, 1, 1, 1, 1, 1, 1,
  946. 1, 1, 1, 1, 1, 1, 1, 1,
  947. 1, 1, 1, 1, 1, 252, 1, 257,
  948. 1, 1, 1, 258, 1, 1, 1, 1,
  949. 1, 1, 1, 1, 1, 1, 1, 1,
  950. 1, 1, 1, 1, 1, 1, 257, 1,
  951. 1, 1, 1, 1, 1, 1, 259, 1,
  952. 1, 1, 1, 1, 1, 1, 260, 260,
  953. 260, 260, 260, 260, 260, 260, 260, 260,
  954. 1, 261, 261, 261, 261, 261, 261, 261,
  955. 261, 261, 261, 1, 261, 1, 1, 1,
  956. 262, 1, 1, 1, 1, 1, 1, 1,
  957. 1, 1, 1, 1, 1, 1, 1, 1,
  958. 1, 1, 1, 261, 1, 1, 1, 1,
  959. 1, 1, 1, 263, 1, 1, 1, 1,
  960. 1, 1, 1, 1, 1, 1, 1, 1,
  961. 1, 1, 1, 1, 1, 264, 1, 265,
  962. 1, 261, 1, 1, 1, 1, 1, 1,
  963. 1, 1, 1, 1, 1, 1, 1, 1,
  964. 1, 1, 1, 1, 1, 1, 1, 1,
  965. 261, 1, 266, 1, 1, 1, 267, 1,
  966. 1, 1, 1, 1, 1, 1, 1, 1,
  967. 1, 1, 1, 1, 1, 1, 1, 1,
  968. 1, 266, 1, 1, 1, 1, 1, 1,
  969. 1, 268, 1, 1, 1, 1, 1, 1,
  970. 1, 1, 1, 1, 1, 1, 1, 1,
  971. 1, 1, 1, 269, 1, 264, 1, 1,
  972. 1, 270, 1, 1, 1, 1, 1, 1,
  973. 1, 1, 1, 1, 1, 1, 1, 1,
  974. 1, 1, 1, 1, 264, 1, 1, 1,
  975. 1, 1, 1, 1, 271, 1, 1, 1,
  976. 1, 1, 1, 1, 272, 272, 272, 272,
  977. 272, 272, 272, 272, 272, 272, 1, 273,
  978. 1, 264, 1, 1, 1, 1, 1, 1,
  979. 1, 1, 1, 1, 1, 1, 1, 1,
  980. 1, 1, 1, 1, 1, 1, 1, 1,
  981. 264, 1, 269, 1, 1, 1, 274, 1,
  982. 1, 1, 1, 1, 1, 1, 1, 1,
  983. 1, 1, 1, 1, 1, 1, 1, 1,
  984. 1, 269, 1, 1, 1, 1, 1, 1,
  985. 1, 275, 1, 1, 1, 1, 1, 1,
  986. 1, 276, 276, 276, 276, 276, 276, 276,
  987. 276, 276, 276, 1, 277, 277, 277, 277,
  988. 277, 277, 277, 277, 277, 277, 1, 278,
  989. 1, 1, 1, 279, 1, 1, 1, 1,
  990. 1, 1, 1, 1, 1, 1, 1, 1,
  991. 1, 1, 1, 1, 1, 1, 278, 1,
  992. 1, 1, 1, 1, 1, 1, 280, 1,
  993. 1, 1, 1, 1, 1, 1, 1, 1,
  994. 1, 1, 1, 1, 1, 1, 1, 1,
  995. 281, 1, 278, 1, 1, 1, 279, 1,
  996. 1, 1, 1, 1, 1, 1, 1, 1,
  997. 1, 1, 1, 1, 1, 1, 1, 1,
  998. 1, 278, 1, 1, 1, 1, 1, 1,
  999. 1, 280, 1, 1, 282, 1, 282, 1,
  1000. 1, 1, 1, 1, 1, 1, 1, 1,
  1001. 1, 1, 1, 281, 1, 1, 1, 1,
  1002. 1, 1, 283, 283, 284, 283, 284, 283,
  1003. 285, 283, 283, 1, 283, 283, 284, 283,
  1004. 283, 284, 283, 283, 283, 283, 286, 283,
  1005. 283, 283, 283, 283, 1, 1, 1, 1,
  1006. 1, 1, 283, 283, 283, 283, 283, 283,
  1007. 283, 283, 283, 1, 283, 283, 283, 283,
  1008. 283, 283, 283, 283, 283, 283, 283, 283,
  1009. 283, 283, 283, 283, 1, 287, 1, 278,
  1010. 1, 1, 1, 1, 1, 1, 1, 1,
  1011. 1, 1, 1, 1, 1, 1, 1, 1,
  1012. 1, 1, 1, 1, 1, 1, 278, 1,
  1013. 288, 1, 1, 1, 289, 1, 1, 1,
  1014. 1, 1, 1, 1, 1, 1, 1, 1,
  1015. 1, 1, 1, 1, 1, 1, 1, 288,
  1016. 1, 1, 1, 1, 1, 1, 1, 290,
  1017. 1, 1, 1, 1, 1, 1, 1, 1,
  1018. 1, 1, 1, 1, 1, 1, 1, 1,
  1019. 1, 291, 1, 281, 1, 1, 1, 292,
  1020. 1, 1, 1, 1, 1, 1, 1, 1,
  1021. 1, 1, 1, 1, 1, 1, 1, 1,
  1022. 1, 1, 281, 1, 1, 1, 1, 1,
  1023. 1, 1, 293, 1, 1, 1, 1, 1,
  1024. 1, 1, 294, 294, 294, 294, 294, 294,
  1025. 294, 294, 294, 294, 1, 295, 1, 281,
  1026. 1, 1, 1, 1, 1, 1, 1, 1,
  1027. 1, 1, 1, 1, 1, 1, 1, 1,
  1028. 1, 1, 1, 1, 1, 1, 281, 1,
  1029. 291, 1, 1, 1, 296, 1, 1, 1,
  1030. 1, 1, 1, 1, 1, 1, 1, 1,
  1031. 1, 1, 1, 1, 1, 1, 1, 291,
  1032. 1, 1, 1, 1, 1, 1, 1, 297,
  1033. 1, 1, 1, 1, 1, 1, 1, 298,
  1034. 298, 298, 298, 298, 298, 298, 298, 298,
  1035. 298, 1, 299, 299, 299, 299, 299, 299,
  1036. 299, 299, 299, 299, 1, 300, 1, 1,
  1037. 1, 301, 1, 1, 1, 1, 1, 1,
  1038. 1, 1, 1, 1, 1, 1, 1, 1,
  1039. 1, 1, 1, 1, 300, 1, 1, 1,
  1040. 1, 1, 1, 1, 302, 1, 300, 1,
  1041. 1, 1, 301, 1, 1, 1, 1, 1,
  1042. 1, 1, 1, 1, 1, 1, 1, 1,
  1043. 1, 1, 1, 1, 1, 300, 1, 1,
  1044. 1, 1, 1, 1, 1, 302, 1, 1,
  1045. 282, 1, 282, 1, 1, 1, 1, 1,
  1046. 1, 1, 1, 1, 1, 1, 1, 1,
  1047. 1, 1, 1, 1, 1, 1, 283, 283,
  1048. 284, 283, 284, 283, 285, 283, 283, 1,
  1049. 283, 283, 284, 283, 283, 284, 283, 283,
  1050. 283, 283, 286, 283, 283, 283, 283, 283,
  1051. 1, 1, 1, 1, 1, 1, 283, 283,
  1052. 283, 283, 283, 283, 283, 283, 283, 1,
  1053. 283, 283, 283, 283, 283, 283, 283, 283,
  1054. 283, 283, 283, 283, 283, 283, 283, 283,
  1055. 1, 303, 1, 300, 1, 1, 1, 1,
  1056. 1, 1, 1, 1, 1, 1, 1, 1,
  1057. 1, 1, 1, 1, 1, 1, 1, 1,
  1058. 1, 1, 300, 1, 304, 1, 1, 1,
  1059. 305, 1, 1, 1, 1, 1, 1, 1,
  1060. 1, 1, 1, 1, 1, 1, 1, 1,
  1061. 1, 1, 1, 304, 1, 1, 1, 1,
  1062. 1, 1, 1, 306, 1, 307, 307, 307,
  1063. 307, 307, 307, 307, 307, 307, 307, 1,
  1064. 308, 308, 308, 308, 308, 308, 308, 308,
  1065. 308, 308, 1, 309, 309, 309, 309, 309,
  1066. 309, 309, 309, 309, 309, 1, 283, 283,
  1067. 283, 283, 283, 283, 283, 283, 283, 283,
  1068. 1, 310, 1, 311, 1, 1, 1, 1,
  1069. 1, 1, 1, 1, 1, 1, 1, 1,
  1070. 1, 1, 1, 1, 1, 1, 1, 1,
  1071. 1, 1, 311, 1, 283, 1, 242, 1,
  1072. 312, 1, 242, 1, 313, 1, 242, 1,
  1073. 314, 1, 1, 1, 1, 1, 1, 1,
  1074. 1, 1, 1, 1, 1, 1, 1, 1,
  1075. 1, 1, 1, 1, 315, 1, 242, 1,
  1076. 242, 1, 242, 1, 316, 1, 242, 1,
  1077. 1, 1, 1, 1, 1, 242, 1, 317,
  1078. 1, 242, 1, 318, 1, 242, 1, 319,
  1079. 1, 242, 1, 320, 1, 321, 1, 321,
  1080. 1, 1, 1, 322, 1, 1, 1, 1,
  1081. 1, 1, 1, 1, 1, 1, 1, 1,
  1082. 1, 1, 1, 1, 1, 1, 321, 1,
  1083. 1, 1, 1, 1, 1, 1, 323, 1,
  1084. 1, 1, 324, 1, 325, 1, 321, 1,
  1085. 1, 1, 1, 1, 1, 1, 1, 1,
  1086. 1, 1, 1, 1, 1, 1, 1, 1,
  1087. 1, 1, 1, 1, 1, 321, 1, 326,
  1088. 1, 1, 1, 327, 1, 1, 1, 1,
  1089. 1, 1, 1, 1, 1, 1, 1, 1,
  1090. 1, 1, 1, 1, 1, 1, 326, 1,
  1091. 1, 1, 1, 1, 1, 1, 328, 1,
  1092. 1, 1, 329, 1, 330, 1, 1, 1,
  1093. 331, 1, 1, 1, 1, 1, 1, 1,
  1094. 1, 1, 1, 1, 1, 1, 1, 1,
  1095. 1, 1, 1, 330, 1, 1, 1, 1,
  1096. 1, 1, 1, 332, 1, 1, 1, 1,
  1097. 1, 1, 1, 197, 197, 197, 197, 197,
  1098. 197, 197, 197, 197, 197, 1, 333, 1,
  1099. 1, 1, 334, 1, 1, 1, 1, 1,
  1100. 1, 1, 1, 1, 1, 1, 1, 1,
  1101. 1, 1, 1, 1, 1, 333, 1, 1,
  1102. 1, 1, 1, 1, 1, 335, 1, 1,
  1103. 1, 1, 1, 1, 1, 206, 206, 206,
  1104. 206, 206, 206, 206, 206, 206, 206, 1,
  1105. 336, 1, 333, 1, 1, 1, 1, 1,
  1106. 1, 1, 1, 1, 1, 1, 1, 1,
  1107. 1, 1, 1, 1, 1, 1, 1, 1,
  1108. 1, 333, 1, 337, 1, 1, 1, 338,
  1109. 1, 1, 1, 1, 1, 1, 1, 1,
  1110. 1, 1, 1, 1, 1, 1, 1, 1,
  1111. 1, 1, 337, 1, 1, 1, 1, 1,
  1112. 1, 1, 339, 1, 1, 1, 1, 1,
  1113. 1, 1, 211, 211, 211, 211, 211, 211,
  1114. 211, 211, 211, 211, 1, 340, 1, 321,
  1115. 1, 341, 1, 1, 1, 1, 1, 1,
  1116. 1, 1, 1, 1, 1, 1, 1, 1,
  1117. 1, 1, 1, 1, 1, 340, 1, 321,
  1118. 1, 342, 1, 1, 1, 1, 1, 1,
  1119. 1, 1, 1, 1, 1, 1, 343, 1,
  1120. 321, 1, 321, 1, 344, 1, 321, 1,
  1121. 345, 1, 1, 1, 346, 1, 1, 1,
  1122. 1, 1, 1, 1, 1, 1, 1, 1,
  1123. 1, 1, 1, 1, 1, 1, 1, 345,
  1124. 347, 348, 347, 347, 347, 347, 347, 349,
  1125. 1, 347, 347, 350, 347, 351, 347, 347,
  1126. 347, 347, 347, 347, 347, 347, 347, 347,
  1127. 347, 1, 1, 1, 347, 1, 347, 352,
  1128. 347, 347, 347, 347, 347, 347, 347, 347,
  1129. 347, 347, 347, 347, 347, 347, 347, 347,
  1130. 347, 347, 347, 347, 347, 347, 347, 347,
  1131. 347, 347, 1, 1, 1, 347, 347, 347,
  1132. 347, 347, 347, 347, 347, 347, 347, 347,
  1133. 347, 347, 347, 347, 347, 347, 347, 347,
  1134. 347, 347, 347, 347, 347, 347, 347, 347,
  1135. 347, 347, 347, 347, 347, 347, 1, 1,
  1136. 1, 1, 1, 1, 1, 1, 1, 1,
  1137. 1, 1, 1, 1, 1, 1, 1, 1,
  1138. 1, 1, 1, 1, 1, 1, 1, 1,
  1139. 1, 1, 1, 1, 1, 1, 1, 1,
  1140. 1, 1, 1, 1, 1, 1, 1, 1,
  1141. 1, 1, 1, 1, 1, 1, 1, 1,
  1142. 1, 1, 1, 1, 1, 1, 1, 1,
  1143. 1, 1, 1, 1, 1, 1, 1, 1,
  1144. 1, 353, 353, 353, 353, 353, 353, 353,
  1145. 353, 353, 353, 353, 353, 353, 353, 353,
  1146. 353, 353, 353, 353, 353, 353, 353, 353,
  1147. 353, 353, 353, 353, 353, 353, 353, 354,
  1148. 355, 355, 355, 355, 355, 355, 355, 355,
  1149. 355, 355, 355, 355, 356, 355, 355, 357,
  1150. 358, 358, 358, 359, 1, 360, 1, 1,
  1151. 1, 361, 1, 1, 1, 1, 1, 1,
  1152. 1, 1, 1, 1, 1, 1, 1, 1,
  1153. 1, 1, 1, 1, 360, 347, 348, 347,
  1154. 347, 347, 347, 347, 362, 1, 347, 347,
  1155. 363, 347, 351, 347, 347, 347, 347, 347,
  1156. 347, 347, 347, 347, 347, 347, 1, 1,
  1157. 1, 347, 1, 347, 364, 347, 347, 347,
  1158. 347, 347, 347, 347, 347, 347, 347, 347,
  1159. 347, 347, 347, 347, 347, 347, 347, 347,
  1160. 347, 347, 347, 347, 347, 347, 347, 1,
  1161. 1, 1, 347, 347, 347, 347, 347, 347,
  1162. 347, 347, 347, 347, 347, 347, 347, 347,
  1163. 347, 347, 347, 347, 347, 347, 347, 347,
  1164. 347, 347, 347, 347, 347, 347, 347, 347,
  1165. 347, 347, 347, 1, 1, 1, 1, 1,
  1166. 1, 1, 1, 1, 1, 1, 1, 1,
  1167. 1, 1, 1, 1, 1, 1, 1, 1,
  1168. 1, 1, 1, 1, 1, 1, 1, 1,
  1169. 1, 1, 1, 1, 1, 1, 1, 1,
  1170. 1, 1, 1, 1, 1, 1, 1, 1,
  1171. 1, 1, 1, 1, 1, 1, 1, 1,
  1172. 1, 1, 1, 1, 1, 1, 1, 1,
  1173. 1, 1, 1, 1, 1, 1, 353, 353,
  1174. 353, 353, 353, 353, 353, 353, 353, 353,
  1175. 353, 353, 353, 353, 353, 353, 353, 353,
  1176. 353, 353, 353, 353, 353, 353, 353, 353,
  1177. 353, 353, 353, 353, 354, 355, 355, 355,
  1178. 355, 355, 355, 355, 355, 355, 355, 355,
  1179. 355, 356, 355, 355, 357, 358, 358, 358,
  1180. 359, 1, 365, 1, 360, 1, 1, 1,
  1181. 1, 1, 1, 1, 1, 1, 1, 1,
  1182. 1, 1, 1, 1, 1, 1, 1, 1,
  1183. 1, 1, 1, 360, 1, 366, 1, 1,
  1184. 1, 367, 1, 1, 1, 1, 1, 1,
  1185. 1, 1, 1, 1, 1, 1, 1, 1,
  1186. 1, 1, 1, 1, 366, 368, 369, 368,
  1187. 368, 368, 368, 368, 370, 1, 368, 368,
  1188. 1, 368, 371, 368, 368, 368, 368, 368,
  1189. 368, 368, 368, 368, 368, 368, 1, 1,
  1190. 1, 368, 372, 368, 373, 368, 368, 368,
  1191. 368, 368, 368, 368, 368, 368, 368, 368,
  1192. 368, 368, 368, 368, 368, 368, 368, 368,
  1193. 368, 368, 368, 368, 368, 368, 368, 1,
  1194. 1, 1, 368, 368, 368, 368, 368, 368,
  1195. 368, 368, 368, 368, 368, 368, 368, 368,
  1196. 368, 368, 368, 368, 368, 368, 368, 368,
  1197. 368, 368, 368, 368, 368, 368, 368, 368,
  1198. 368, 368, 368, 1, 1, 1, 1, 1,
  1199. 1, 1, 1, 1, 1, 1, 1, 1,
  1200. 1, 1, 1, 1, 1, 1, 1, 1,
  1201. 1, 1, 1, 1, 1, 1, 1, 1,
  1202. 1, 1, 1, 1, 1, 1, 1, 1,
  1203. 1, 1, 1, 1, 1, 1, 1, 1,
  1204. 1, 1, 1, 1, 1, 1, 1, 1,
  1205. 1, 1, 1, 1, 1, 1, 1, 1,
  1206. 1, 1, 1, 1, 1, 1, 374, 374,
  1207. 374, 374, 374, 374, 374, 374, 374, 374,
  1208. 374, 374, 374, 374, 374, 374, 374, 374,
  1209. 374, 374, 374, 374, 374, 374, 374, 374,
  1210. 374, 374, 374, 374, 375, 376, 376, 376,
  1211. 376, 376, 376, 376, 376, 376, 376, 376,
  1212. 376, 377, 376, 376, 378, 379, 379, 379,
  1213. 380, 1, 381, 1, 1, 1, 382, 1,
  1214. 1, 1, 1, 1, 1, 1, 1, 1,
  1215. 1, 1, 1, 1, 1, 1, 1, 1,
  1216. 1, 381, 1, 1, 1, 1, 1, 1,
  1217. 1, 383, 1, 1, 1, 1, 1, 384,
  1218. 1, 1, 1, 1, 1, 1, 1, 1,
  1219. 1, 1, 1, 1, 1, 1, 1, 34,
  1220. 1, 385, 1, 386, 1, 381, 1, 1,
  1221. 1, 1, 1, 1, 1, 1, 1, 1,
  1222. 1, 1, 1, 1, 1, 1, 1, 1,
  1223. 1, 1, 1, 1, 381, 1, 387, 1,
  1224. 1, 1, 388, 1, 1, 1, 1, 1,
  1225. 1, 1, 1, 1, 1, 1, 1, 1,
  1226. 1, 1, 1, 1, 1, 387, 1, 1,
  1227. 1, 1, 1, 1, 1, 389, 1, 1,
  1228. 1, 1, 1, 390, 1, 1, 1, 1,
  1229. 1, 1, 1, 1, 1, 1, 1, 1,
  1230. 1, 1, 1, 391, 1, 392, 1, 384,
  1231. 1, 1, 1, 393, 1, 1, 1, 1,
  1232. 1, 1, 1, 1, 1, 1, 1, 1,
  1233. 1, 1, 1, 1, 1, 1, 384, 394,
  1234. 395, 394, 394, 394, 394, 394, 396, 1,
  1235. 394, 394, 1, 394, 1, 394, 394, 394,
  1236. 394, 394, 394, 394, 394, 394, 394, 394,
  1237. 1, 1, 1, 394, 1, 394, 1, 394,
  1238. 394, 394, 394, 394, 394, 394, 394, 394,
  1239. 394, 394, 394, 394, 394, 394, 394, 394,
  1240. 394, 394, 394, 394, 394, 394, 394, 394,
  1241. 394, 1, 1, 1, 394, 394, 394, 394,
  1242. 394, 394, 394, 394, 394, 394, 394, 394,
  1243. 394, 394, 394, 394, 394, 394, 394, 394,
  1244. 394, 394, 394, 394, 394, 394, 394, 394,
  1245. 394, 394, 394, 394, 394, 1, 1, 1,
  1246. 1, 1, 1, 1, 1, 1, 1, 1,
  1247. 1, 1, 1, 1, 1, 1, 1, 1,
  1248. 1, 1, 1, 1, 1, 1, 1, 1,
  1249. 1, 1, 1, 1, 1, 1, 1, 1,
  1250. 1, 1, 1, 1, 1, 1, 1, 1,
  1251. 1, 1, 1, 1, 1, 1, 1, 1,
  1252. 1, 1, 1, 1, 1, 1, 1, 1,
  1253. 1, 1, 1, 1, 1, 1, 1, 1,
  1254. 397, 397, 397, 397, 397, 397, 397, 397,
  1255. 397, 397, 397, 397, 397, 397, 397, 397,
  1256. 397, 397, 397, 397, 397, 397, 397, 397,
  1257. 397, 397, 397, 397, 397, 397, 398, 399,
  1258. 399, 399, 399, 399, 399, 399, 399, 399,
  1259. 399, 399, 399, 400, 399, 399, 401, 402,
  1260. 402, 402, 403, 1, 404, 1, 384, 1,
  1261. 1, 1, 1, 1, 1, 1, 1, 1,
  1262. 1, 1, 1, 1, 1, 1, 1, 1,
  1263. 1, 1, 1, 1, 1, 384, 1, 405,
  1264. 1, 1, 1, 406, 1, 1, 1, 1,
  1265. 1, 1, 1, 1, 1, 1, 1, 1,
  1266. 1, 1, 1, 1, 1, 1, 405, 394,
  1267. 1, 394, 394, 394, 394, 394, 407, 1,
  1268. 394, 394, 1, 394, 384, 394, 394, 394,
  1269. 394, 394, 394, 394, 394, 394, 394, 394,
  1270. 1, 1, 1, 394, 34, 394, 408, 394,
  1271. 394, 394, 394, 394, 394, 394, 394, 394,
  1272. 394, 394, 394, 394, 394, 394, 394, 394,
  1273. 394, 394, 394, 394, 394, 394, 394, 394,
  1274. 394, 1, 1, 1, 394, 394, 394, 394,
  1275. 394, 394, 394, 394, 394, 394, 394, 394,
  1276. 394, 394, 394, 394, 394, 394, 394, 394,
  1277. 394, 394, 394, 394, 394, 394, 394, 394,
  1278. 394, 394, 394, 394, 394, 1, 1, 1,
  1279. 1, 1, 1, 1, 1, 1, 1, 1,
  1280. 1, 1, 1, 1, 1, 1, 1, 1,
  1281. 1, 1, 1, 1, 1, 1, 1, 1,
  1282. 1, 1, 1, 1, 1, 1, 1, 1,
  1283. 1, 1, 1, 1, 1, 1, 1, 1,
  1284. 1, 1, 1, 1, 1, 1, 1, 1,
  1285. 1, 1, 1, 1, 1, 1, 1, 1,
  1286. 1, 1, 1, 1, 1, 1, 1, 1,
  1287. 397, 397, 397, 397, 397, 397, 397, 397,
  1288. 397, 397, 397, 397, 397, 397, 397, 397,
  1289. 397, 397, 397, 397, 397, 397, 397, 397,
  1290. 397, 397, 397, 397, 397, 397, 398, 399,
  1291. 399, 399, 399, 399, 399, 399, 399, 399,
  1292. 399, 399, 399, 400, 399, 399, 401, 402,
  1293. 402, 402, 403, 1, 405, 1, 1, 1,
  1294. 406, 1, 1, 1, 1, 1, 1, 1,
  1295. 1, 1, 1, 1, 1, 1, 1, 1,
  1296. 1, 1, 1, 405, 1, 1, 1, 1,
  1297. 1, 1, 1, 407, 1, 1, 1, 1,
  1298. 1, 384, 1, 1, 1, 1, 1, 1,
  1299. 1, 1, 1, 1, 1, 1, 1, 1,
  1300. 1, 34, 1, 408, 1, 409, 1, 405,
  1301. 1, 1, 1, 1, 1, 1, 1, 1,
  1302. 1, 1, 1, 1, 1, 1, 1, 1,
  1303. 1, 1, 1, 1, 1, 1, 405, 1,
  1304. 410, 1, 1, 1, 411, 1, 1, 1,
  1305. 1, 1, 1, 1, 1, 1, 1, 1,
  1306. 1, 1, 1, 1, 1, 1, 1, 410,
  1307. 1, 1, 1, 1, 1, 1, 1, 412,
  1308. 1, 1, 1, 1, 1, 390, 1, 1,
  1309. 1, 1, 1, 1, 1, 1, 1, 1,
  1310. 1, 1, 1, 1, 1, 391, 1, 413,
  1311. 1, 414, 1, 1, 1, 415, 1, 1,
  1312. 1, 1, 1, 1, 1, 1, 1, 1,
  1313. 1, 1, 1, 1, 1, 1, 1, 1,
  1314. 414, 416, 417, 416, 416, 416, 416, 416,
  1315. 418, 1, 416, 416, 1, 416, 419, 416,
  1316. 416, 416, 416, 416, 416, 416, 416, 416,
  1317. 416, 416, 1, 1, 1, 416, 1, 416,
  1318. 1, 416, 416, 416, 416, 416, 416, 416,
  1319. 416, 416, 416, 416, 416, 416, 416, 416,
  1320. 416, 416, 416, 416, 416, 416, 416, 416,
  1321. 416, 416, 416, 420, 1, 1, 416, 416,
  1322. 416, 416, 416, 416, 416, 416, 416, 416,
  1323. 416, 416, 416, 416, 416, 416, 416, 416,
  1324. 416, 416, 416, 416, 416, 416, 416, 416,
  1325. 416, 416, 416, 416, 416, 416, 416, 1,
  1326. 1, 1, 1, 1, 1, 1, 1, 1,
  1327. 1, 1, 1, 1, 1, 1, 1, 1,
  1328. 1, 1, 1, 1, 1, 1, 1, 1,
  1329. 1, 1, 1, 1, 1, 1, 1, 1,
  1330. 1, 1, 1, 1, 1, 1, 1, 1,
  1331. 1, 1, 1, 1, 1, 1, 1, 1,
  1332. 1, 1, 1, 1, 1, 1, 1, 1,
  1333. 1, 1, 1, 1, 1, 1, 1, 1,
  1334. 1, 1, 421, 421, 421, 421, 421, 421,
  1335. 421, 421, 421, 421, 421, 421, 421, 421,
  1336. 421, 421, 421, 421, 421, 421, 421, 421,
  1337. 421, 421, 421, 421, 421, 421, 421, 421,
  1338. 422, 423, 423, 423, 423, 423, 423, 423,
  1339. 423, 423, 423, 423, 423, 424, 423, 423,
  1340. 425, 426, 426, 426, 427, 1, 428, 1,
  1341. 1, 1, 429, 1, 1, 1, 1, 1,
  1342. 1, 1, 1, 1, 1, 1, 1, 1,
  1343. 1, 1, 1, 1, 1, 428, 430, 431,
  1344. 430, 430, 430, 430, 430, 432, 1, 430,
  1345. 430, 1, 430, 433, 430, 430, 430, 430,
  1346. 430, 430, 430, 430, 430, 430, 430, 1,
  1347. 1, 1, 430, 1, 430, 1, 430, 430,
  1348. 430, 430, 430, 430, 430, 430, 430, 430,
  1349. 430, 430, 430, 430, 430, 430, 430, 430,
  1350. 430, 430, 430, 430, 430, 430, 430, 430,
  1351. 434, 1, 1, 430, 430, 430, 430, 430,
  1352. 430, 430, 430, 430, 430, 430, 430, 430,
  1353. 430, 430, 430, 430, 430, 430, 430, 430,
  1354. 430, 430, 430, 430, 430, 430, 430, 430,
  1355. 430, 430, 430, 430, 1, 1, 1, 1,
  1356. 1, 1, 1, 1, 1, 1, 1, 1,
  1357. 1, 1, 1, 1, 1, 1, 1, 1,
  1358. 1, 1, 1, 1, 1, 1, 1, 1,
  1359. 1, 1, 1, 1, 1, 1, 1, 1,
  1360. 1, 1, 1, 1, 1, 1, 1, 1,
  1361. 1, 1, 1, 1, 1, 1, 1, 1,
  1362. 1, 1, 1, 1, 1, 1, 1, 1,
  1363. 1, 1, 1, 1, 1, 1, 1, 435,
  1364. 435, 435, 435, 435, 435, 435, 435, 435,
  1365. 435, 435, 435, 435, 435, 435, 435, 435,
  1366. 435, 435, 435, 435, 435, 435, 435, 435,
  1367. 435, 435, 435, 435, 435, 436, 437, 437,
  1368. 437, 437, 437, 437, 437, 437, 437, 437,
  1369. 437, 437, 438, 437, 437, 439, 440, 440,
  1370. 440, 441, 1, 442, 1, 428, 1, 1,
  1371. 1, 1, 1, 1, 1, 1, 1, 1,
  1372. 1, 1, 1, 1, 1, 1, 1, 1,
  1373. 1, 1, 1, 1, 428, 1, 443, 1,
  1374. 1, 1, 444, 1, 1, 1, 1, 1,
  1375. 1, 1, 1, 1, 1, 1, 1, 1,
  1376. 1, 1, 1, 1, 1, 443, 430, 431,
  1377. 430, 430, 430, 430, 430, 445, 1, 430,
  1378. 430, 1, 430, 446, 430, 430, 430, 430,
  1379. 430, 430, 430, 430, 430, 430, 430, 1,
  1380. 1, 1, 430, 447, 430, 1, 430, 430,
  1381. 430, 430, 430, 430, 430, 430, 430, 430,
  1382. 430, 430, 430, 430, 430, 430, 430, 430,
  1383. 430, 430, 430, 430, 430, 430, 430, 430,
  1384. 1, 1, 1, 430, 430, 430, 430, 430,
  1385. 430, 430, 430, 430, 430, 430, 430, 430,
  1386. 430, 430, 430, 430, 430, 430, 430, 430,
  1387. 430, 430, 430, 430, 430, 430, 430, 430,
  1388. 430, 430, 430, 430, 1, 1, 1, 1,
  1389. 1, 1, 1, 1, 1, 1, 1, 1,
  1390. 1, 1, 1, 1, 1, 1, 1, 1,
  1391. 1, 1, 1, 1, 1, 1, 1, 1,
  1392. 1, 1, 1, 1, 1, 1, 1, 1,
  1393. 1, 1, 1, 1, 1, 1, 1, 1,
  1394. 1, 1, 1, 1, 1, 1, 1, 1,
  1395. 1, 1, 1, 1, 1, 1, 1, 1,
  1396. 1, 1, 1, 1, 1, 1, 1, 435,
  1397. 435, 435, 435, 435, 435, 435, 435, 435,
  1398. 435, 435, 435, 435, 435, 435, 435, 435,
  1399. 435, 435, 435, 435, 435, 435, 435, 435,
  1400. 435, 435, 435, 435, 435, 436, 437, 437,
  1401. 437, 437, 437, 437, 437, 437, 437, 437,
  1402. 437, 437, 438, 437, 437, 439, 440, 440,
  1403. 440, 441, 1, 443, 1, 1, 1, 444,
  1404. 1, 1, 1, 1, 1, 1, 1, 1,
  1405. 1, 1, 1, 1, 1, 1, 1, 1,
  1406. 1, 1, 443, 1, 1, 1, 1, 1,
  1407. 1, 1, 445, 1, 1, 1, 1, 1,
  1408. 448, 1, 1, 1, 1, 1, 1, 1,
  1409. 1, 1, 1, 1, 1, 1, 1, 1,
  1410. 447, 1, 449, 1, 443, 1, 1, 1,
  1411. 1, 1, 1, 1, 1, 1, 1, 1,
  1412. 1, 1, 1, 1, 1, 1, 1, 1,
  1413. 1, 1, 1, 443, 1, 450, 1, 1,
  1414. 1, 451, 1, 1, 1, 1, 1, 1,
  1415. 1, 1, 1, 1, 1, 1, 1, 1,
  1416. 1, 1, 1, 1, 450, 1, 1, 1,
  1417. 1, 1, 1, 1, 452, 1, 1, 1,
  1418. 1, 1, 453, 1, 1, 1, 1, 1,
  1419. 1, 1, 1, 1, 1, 1, 1, 1,
  1420. 1, 1, 454, 1, 448, 1, 1, 1,
  1421. 455, 1, 1, 1, 1, 1, 1, 1,
  1422. 1, 1, 1, 1, 1, 1, 1, 1,
  1423. 1, 1, 1, 448, 456, 1, 456, 456,
  1424. 456, 456, 456, 457, 1, 456, 456, 1,
  1425. 456, 1, 456, 456, 456, 456, 456, 456,
  1426. 456, 456, 456, 456, 456, 1, 1, 1,
  1427. 456, 1, 456, 1, 456, 456, 456, 456,
  1428. 456, 456, 456, 456, 456, 456, 456, 456,
  1429. 456, 456, 456, 456, 456, 456, 456, 456,
  1430. 456, 456, 456, 456, 456, 456, 1, 1,
  1431. 1, 456, 456, 456, 456, 456, 456, 456,
  1432. 456, 456, 456, 456, 456, 456, 456, 456,
  1433. 456, 456, 456, 456, 456, 456, 456, 456,
  1434. 456, 456, 456, 456, 456, 456, 456, 456,
  1435. 456, 456, 1, 1, 1, 1, 1, 1,
  1436. 1, 1, 1, 1, 1, 1, 1, 1,
  1437. 1, 1, 1, 1, 1, 1, 1, 1,
  1438. 1, 1, 1, 1, 1, 1, 1, 1,
  1439. 1, 1, 1, 1, 1, 1, 1, 1,
  1440. 1, 1, 1, 1, 1, 1, 1, 1,
  1441. 1, 1, 1, 1, 1, 1, 1, 1,
  1442. 1, 1, 1, 1, 1, 1, 1, 1,
  1443. 1, 1, 1, 1, 1, 458, 458, 458,
  1444. 458, 458, 458, 458, 458, 458, 458, 458,
  1445. 458, 458, 458, 458, 458, 458, 458, 458,
  1446. 458, 458, 458, 458, 458, 458, 458, 458,
  1447. 458, 458, 458, 459, 460, 460, 460, 460,
  1448. 460, 460, 460, 460, 460, 460, 460, 460,
  1449. 461, 460, 460, 462, 463, 463, 463, 464,
  1450. 1, 465, 1, 448, 1, 1, 1, 1,
  1451. 1, 1, 1, 1, 1, 1, 1, 1,
  1452. 1, 1, 1, 1, 1, 1, 1, 1,
  1453. 1, 1, 448, 1, 443, 1, 1, 1,
  1454. 444, 1, 1, 1, 1, 1, 1, 1,
  1455. 1, 1, 1, 1, 1, 1, 1, 1,
  1456. 1, 1, 1, 443, 456, 1, 456, 456,
  1457. 456, 456, 456, 445, 1, 456, 456, 1,
  1458. 456, 448, 456, 456, 456, 456, 456, 456,
  1459. 456, 456, 456, 456, 456, 1, 1, 1,
  1460. 456, 447, 456, 1, 456, 456, 456, 456,
  1461. 456, 456, 456, 456, 456, 456, 456, 456,
  1462. 456, 456, 456, 456, 456, 456, 456, 456,
  1463. 456, 456, 456, 456, 456, 456, 1, 1,
  1464. 1, 456, 456, 456, 456, 456, 456, 456,
  1465. 456, 456, 456, 456, 456, 456, 456, 456,
  1466. 456, 456, 456, 456, 456, 456, 456, 456,
  1467. 456, 456, 456, 456, 456, 456, 456, 456,
  1468. 456, 456, 1, 1, 1, 1, 1, 1,
  1469. 1, 1, 1, 1, 1, 1, 1, 1,
  1470. 1, 1, 1, 1, 1, 1, 1, 1,
  1471. 1, 1, 1, 1, 1, 1, 1, 1,
  1472. 1, 1, 1, 1, 1, 1, 1, 1,
  1473. 1, 1, 1, 1, 1, 1, 1, 1,
  1474. 1, 1, 1, 1, 1, 1, 1, 1,
  1475. 1, 1, 1, 1, 1, 1, 1, 1,
  1476. 1, 1, 1, 1, 1, 458, 458, 458,
  1477. 458, 458, 458, 458, 458, 458, 458, 458,
  1478. 458, 458, 458, 458, 458, 458, 458, 458,
  1479. 458, 458, 458, 458, 458, 458, 458, 458,
  1480. 458, 458, 458, 459, 460, 460, 460, 460,
  1481. 460, 460, 460, 460, 460, 460, 460, 460,
  1482. 461, 460, 460, 462, 463, 463, 463, 464,
  1483. 1, 456, 456, 456, 456, 456, 456, 456,
  1484. 456, 456, 456, 456, 456, 456, 456, 456,
  1485. 456, 456, 456, 456, 456, 456, 456, 456,
  1486. 456, 456, 456, 456, 456, 456, 456, 456,
  1487. 456, 456, 456, 456, 456, 456, 456, 456,
  1488. 456, 456, 456, 456, 456, 456, 456, 456,
  1489. 456, 456, 456, 456, 456, 456, 456, 456,
  1490. 456, 456, 456, 456, 456, 456, 456, 456,
  1491. 456, 1, 458, 458, 458, 458, 458, 458,
  1492. 458, 458, 458, 458, 458, 458, 458, 458,
  1493. 458, 458, 458, 458, 458, 458, 458, 458,
  1494. 458, 458, 458, 458, 458, 458, 458, 458,
  1495. 458, 458, 1, 458, 458, 458, 458, 458,
  1496. 458, 458, 458, 458, 458, 458, 458, 458,
  1497. 458, 458, 458, 458, 458, 458, 458, 458,
  1498. 458, 458, 458, 458, 458, 458, 458, 458,
  1499. 458, 458, 458, 458, 458, 458, 458, 458,
  1500. 458, 458, 458, 458, 458, 458, 458, 458,
  1501. 458, 458, 458, 458, 458, 458, 458, 458,
  1502. 458, 458, 458, 458, 458, 458, 458, 458,
  1503. 458, 458, 458, 1, 458, 458, 458, 458,
  1504. 458, 458, 458, 458, 458, 458, 458, 458,
  1505. 458, 458, 458, 458, 458, 458, 458, 458,
  1506. 458, 458, 458, 458, 458, 458, 458, 458,
  1507. 458, 458, 458, 458, 1, 460, 460, 460,
  1508. 460, 460, 460, 460, 460, 460, 460, 460,
  1509. 460, 460, 460, 460, 460, 460, 460, 460,
  1510. 460, 460, 460, 460, 460, 460, 460, 460,
  1511. 460, 460, 460, 460, 460, 460, 460, 460,
  1512. 460, 460, 460, 460, 460, 460, 460, 460,
  1513. 460, 460, 460, 460, 460, 1, 460, 460,
  1514. 460, 460, 460, 460, 460, 460, 460, 460,
  1515. 460, 460, 460, 460, 460, 460, 460, 460,
  1516. 460, 460, 460, 460, 460, 460, 460, 460,
  1517. 460, 460, 460, 460, 460, 460, 460, 460,
  1518. 460, 460, 460, 460, 460, 460, 460, 460,
  1519. 460, 460, 460, 460, 460, 460, 460, 460,
  1520. 460, 460, 460, 460, 460, 460, 460, 460,
  1521. 460, 460, 460, 460, 460, 460, 1, 460,
  1522. 460, 460, 460, 460, 460, 460, 460, 460,
  1523. 460, 460, 460, 460, 460, 460, 460, 1,
  1524. 453, 1, 1, 1, 466, 1, 1, 1,
  1525. 1, 1, 1, 1, 1, 1, 1, 1,
  1526. 1, 1, 1, 1, 1, 1, 1, 453,
  1527. 467, 1, 467, 467, 467, 467, 467, 468,
  1528. 1, 467, 467, 1, 467, 1, 467, 467,
  1529. 467, 467, 467, 467, 467, 467, 467, 467,
  1530. 467, 1, 1, 1, 467, 1, 467, 1,
  1531. 467, 467, 467, 467, 467, 467, 467, 467,
  1532. 467, 467, 467, 467, 467, 467, 467, 467,
  1533. 467, 467, 467, 467, 467, 467, 467, 467,
  1534. 467, 467, 1, 1, 1, 467, 467, 467,
  1535. 467, 467, 467, 467, 467, 467, 467, 467,
  1536. 467, 467, 467, 467, 467, 467, 467, 467,
  1537. 467, 467, 467, 467, 467, 467, 467, 467,
  1538. 467, 467, 467, 467, 467, 467, 1, 1,
  1539. 1, 1, 1, 1, 1, 1, 1, 1,
  1540. 1, 1, 1, 1, 1, 1, 1, 1,
  1541. 1, 1, 1, 1, 1, 1, 1, 1,
  1542. 1, 1, 1, 1, 1, 1, 1, 1,
  1543. 1, 1, 1, 1, 1, 1, 1, 1,
  1544. 1, 1, 1, 1, 1, 1, 1, 1,
  1545. 1, 1, 1, 1, 1, 1, 1, 1,
  1546. 1, 1, 1, 1, 1, 1, 1, 1,
  1547. 1, 469, 469, 469, 469, 469, 469, 469,
  1548. 469, 469, 469, 469, 469, 469, 469, 469,
  1549. 469, 469, 469, 469, 469, 469, 469, 469,
  1550. 469, 469, 469, 469, 469, 469, 469, 470,
  1551. 471, 471, 471, 471, 471, 471, 471, 471,
  1552. 471, 471, 471, 471, 472, 471, 471, 473,
  1553. 474, 474, 474, 475, 1, 476, 476, 476,
  1554. 476, 476, 476, 476, 476, 431, 1, 476,
  1555. 476, 477, 476, 476, 476, 476, 476, 476,
  1556. 476, 476, 476, 476, 476, 476, 476, 476,
  1557. 476, 476, 476, 476, 431, 476, 1, 476,
  1558. 476, 476, 476, 476, 476, 476, 476, 476,
  1559. 476, 476, 476, 476, 476, 476, 476, 476,
  1560. 476, 476, 476, 476, 476, 476, 476, 476,
  1561. 476, 476, 476, 476, 476, 476, 476, 476,
  1562. 476, 476, 476, 476, 476, 476, 476, 476,
  1563. 476, 476, 476, 476, 476, 476, 476, 476,
  1564. 476, 476, 476, 476, 476, 476, 476, 476,
  1565. 478, 476, 476, 476, 476, 476, 476, 476,
  1566. 476, 476, 476, 476, 476, 476, 476, 476,
  1567. 476, 476, 476, 476, 476, 476, 476, 476,
  1568. 476, 476, 476, 476, 476, 476, 476, 476,
  1569. 476, 476, 476, 476, 1, 1, 1, 1,
  1570. 1, 1, 1, 1, 1, 1, 1, 1,
  1571. 1, 1, 1, 1, 1, 1, 1, 1,
  1572. 1, 1, 1, 1, 1, 1, 1, 1,
  1573. 1, 1, 1, 1, 1, 1, 1, 1,
  1574. 1, 1, 1, 1, 1, 1, 1, 1,
  1575. 1, 1, 1, 1, 1, 1, 1, 1,
  1576. 1, 1, 1, 1, 1, 1, 1, 1,
  1577. 1, 1, 1, 1, 1, 1, 479, 479,
  1578. 479, 479, 479, 479, 479, 479, 479, 479,
  1579. 479, 479, 479, 479, 479, 479, 479, 479,
  1580. 479, 479, 479, 479, 479, 479, 479, 479,
  1581. 479, 479, 479, 479, 480, 481, 481, 481,
  1582. 481, 481, 481, 481, 481, 481, 481, 481,
  1583. 481, 482, 481, 481, 483, 484, 484, 484,
  1584. 485, 1, 476, 476, 476, 476, 476, 476,
  1585. 476, 476, 476, 1, 476, 476, 486, 476,
  1586. 476, 476, 476, 476, 476, 476, 476, 476,
  1587. 476, 476, 476, 476, 476, 476, 476, 476,
  1588. 476, 476, 476, 487, 476, 476, 476, 476,
  1589. 476, 476, 476, 476, 476, 476, 476, 476,
  1590. 476, 476, 476, 476, 476, 476, 476, 476,
  1591. 476, 476, 476, 476, 476, 476, 476, 476,
  1592. 476, 476, 476, 476, 476, 476, 476, 476,
  1593. 476, 476, 476, 476, 476, 476, 476, 476,
  1594. 476, 476, 476, 476, 476, 476, 476, 476,
  1595. 476, 476, 476, 476, 476, 478, 476, 476,
  1596. 476, 476, 476, 476, 476, 476, 476, 476,
  1597. 476, 476, 476, 476, 476, 476, 476, 476,
  1598. 476, 476, 476, 476, 476, 476, 476, 476,
  1599. 476, 476, 476, 476, 476, 476, 476, 476,
  1600. 476, 1, 1, 1, 1, 1, 1, 1,
  1601. 1, 1, 1, 1, 1, 1, 1, 1,
  1602. 1, 1, 1, 1, 1, 1, 1, 1,
  1603. 1, 1, 1, 1, 1, 1, 1, 1,
  1604. 1, 1, 1, 1, 1, 1, 1, 1,
  1605. 1, 1, 1, 1, 1, 1, 1, 1,
  1606. 1, 1, 1, 1, 1, 1, 1, 1,
  1607. 1, 1, 1, 1, 1, 1, 1, 1,
  1608. 1, 1, 1, 479, 479, 479, 479, 479,
  1609. 479, 479, 479, 479, 479, 479, 479, 479,
  1610. 479, 479, 479, 479, 479, 479, 479, 479,
  1611. 479, 479, 479, 479, 479, 479, 479, 479,
  1612. 479, 480, 481, 481, 481, 481, 481, 481,
  1613. 481, 481, 481, 481, 481, 481, 482, 481,
  1614. 481, 483, 484, 484, 484, 485, 1, 488,
  1615. 1, 476, 1, 1, 1, 1, 1, 1,
  1616. 1, 1, 1, 1, 1, 1, 1, 1,
  1617. 1, 1, 1, 1, 1, 1, 1, 1,
  1618. 476, 1, 489, 1, 1, 1, 490, 1,
  1619. 1, 1, 1, 1, 1, 1, 1, 1,
  1620. 1, 1, 1, 1, 1, 1, 1, 1,
  1621. 1, 489, 487, 431, 487, 487, 487, 487,
  1622. 487, 491, 1, 487, 487, 1, 487, 433,
  1623. 487, 487, 487, 487, 487, 487, 487, 487,
  1624. 487, 487, 487, 1, 1, 1, 487, 447,
  1625. 487, 1, 487, 487, 487, 487, 487, 487,
  1626. 487, 487, 487, 487, 487, 487, 487, 487,
  1627. 487, 487, 487, 487, 487, 487, 487, 487,
  1628. 487, 487, 487, 487, 1, 1, 1, 487,
  1629. 487, 487, 487, 487, 487, 487, 487, 487,
  1630. 487, 487, 487, 487, 487, 487, 487, 487,
  1631. 487, 487, 487, 487, 487, 487, 487, 487,
  1632. 487, 487, 487, 487, 487, 487, 487, 487,
  1633. 1, 1, 1, 1, 1, 1, 1, 1,
  1634. 1, 1, 1, 1, 1, 1, 1, 1,
  1635. 1, 1, 1, 1, 1, 1, 1, 1,
  1636. 1, 1, 1, 1, 1, 1, 1, 1,
  1637. 1, 1, 1, 1, 1, 1, 1, 1,
  1638. 1, 1, 1, 1, 1, 1, 1, 1,
  1639. 1, 1, 1, 1, 1, 1, 1, 1,
  1640. 1, 1, 1, 1, 1, 1, 1, 1,
  1641. 1, 1, 1, 492, 492, 492, 492, 492,
  1642. 492, 492, 492, 492, 492, 492, 492, 492,
  1643. 492, 492, 492, 492, 492, 492, 492, 492,
  1644. 492, 492, 492, 492, 492, 492, 492, 492,
  1645. 492, 493, 494, 494, 494, 494, 494, 494,
  1646. 494, 494, 494, 494, 494, 494, 495, 494,
  1647. 494, 496, 497, 497, 497, 498, 1, 489,
  1648. 1, 1, 1, 490, 1, 1, 1, 1,
  1649. 1, 1, 1, 1, 1, 1, 1, 1,
  1650. 1, 1, 1, 1, 1, 1, 489, 1,
  1651. 1, 1, 1, 1, 1, 1, 491, 1,
  1652. 1, 1, 1, 1, 1, 1, 1, 1,
  1653. 1, 1, 1, 1, 1, 1, 1, 1,
  1654. 1, 1, 1, 1, 447, 1, 499, 1,
  1655. 489, 1, 1, 1, 1, 1, 1, 1,
  1656. 1, 1, 1, 1, 1, 1, 1, 1,
  1657. 1, 1, 1, 1, 1, 1, 1, 489,
  1658. 1, 500, 1, 1, 1, 501, 1, 1,
  1659. 1, 1, 1, 1, 1, 1, 1, 1,
  1660. 1, 1, 1, 1, 1, 1, 1, 1,
  1661. 500, 1, 1, 1, 1, 1, 1, 1,
  1662. 502, 1, 1, 1, 1, 1, 1, 1,
  1663. 1, 1, 1, 1, 1, 1, 1, 1,
  1664. 1, 1, 1, 1, 1, 1, 454, 1,
  1665. 487, 431, 487, 487, 487, 487, 487, 1,
  1666. 1, 487, 487, 1, 487, 433, 487, 487,
  1667. 487, 487, 487, 487, 487, 487, 487, 487,
  1668. 487, 1, 1, 1, 487, 1, 487, 1,
  1669. 487, 487, 487, 487, 487, 487, 487, 487,
  1670. 487, 487, 487, 487, 487, 487, 487, 487,
  1671. 487, 487, 487, 487, 487, 487, 487, 487,
  1672. 487, 487, 1, 1, 1, 487, 487, 487,
  1673. 487, 487, 487, 487, 487, 487, 487, 487,
  1674. 487, 487, 487, 487, 487, 487, 487, 487,
  1675. 487, 487, 487, 487, 487, 487, 487, 487,
  1676. 487, 487, 487, 487, 487, 487, 1, 1,
  1677. 1, 1, 1, 1, 1, 1, 1, 1,
  1678. 1, 1, 1, 1, 1, 1, 1, 1,
  1679. 1, 1, 1, 1, 1, 1, 1, 1,
  1680. 1, 1, 1, 1, 1, 1, 1, 1,
  1681. 1, 1, 1, 1, 1, 1, 1, 1,
  1682. 1, 1, 1, 1, 1, 1, 1, 1,
  1683. 1, 1, 1, 1, 1, 1, 1, 1,
  1684. 1, 1, 1, 1, 1, 1, 1, 1,
  1685. 1, 492, 492, 492, 492, 492, 492, 492,
  1686. 492, 492, 492, 492, 492, 492, 492, 492,
  1687. 492, 492, 492, 492, 492, 492, 492, 492,
  1688. 492, 492, 492, 492, 492, 492, 492, 493,
  1689. 494, 494, 494, 494, 494, 494, 494, 494,
  1690. 494, 494, 494, 494, 495, 494, 494, 496,
  1691. 497, 497, 497, 498, 1, 487, 487, 487,
  1692. 487, 487, 487, 487, 487, 487, 487, 487,
  1693. 487, 487, 487, 487, 487, 487, 487, 487,
  1694. 487, 487, 487, 487, 487, 487, 487, 487,
  1695. 487, 487, 487, 487, 487, 487, 487, 487,
  1696. 487, 487, 487, 487, 487, 487, 487, 487,
  1697. 487, 487, 487, 487, 487, 487, 487, 487,
  1698. 487, 487, 487, 487, 487, 487, 487, 487,
  1699. 487, 487, 487, 487, 487, 1, 492, 492,
  1700. 492, 492, 492, 492, 492, 492, 492, 492,
  1701. 492, 492, 492, 492, 492, 492, 492, 492,
  1702. 492, 492, 492, 492, 492, 492, 492, 492,
  1703. 492, 492, 492, 492, 492, 492, 1, 492,
  1704. 492, 492, 492, 492, 492, 492, 492, 492,
  1705. 492, 492, 492, 492, 492, 492, 492, 492,
  1706. 492, 492, 492, 492, 492, 492, 492, 492,
  1707. 492, 492, 492, 492, 492, 492, 492, 492,
  1708. 492, 492, 492, 492, 492, 492, 492, 492,
  1709. 492, 492, 492, 492, 492, 492, 492, 492,
  1710. 492, 492, 492, 492, 492, 492, 492, 492,
  1711. 492, 492, 492, 492, 492, 492, 492, 1,
  1712. 492, 492, 492, 492, 492, 492, 492, 492,
  1713. 492, 492, 492, 492, 492, 492, 492, 492,
  1714. 492, 492, 492, 492, 492, 492, 492, 492,
  1715. 492, 492, 492, 492, 492, 492, 492, 492,
  1716. 1, 494, 494, 494, 494, 494, 494, 494,
  1717. 494, 494, 494, 494, 494, 494, 494, 494,
  1718. 494, 494, 494, 494, 494, 494, 494, 494,
  1719. 494, 494, 494, 494, 494, 494, 494, 494,
  1720. 494, 494, 494, 494, 494, 494, 494, 494,
  1721. 494, 494, 494, 494, 494, 494, 494, 494,
  1722. 494, 1, 494, 494, 494, 494, 494, 494,
  1723. 494, 494, 494, 494, 494, 494, 494, 494,
  1724. 494, 494, 494, 494, 494, 494, 494, 494,
  1725. 494, 494, 494, 494, 494, 494, 494, 494,
  1726. 494, 494, 494, 494, 494, 494, 494, 494,
  1727. 494, 494, 494, 494, 494, 494, 494, 494,
  1728. 494, 494, 494, 494, 494, 494, 494, 494,
  1729. 494, 494, 494, 494, 494, 494, 494, 494,
  1730. 494, 494, 1, 494, 494, 494, 494, 494,
  1731. 494, 494, 494, 494, 494, 494, 494, 494,
  1732. 494, 494, 494, 1, 476, 476, 476, 476,
  1733. 476, 476, 476, 476, 476, 476, 476, 476,
  1734. 476, 476, 476, 476, 476, 476, 476, 476,
  1735. 476, 476, 476, 476, 476, 476, 476, 476,
  1736. 476, 476, 476, 476, 476, 476, 476, 476,
  1737. 476, 476, 476, 476, 476, 476, 476, 476,
  1738. 476, 476, 476, 476, 476, 476, 476, 476,
  1739. 476, 476, 476, 476, 476, 476, 476, 476,
  1740. 476, 476, 476, 476, 476, 476, 476, 476,
  1741. 476, 476, 476, 476, 476, 476, 476, 476,
  1742. 476, 476, 476, 476, 476, 476, 476, 476,
  1743. 476, 476, 476, 476, 476, 476, 476, 476,
  1744. 476, 476, 476, 476, 476, 476, 476, 476,
  1745. 476, 476, 476, 476, 476, 476, 476, 476,
  1746. 476, 476, 476, 476, 476, 476, 476, 476,
  1747. 476, 476, 476, 476, 476, 476, 476, 476,
  1748. 476, 476, 476, 476, 1, 1, 1, 1,
  1749. 1, 1, 1, 1, 1, 1, 1, 1,
  1750. 1, 1, 1, 1, 1, 1, 1, 1,
  1751. 1, 1, 1, 1, 1, 1, 1, 1,
  1752. 1, 1, 1, 1, 1, 1, 1, 1,
  1753. 1, 1, 1, 1, 1, 1, 1, 1,
  1754. 1, 1, 1, 1, 1, 1, 1, 1,
  1755. 1, 1, 1, 1, 1, 1, 1, 1,
  1756. 1, 1, 1, 1, 1, 1, 479, 479,
  1757. 479, 479, 479, 479, 479, 479, 479, 479,
  1758. 479, 479, 479, 479, 479, 479, 479, 479,
  1759. 479, 479, 479, 479, 479, 479, 479, 479,
  1760. 479, 479, 479, 479, 480, 481, 481, 481,
  1761. 481, 481, 481, 481, 481, 481, 481, 481,
  1762. 481, 482, 481, 481, 483, 484, 484, 484,
  1763. 485, 1, 476, 476, 476, 476, 476, 476,
  1764. 476, 476, 476, 476, 476, 476, 476, 476,
  1765. 476, 476, 476, 476, 476, 476, 476, 476,
  1766. 476, 476, 476, 476, 476, 476, 476, 476,
  1767. 476, 476, 476, 476, 476, 476, 476, 476,
  1768. 476, 476, 476, 476, 476, 476, 476, 476,
  1769. 476, 476, 476, 476, 476, 476, 476, 476,
  1770. 476, 476, 476, 476, 476, 476, 476, 476,
  1771. 476, 476, 1, 479, 479, 479, 479, 479,
  1772. 479, 479, 479, 479, 479, 479, 479, 479,
  1773. 479, 479, 479, 479, 479, 479, 479, 479,
  1774. 479, 479, 479, 479, 479, 479, 479, 479,
  1775. 479, 479, 479, 1, 479, 479, 479, 479,
  1776. 479, 479, 479, 479, 479, 479, 479, 479,
  1777. 479, 479, 479, 479, 479, 479, 479, 479,
  1778. 479, 479, 479, 479, 479, 479, 479, 479,
  1779. 479, 479, 479, 479, 479, 479, 479, 479,
  1780. 479, 479, 479, 479, 479, 479, 479, 479,
  1781. 479, 479, 479, 479, 479, 479, 479, 479,
  1782. 479, 479, 479, 479, 479, 479, 479, 479,
  1783. 479, 479, 479, 479, 1, 479, 479, 479,
  1784. 479, 479, 479, 479, 479, 479, 479, 479,
  1785. 479, 479, 479, 479, 479, 479, 479, 479,
  1786. 479, 479, 479, 479, 479, 479, 479, 479,
  1787. 479, 479, 479, 479, 479, 1, 481, 481,
  1788. 481, 481, 481, 481, 481, 481, 481, 481,
  1789. 481, 481, 481, 481, 481, 481, 481, 481,
  1790. 481, 481, 481, 481, 481, 481, 481, 481,
  1791. 481, 481, 481, 481, 481, 481, 481, 481,
  1792. 481, 481, 481, 481, 481, 481, 481, 481,
  1793. 481, 481, 481, 481, 481, 481, 1, 481,
  1794. 481, 481, 481, 481, 481, 481, 481, 481,
  1795. 481, 481, 481, 481, 481, 481, 481, 481,
  1796. 481, 481, 481, 481, 481, 481, 481, 481,
  1797. 481, 481, 481, 481, 481, 481, 481, 481,
  1798. 481, 481, 481, 481, 481, 481, 481, 481,
  1799. 481, 481, 481, 481, 481, 481, 481, 481,
  1800. 481, 481, 481, 481, 481, 481, 481, 481,
  1801. 481, 481, 481, 481, 481, 481, 481, 1,
  1802. 481, 481, 481, 481, 481, 481, 481, 481,
  1803. 481, 481, 481, 481, 481, 481, 481, 481,
  1804. 1, 503, 1, 431, 1, 1, 1, 1,
  1805. 1, 1, 1, 1, 1, 1, 1, 1,
  1806. 1, 1, 1, 1, 1, 1, 1, 1,
  1807. 1, 1, 431, 1, 448, 1, 1, 1,
  1808. 455, 1, 1, 1, 1, 1, 1, 1,
  1809. 1, 1, 1, 1, 1, 1, 1, 1,
  1810. 1, 1, 1, 448, 430, 431, 430, 430,
  1811. 430, 430, 430, 457, 1, 430, 430, 1,
  1812. 430, 433, 430, 430, 430, 430, 430, 430,
  1813. 430, 430, 430, 430, 430, 1, 1, 1,
  1814. 430, 1, 430, 1, 430, 430, 430, 430,
  1815. 430, 430, 430, 430, 430, 430, 430, 430,
  1816. 430, 430, 430, 430, 430, 430, 430, 430,
  1817. 430, 430, 430, 430, 430, 430, 1, 1,
  1818. 1, 430, 430, 430, 430, 430, 430, 430,
  1819. 430, 430, 430, 430, 430, 430, 430, 430,
  1820. 430, 430, 430, 430, 430, 430, 430, 430,
  1821. 430, 430, 430, 430, 430, 430, 430, 430,
  1822. 430, 430, 1, 1, 1, 1, 1, 1,
  1823. 1, 1, 1, 1, 1, 1, 1, 1,
  1824. 1, 1, 1, 1, 1, 1, 1, 1,
  1825. 1, 1, 1, 1, 1, 1, 1, 1,
  1826. 1, 1, 1, 1, 1, 1, 1, 1,
  1827. 1, 1, 1, 1, 1, 1, 1, 1,
  1828. 1, 1, 1, 1, 1, 1, 1, 1,
  1829. 1, 1, 1, 1, 1, 1, 1, 1,
  1830. 1, 1, 1, 1, 1, 435, 435, 435,
  1831. 435, 435, 435, 435, 435, 435, 435, 435,
  1832. 435, 435, 435, 435, 435, 435, 435, 435,
  1833. 435, 435, 435, 435, 435, 435, 435, 435,
  1834. 435, 435, 435, 436, 437, 437, 437, 437,
  1835. 437, 437, 437, 437, 437, 437, 437, 437,
  1836. 438, 437, 437, 439, 440, 440, 440, 441,
  1837. 1, 430, 430, 430, 430, 430, 430, 430,
  1838. 430, 430, 430, 430, 430, 430, 430, 430,
  1839. 430, 430, 430, 430, 430, 430, 430, 430,
  1840. 430, 430, 430, 430, 430, 430, 430, 430,
  1841. 430, 430, 430, 430, 430, 430, 430, 430,
  1842. 430, 430, 430, 430, 430, 430, 430, 430,
  1843. 430, 430, 430, 430, 430, 430, 430, 430,
  1844. 430, 430, 430, 430, 430, 430, 430, 430,
  1845. 430, 1, 435, 435, 435, 435, 435, 435,
  1846. 435, 435, 435, 435, 435, 435, 435, 435,
  1847. 435, 435, 435, 435, 435, 435, 435, 435,
  1848. 435, 435, 435, 435, 435, 435, 435, 435,
  1849. 435, 435, 1, 435, 435, 435, 435, 435,
  1850. 435, 435, 435, 435, 435, 435, 435, 435,
  1851. 435, 435, 435, 435, 435, 435, 435, 435,
  1852. 435, 435, 435, 435, 435, 435, 435, 435,
  1853. 435, 435, 435, 435, 435, 435, 435, 435,
  1854. 435, 435, 435, 435, 435, 435, 435, 435,
  1855. 435, 435, 435, 435, 435, 435, 435, 435,
  1856. 435, 435, 435, 435, 435, 435, 435, 435,
  1857. 435, 435, 435, 1, 435, 435, 435, 435,
  1858. 435, 435, 435, 435, 435, 435, 435, 435,
  1859. 435, 435, 435, 435, 435, 435, 435, 435,
  1860. 435, 435, 435, 435, 435, 435, 435, 435,
  1861. 435, 435, 435, 435, 1, 437, 437, 437,
  1862. 437, 437, 437, 437, 437, 437, 437, 437,
  1863. 437, 437, 437, 437, 437, 437, 437, 437,
  1864. 437, 437, 437, 437, 437, 437, 437, 437,
  1865. 437, 437, 437, 437, 437, 437, 437, 437,
  1866. 437, 437, 437, 437, 437, 437, 437, 437,
  1867. 437, 437, 437, 437, 437, 1, 437, 437,
  1868. 437, 437, 437, 437, 437, 437, 437, 437,
  1869. 437, 437, 437, 437, 437, 437, 437, 437,
  1870. 437, 437, 437, 437, 437, 437, 437, 437,
  1871. 437, 437, 437, 437, 437, 437, 437, 437,
  1872. 437, 437, 437, 437, 437, 437, 437, 437,
  1873. 437, 437, 437, 437, 437, 437, 437, 437,
  1874. 437, 437, 437, 437, 437, 437, 437, 437,
  1875. 437, 437, 437, 437, 437, 437, 1, 437,
  1876. 437, 437, 437, 437, 437, 437, 437, 437,
  1877. 437, 437, 437, 437, 437, 437, 437, 1,
  1878. 504, 1, 1, 1, 505, 1, 1, 1,
  1879. 1, 1, 1, 1, 1, 1, 1, 1,
  1880. 1, 1, 1, 1, 1, 1, 1, 504,
  1881. 506, 507, 506, 506, 506, 506, 506, 508,
  1882. 1, 506, 506, 1, 506, 509, 506, 506,
  1883. 506, 506, 506, 506, 506, 506, 506, 506,
  1884. 506, 1, 1, 1, 506, 1, 506, 1,
  1885. 506, 506, 506, 506, 506, 506, 506, 506,
  1886. 506, 506, 506, 506, 506, 506, 506, 506,
  1887. 506, 506, 506, 506, 506, 506, 506, 506,
  1888. 506, 506, 510, 1, 1, 506, 506, 506,
  1889. 506, 506, 506, 506, 506, 506, 506, 506,
  1890. 506, 506, 506, 506, 506, 506, 506, 506,
  1891. 506, 506, 506, 506, 506, 506, 506, 506,
  1892. 506, 506, 506, 506, 506, 506, 1, 1,
  1893. 1, 1, 1, 1, 1, 1, 1, 1,
  1894. 1, 1, 1, 1, 1, 1, 1, 1,
  1895. 1, 1, 1, 1, 1, 1, 1, 1,
  1896. 1, 1, 1, 1, 1, 1, 1, 1,
  1897. 1, 1, 1, 1, 1, 1, 1, 1,
  1898. 1, 1, 1, 1, 1, 1, 1, 1,
  1899. 1, 1, 1, 1, 1, 1, 1, 1,
  1900. 1, 1, 1, 1, 1, 1, 1, 1,
  1901. 1, 511, 511, 511, 511, 511, 511, 511,
  1902. 511, 511, 511, 511, 511, 511, 511, 511,
  1903. 511, 511, 511, 511, 511, 511, 511, 511,
  1904. 511, 511, 511, 511, 511, 511, 511, 512,
  1905. 513, 513, 513, 513, 513, 513, 513, 513,
  1906. 513, 513, 513, 513, 514, 513, 513, 515,
  1907. 516, 516, 516, 517, 1, 434, 434, 434,
  1908. 434, 434, 434, 434, 434, 434, 1, 434,
  1909. 434, 518, 434, 434, 434, 434, 434, 434,
  1910. 434, 434, 434, 434, 434, 434, 434, 434,
  1911. 434, 434, 434, 434, 434, 434, 434, 434,
  1912. 434, 434, 434, 434, 434, 434, 434, 434,
  1913. 434, 434, 434, 434, 434, 434, 434, 434,
  1914. 434, 434, 434, 434, 434, 434, 434, 434,
  1915. 434, 434, 434, 434, 434, 434, 434, 434,
  1916. 434, 434, 434, 434, 434, 434, 434, 434,
  1917. 434, 434, 434, 434, 434, 434, 434, 434,
  1918. 434, 434, 434, 434, 434, 434, 434, 1,
  1919. 519, 489, 434, 434, 434, 434, 434, 434,
  1920. 434, 434, 434, 434, 434, 434, 434, 434,
  1921. 434, 434, 434, 434, 434, 434, 434, 434,
  1922. 434, 434, 434, 434, 434, 434, 434, 434,
  1923. 434, 434, 434, 434, 1, 1, 1, 1,
  1924. 1, 1, 1, 1, 1, 1, 1, 1,
  1925. 1, 1, 1, 1, 1, 1, 1, 1,
  1926. 1, 1, 1, 1, 1, 1, 1, 1,
  1927. 1, 1, 1, 1, 1, 1, 1, 1,
  1928. 1, 1, 1, 1, 1, 1, 1, 1,
  1929. 1, 1, 1, 1, 1, 1, 1, 1,
  1930. 1, 1, 1, 1, 1, 1, 1, 1,
  1931. 1, 1, 1, 1, 1, 1, 520, 520,
  1932. 520, 520, 520, 520, 520, 520, 520, 520,
  1933. 520, 520, 520, 520, 520, 520, 520, 520,
  1934. 520, 520, 520, 520, 520, 520, 520, 520,
  1935. 520, 520, 520, 520, 521, 522, 522, 522,
  1936. 522, 522, 522, 522, 522, 522, 522, 522,
  1937. 522, 523, 522, 522, 524, 525, 525, 525,
  1938. 526, 1, 527, 1, 434, 1, 1, 1,
  1939. 1, 1, 1, 1, 1, 1, 1, 1,
  1940. 1, 1, 1, 1, 1, 1, 1, 1,
  1941. 1, 1, 1, 434, 1, 434, 434, 434,
  1942. 434, 434, 434, 434, 434, 434, 434, 434,
  1943. 434, 434, 434, 434, 434, 434, 434, 434,
  1944. 434, 434, 434, 434, 434, 434, 434, 434,
  1945. 434, 434, 434, 434, 434, 434, 434, 434,
  1946. 434, 434, 434, 434, 434, 434, 434, 434,
  1947. 434, 434, 434, 434, 434, 434, 434, 434,
  1948. 434, 434, 434, 434, 434, 434, 434, 434,
  1949. 434, 434, 434, 434, 434, 434, 434, 434,
  1950. 434, 434, 434, 434, 434, 434, 434, 434,
  1951. 434, 434, 434, 434, 434, 434, 434, 434,
  1952. 434, 434, 434, 434, 434, 434, 434, 434,
  1953. 434, 434, 434, 434, 434, 434, 434, 434,
  1954. 434, 434, 434, 434, 434, 434, 434, 434,
  1955. 434, 434, 434, 434, 434, 434, 434, 434,
  1956. 434, 434, 434, 434, 434, 434, 434, 434,
  1957. 434, 434, 434, 434, 434, 1, 1, 1,
  1958. 1, 1, 1, 1, 1, 1, 1, 1,
  1959. 1, 1, 1, 1, 1, 1, 1, 1,
  1960. 1, 1, 1, 1, 1, 1, 1, 1,
  1961. 1, 1, 1, 1, 1, 1, 1, 1,
  1962. 1, 1, 1, 1, 1, 1, 1, 1,
  1963. 1, 1, 1, 1, 1, 1, 1, 1,
  1964. 1, 1, 1, 1, 1, 1, 1, 1,
  1965. 1, 1, 1, 1, 1, 1, 1, 520,
  1966. 520, 520, 520, 520, 520, 520, 520, 520,
  1967. 520, 520, 520, 520, 520, 520, 520, 520,
  1968. 520, 520, 520, 520, 520, 520, 520, 520,
  1969. 520, 520, 520, 520, 520, 521, 522, 522,
  1970. 522, 522, 522, 522, 522, 522, 522, 522,
  1971. 522, 522, 523, 522, 522, 524, 525, 525,
  1972. 525, 526, 1, 434, 434, 434, 434, 434,
  1973. 434, 434, 434, 434, 434, 434, 434, 434,
  1974. 434, 434, 434, 434, 434, 434, 434, 434,
  1975. 434, 434, 434, 434, 434, 434, 434, 434,
  1976. 434, 434, 434, 434, 434, 434, 434, 434,
  1977. 434, 434, 434, 434, 434, 434, 434, 434,
  1978. 434, 434, 434, 434, 434, 434, 434, 434,
  1979. 434, 434, 434, 434, 434, 434, 434, 434,
  1980. 434, 434, 434, 1, 520, 520, 520, 520,
  1981. 520, 520, 520, 520, 520, 520, 520, 520,
  1982. 520, 520, 520, 520, 520, 520, 520, 520,
  1983. 520, 520, 520, 520, 520, 520, 520, 520,
  1984. 520, 520, 520, 520, 1, 520, 520, 520,
  1985. 520, 520, 520, 520, 520, 520, 520, 520,
  1986. 520, 520, 520, 520, 520, 520, 520, 520,
  1987. 520, 520, 520, 520, 520, 520, 520, 520,
  1988. 520, 520, 520, 520, 520, 520, 520, 520,
  1989. 520, 520, 520, 520, 520, 520, 520, 520,
  1990. 520, 520, 520, 520, 520, 520, 520, 520,
  1991. 520, 520, 520, 520, 520, 520, 520, 520,
  1992. 520, 520, 520, 520, 520, 1, 520, 520,
  1993. 520, 520, 520, 520, 520, 520, 520, 520,
  1994. 520, 520, 520, 520, 520, 520, 520, 520,
  1995. 520, 520, 520, 520, 520, 520, 520, 520,
  1996. 520, 520, 520, 520, 520, 520, 1, 522,
  1997. 522, 522, 522, 522, 522, 522, 522, 522,
  1998. 522, 522, 522, 522, 522, 522, 522, 522,
  1999. 522, 522, 522, 522, 522, 522, 522, 522,
  2000. 522, 522, 522, 522, 522, 522, 522, 522,
  2001. 522, 522, 522, 522, 522, 522, 522, 522,
  2002. 522, 522, 522, 522, 522, 522, 522, 1,
  2003. 522, 522, 522, 522, 522, 522, 522, 522,
  2004. 522, 522, 522, 522, 522, 522, 522, 522,
  2005. 522, 522, 522, 522, 522, 522, 522, 522,
  2006. 522, 522, 522, 522, 522, 522, 522, 522,
  2007. 522, 522, 522, 522, 522, 522, 522, 522,
  2008. 522, 522, 522, 522, 522, 522, 522, 522,
  2009. 522, 522, 522, 522, 522, 522, 522, 522,
  2010. 522, 522, 522, 522, 522, 522, 522, 522,
  2011. 1, 522, 522, 522, 522, 522, 522, 522,
  2012. 522, 522, 522, 522, 522, 522, 522, 522,
  2013. 522, 1, 394, 394, 394, 394, 394, 394,
  2014. 394, 394, 394, 394, 394, 394, 394, 394,
  2015. 394, 394, 394, 394, 394, 394, 394, 394,
  2016. 394, 394, 394, 394, 394, 394, 394, 394,
  2017. 394, 394, 394, 394, 394, 394, 394, 394,
  2018. 394, 394, 394, 394, 394, 394, 394, 394,
  2019. 394, 394, 394, 394, 394, 394, 394, 394,
  2020. 394, 394, 394, 394, 394, 394, 394, 394,
  2021. 394, 394, 1, 397, 397, 397, 397, 397,
  2022. 397, 397, 397, 397, 397, 397, 397, 397,
  2023. 397, 397, 397, 397, 397, 397, 397, 397,
  2024. 397, 397, 397, 397, 397, 397, 397, 397,
  2025. 397, 397, 397, 1, 397, 397, 397, 397,
  2026. 397, 397, 397, 397, 397, 397, 397, 397,
  2027. 397, 397, 397, 397, 397, 397, 397, 397,
  2028. 397, 397, 397, 397, 397, 397, 397, 397,
  2029. 397, 397, 397, 397, 397, 397, 397, 397,
  2030. 397, 397, 397, 397, 397, 397, 397, 397,
  2031. 397, 397, 397, 397, 397, 397, 397, 397,
  2032. 397, 397, 397, 397, 397, 397, 397, 397,
  2033. 397, 397, 397, 397, 1, 397, 397, 397,
  2034. 397, 397, 397, 397, 397, 397, 397, 397,
  2035. 397, 397, 397, 397, 397, 397, 397, 397,
  2036. 397, 397, 397, 397, 397, 397, 397, 397,
  2037. 397, 397, 397, 397, 397, 1, 399, 399,
  2038. 399, 399, 399, 399, 399, 399, 399, 399,
  2039. 399, 399, 399, 399, 399, 399, 399, 399,
  2040. 399, 399, 399, 399, 399, 399, 399, 399,
  2041. 399, 399, 399, 399, 399, 399, 399, 399,
  2042. 399, 399, 399, 399, 399, 399, 399, 399,
  2043. 399, 399, 399, 399, 399, 399, 1, 399,
  2044. 399, 399, 399, 399, 399, 399, 399, 399,
  2045. 399, 399, 399, 399, 399, 399, 399, 399,
  2046. 399, 399, 399, 399, 399, 399, 399, 399,
  2047. 399, 399, 399, 399, 399, 399, 399, 399,
  2048. 399, 399, 399, 399, 399, 399, 399, 399,
  2049. 399, 399, 399, 399, 399, 399, 399, 399,
  2050. 399, 399, 399, 399, 399, 399, 399, 399,
  2051. 399, 399, 399, 399, 399, 399, 399, 1,
  2052. 399, 399, 399, 399, 399, 399, 399, 399,
  2053. 399, 399, 399, 399, 399, 399, 399, 399,
  2054. 1, 528, 528, 528, 528, 528, 528, 528,
  2055. 528, 528, 1, 528, 528, 529, 528, 528,
  2056. 528, 528, 528, 528, 528, 528, 528, 528,
  2057. 528, 528, 528, 528, 528, 528, 528, 528,
  2058. 528, 528, 530, 528, 528, 528, 528, 528,
  2059. 528, 528, 528, 528, 528, 528, 528, 528,
  2060. 528, 528, 528, 528, 528, 528, 528, 528,
  2061. 528, 528, 528, 528, 528, 528, 528, 528,
  2062. 528, 528, 528, 528, 528, 528, 528, 528,
  2063. 528, 528, 528, 528, 528, 528, 528, 528,
  2064. 528, 528, 528, 528, 528, 528, 528, 528,
  2065. 528, 528, 528, 528, 531, 528, 528, 528,
  2066. 528, 528, 528, 528, 528, 528, 528, 528,
  2067. 528, 528, 528, 528, 528, 528, 528, 528,
  2068. 528, 528, 528, 528, 528, 528, 528, 528,
  2069. 528, 528, 528, 528, 528, 528, 528, 528,
  2070. 1, 1, 1, 1, 1, 1, 1, 1,
  2071. 1, 1, 1, 1, 1, 1, 1, 1,
  2072. 1, 1, 1, 1, 1, 1, 1, 1,
  2073. 1, 1, 1, 1, 1, 1, 1, 1,
  2074. 1, 1, 1, 1, 1, 1, 1, 1,
  2075. 1, 1, 1, 1, 1, 1, 1, 1,
  2076. 1, 1, 1, 1, 1, 1, 1, 1,
  2077. 1, 1, 1, 1, 1, 1, 1, 1,
  2078. 1, 1, 532, 532, 532, 532, 532, 532,
  2079. 532, 532, 532, 532, 532, 532, 532, 532,
  2080. 532, 532, 532, 532, 532, 532, 532, 532,
  2081. 532, 532, 532, 532, 532, 532, 532, 532,
  2082. 533, 534, 534, 534, 534, 534, 534, 534,
  2083. 534, 534, 534, 534, 534, 535, 534, 534,
  2084. 536, 537, 537, 537, 538, 1, 539, 539,
  2085. 539, 539, 539, 539, 539, 539, 539, 1,
  2086. 539, 539, 540, 539, 539, 539, 539, 539,
  2087. 539, 539, 539, 539, 539, 539, 539, 539,
  2088. 539, 539, 539, 539, 539, 539, 539, 541,
  2089. 539, 539, 539, 539, 539, 539, 539, 539,
  2090. 539, 539, 539, 539, 539, 539, 539, 539,
  2091. 539, 539, 539, 539, 539, 539, 539, 539,
  2092. 539, 539, 539, 539, 539, 539, 539, 539,
  2093. 539, 539, 539, 539, 539, 539, 539, 539,
  2094. 539, 539, 539, 539, 539, 539, 539, 539,
  2095. 539, 539, 539, 539, 539, 539, 539, 539,
  2096. 539, 542, 539, 539, 539, 539, 539, 539,
  2097. 539, 539, 539, 539, 539, 539, 539, 539,
  2098. 539, 539, 539, 539, 539, 539, 539, 539,
  2099. 539, 539, 539, 539, 539, 539, 539, 539,
  2100. 539, 539, 539, 539, 539, 1, 1, 1,
  2101. 1, 1, 1, 1, 1, 1, 1, 1,
  2102. 1, 1, 1, 1, 1, 1, 1, 1,
  2103. 1, 1, 1, 1, 1, 1, 1, 1,
  2104. 1, 1, 1, 1, 1, 1, 1, 1,
  2105. 1, 1, 1, 1, 1, 1, 1, 1,
  2106. 1, 1, 1, 1, 1, 1, 1, 1,
  2107. 1, 1, 1, 1, 1, 1, 1, 1,
  2108. 1, 1, 1, 1, 1, 1, 1, 543,
  2109. 543, 543, 543, 543, 543, 543, 543, 543,
  2110. 543, 543, 543, 543, 543, 543, 543, 543,
  2111. 543, 543, 543, 543, 543, 543, 543, 543,
  2112. 543, 543, 543, 543, 543, 544, 545, 545,
  2113. 545, 545, 545, 545, 545, 545, 545, 545,
  2114. 545, 545, 546, 545, 545, 547, 548, 548,
  2115. 548, 549, 1, 550, 1, 539, 1, 1,
  2116. 1, 1, 1, 1, 1, 1, 1, 1,
  2117. 1, 1, 1, 1, 1, 1, 1, 1,
  2118. 1, 1, 1, 1, 539, 1, 539, 539,
  2119. 539, 539, 539, 539, 539, 539, 539, 539,
  2120. 539, 539, 539, 539, 539, 539, 539, 539,
  2121. 539, 539, 539, 539, 539, 539, 539, 539,
  2122. 539, 539, 539, 539, 539, 539, 539, 539,
  2123. 539, 539, 539, 539, 539, 539, 539, 539,
  2124. 539, 539, 539, 539, 539, 539, 539, 539,
  2125. 539, 539, 539, 539, 539, 539, 539, 539,
  2126. 539, 539, 539, 539, 539, 539, 539, 539,
  2127. 539, 539, 539, 539, 539, 539, 539, 539,
  2128. 539, 539, 539, 539, 539, 539, 539, 539,
  2129. 539, 539, 539, 539, 539, 539, 539, 539,
  2130. 539, 539, 539, 539, 539, 539, 539, 539,
  2131. 539, 539, 539, 539, 539, 539, 539, 539,
  2132. 539, 539, 539, 539, 539, 539, 539, 539,
  2133. 539, 539, 539, 539, 539, 539, 539, 539,
  2134. 539, 539, 539, 539, 539, 539, 1, 1,
  2135. 1, 1, 1, 1, 1, 1, 1, 1,
  2136. 1, 1, 1, 1, 1, 1, 1, 1,
  2137. 1, 1, 1, 1, 1, 1, 1, 1,
  2138. 1, 1, 1, 1, 1, 1, 1, 1,
  2139. 1, 1, 1, 1, 1, 1, 1, 1,
  2140. 1, 1, 1, 1, 1, 1, 1, 1,
  2141. 1, 1, 1, 1, 1, 1, 1, 1,
  2142. 1, 1, 1, 1, 1, 1, 1, 1,
  2143. 543, 543, 543, 543, 543, 543, 543, 543,
  2144. 543, 543, 543, 543, 543, 543, 543, 543,
  2145. 543, 543, 543, 543, 543, 543, 543, 543,
  2146. 543, 543, 543, 543, 543, 543, 544, 545,
  2147. 545, 545, 545, 545, 545, 545, 545, 545,
  2148. 545, 545, 545, 546, 545, 545, 547, 548,
  2149. 548, 548, 549, 1, 539, 539, 539, 539,
  2150. 539, 539, 539, 539, 539, 539, 539, 539,
  2151. 539, 539, 539, 539, 539, 539, 539, 539,
  2152. 539, 539, 539, 539, 539, 539, 539, 539,
  2153. 539, 539, 539, 539, 539, 539, 539, 539,
  2154. 539, 539, 539, 539, 539, 539, 539, 539,
  2155. 539, 539, 539, 539, 539, 539, 539, 539,
  2156. 539, 539, 539, 539, 539, 539, 539, 539,
  2157. 539, 539, 539, 539, 1, 543, 543, 543,
  2158. 543, 543, 543, 543, 543, 543, 543, 543,
  2159. 543, 543, 543, 543, 543, 543, 543, 543,
  2160. 543, 543, 543, 543, 543, 543, 543, 543,
  2161. 543, 543, 543, 543, 543, 1, 543, 543,
  2162. 543, 543, 543, 543, 543, 543, 543, 543,
  2163. 543, 543, 543, 543, 543, 543, 543, 543,
  2164. 543, 543, 543, 543, 543, 543, 543, 543,
  2165. 543, 543, 543, 543, 543, 543, 543, 543,
  2166. 543, 543, 543, 543, 543, 543, 543, 543,
  2167. 543, 543, 543, 543, 543, 543, 543, 543,
  2168. 543, 543, 543, 543, 543, 543, 543, 543,
  2169. 543, 543, 543, 543, 543, 543, 1, 543,
  2170. 543, 543, 543, 543, 543, 543, 543, 543,
  2171. 543, 543, 543, 543, 543, 543, 543, 543,
  2172. 543, 543, 543, 543, 543, 543, 543, 543,
  2173. 543, 543, 543, 543, 543, 543, 543, 1,
  2174. 545, 545, 545, 545, 545, 545, 545, 545,
  2175. 545, 545, 545, 545, 545, 545, 545, 545,
  2176. 545, 545, 545, 545, 545, 545, 545, 545,
  2177. 545, 545, 545, 545, 545, 545, 545, 545,
  2178. 545, 545, 545, 545, 545, 545, 545, 545,
  2179. 545, 545, 545, 545, 545, 545, 545, 545,
  2180. 1, 545, 545, 545, 545, 545, 545, 545,
  2181. 545, 545, 545, 545, 545, 545, 545, 545,
  2182. 545, 545, 545, 545, 545, 545, 545, 545,
  2183. 545, 545, 545, 545, 545, 545, 545, 545,
  2184. 545, 545, 545, 545, 545, 545, 545, 545,
  2185. 545, 545, 545, 545, 545, 545, 545, 545,
  2186. 545, 545, 545, 545, 545, 545, 545, 545,
  2187. 545, 545, 545, 545, 545, 545, 545, 545,
  2188. 545, 1, 545, 545, 545, 545, 545, 545,
  2189. 545, 545, 545, 545, 545, 545, 545, 545,
  2190. 545, 545, 1, 390, 1, 1, 1, 551,
  2191. 1, 1, 1, 1, 1, 1, 1, 1,
  2192. 1, 1, 1, 1, 1, 1, 1, 1,
  2193. 1, 1, 390, 552, 553, 552, 552, 552,
  2194. 552, 552, 554, 1, 552, 552, 1, 552,
  2195. 1, 552, 552, 552, 552, 552, 552, 552,
  2196. 552, 552, 552, 552, 1, 1, 1, 552,
  2197. 1, 552, 1, 552, 552, 552, 552, 552,
  2198. 552, 552, 552, 552, 552, 552, 552, 552,
  2199. 552, 552, 552, 552, 552, 552, 552, 552,
  2200. 552, 552, 552, 552, 552, 1, 1, 1,
  2201. 552, 552, 552, 552, 552, 552, 552, 552,
  2202. 552, 552, 552, 552, 552, 552, 552, 552,
  2203. 552, 552, 552, 552, 552, 552, 552, 552,
  2204. 552, 552, 552, 552, 552, 552, 552, 552,
  2205. 552, 1, 1, 1, 1, 1, 1, 1,
  2206. 1, 1, 1, 1, 1, 1, 1, 1,
  2207. 1, 1, 1, 1, 1, 1, 1, 1,
  2208. 1, 1, 1, 1, 1, 1, 1, 1,
  2209. 1, 1, 1, 1, 1, 1, 1, 1,
  2210. 1, 1, 1, 1, 1, 1, 1, 1,
  2211. 1, 1, 1, 1, 1, 1, 1, 1,
  2212. 1, 1, 1, 1, 1, 1, 1, 1,
  2213. 1, 1, 1, 1, 555, 555, 555, 555,
  2214. 555, 555, 555, 555, 555, 555, 555, 555,
  2215. 555, 555, 555, 555, 555, 555, 555, 555,
  2216. 555, 555, 555, 555, 555, 555, 555, 555,
  2217. 555, 555, 556, 557, 557, 557, 557, 557,
  2218. 557, 557, 557, 557, 557, 557, 557, 558,
  2219. 557, 557, 559, 560, 560, 560, 561, 1,
  2220. 562, 562, 562, 562, 562, 562, 562, 562,
  2221. 369, 1, 562, 562, 563, 562, 562, 562,
  2222. 562, 562, 562, 562, 562, 562, 562, 562,
  2223. 562, 562, 562, 562, 562, 562, 562, 369,
  2224. 562, 1, 562, 562, 562, 562, 562, 562,
  2225. 562, 562, 562, 562, 562, 562, 562, 562,
  2226. 562, 562, 562, 562, 562, 562, 562, 562,
  2227. 562, 562, 562, 562, 562, 562, 562, 562,
  2228. 562, 562, 562, 562, 562, 562, 562, 562,
  2229. 562, 562, 562, 562, 562, 562, 562, 562,
  2230. 562, 562, 562, 562, 562, 562, 562, 562,
  2231. 562, 562, 562, 564, 562, 562, 562, 562,
  2232. 562, 562, 562, 562, 562, 562, 562, 562,
  2233. 562, 562, 562, 562, 562, 562, 562, 562,
  2234. 562, 562, 562, 562, 562, 562, 562, 562,
  2235. 562, 562, 562, 562, 562, 562, 562, 1,
  2236. 1, 1, 1, 1, 1, 1, 1, 1,
  2237. 1, 1, 1, 1, 1, 1, 1, 1,
  2238. 1, 1, 1, 1, 1, 1, 1, 1,
  2239. 1, 1, 1, 1, 1, 1, 1, 1,
  2240. 1, 1, 1, 1, 1, 1, 1, 1,
  2241. 1, 1, 1, 1, 1, 1, 1, 1,
  2242. 1, 1, 1, 1, 1, 1, 1, 1,
  2243. 1, 1, 1, 1, 1, 1, 1, 1,
  2244. 1, 565, 565, 565, 565, 565, 565, 565,
  2245. 565, 565, 565, 565, 565, 565, 565, 565,
  2246. 565, 565, 565, 565, 565, 565, 565, 565,
  2247. 565, 565, 565, 565, 565, 565, 565, 566,
  2248. 567, 567, 567, 567, 567, 567, 567, 567,
  2249. 567, 567, 567, 567, 568, 567, 567, 569,
  2250. 570, 570, 570, 571, 1, 562, 562, 562,
  2251. 562, 562, 562, 562, 562, 562, 1, 562,
  2252. 562, 572, 562, 562, 562, 562, 562, 562,
  2253. 562, 562, 562, 562, 562, 562, 562, 562,
  2254. 562, 562, 562, 562, 562, 562, 573, 562,
  2255. 562, 562, 562, 562, 562, 562, 562, 562,
  2256. 562, 562, 562, 562, 562, 562, 562, 562,
  2257. 562, 562, 562, 562, 562, 562, 562, 562,
  2258. 562, 562, 562, 562, 562, 562, 562, 562,
  2259. 562, 562, 562, 562, 562, 562, 562, 562,
  2260. 562, 562, 562, 562, 562, 562, 562, 562,
  2261. 562, 562, 562, 562, 562, 562, 562, 562,
  2262. 564, 562, 562, 562, 562, 562, 562, 562,
  2263. 562, 562, 562, 562, 562, 562, 562, 562,
  2264. 562, 562, 562, 562, 562, 562, 562, 562,
  2265. 562, 562, 562, 562, 562, 562, 562, 562,
  2266. 562, 562, 562, 562, 1, 1, 1, 1,
  2267. 1, 1, 1, 1, 1, 1, 1, 1,
  2268. 1, 1, 1, 1, 1, 1, 1, 1,
  2269. 1, 1, 1, 1, 1, 1, 1, 1,
  2270. 1, 1, 1, 1, 1, 1, 1, 1,
  2271. 1, 1, 1, 1, 1, 1, 1, 1,
  2272. 1, 1, 1, 1, 1, 1, 1, 1,
  2273. 1, 1, 1, 1, 1, 1, 1, 1,
  2274. 1, 1, 1, 1, 1, 1, 565, 565,
  2275. 565, 565, 565, 565, 565, 565, 565, 565,
  2276. 565, 565, 565, 565, 565, 565, 565, 565,
  2277. 565, 565, 565, 565, 565, 565, 565, 565,
  2278. 565, 565, 565, 565, 566, 567, 567, 567,
  2279. 567, 567, 567, 567, 567, 567, 567, 567,
  2280. 567, 568, 567, 567, 569, 570, 570, 570,
  2281. 571, 1, 574, 1, 562, 1, 1, 1,
  2282. 1, 1, 1, 1, 1, 1, 1, 1,
  2283. 1, 1, 1, 1, 1, 1, 1, 1,
  2284. 1, 1, 1, 562, 1, 575, 1, 1,
  2285. 1, 576, 1, 1, 1, 1, 1, 1,
  2286. 1, 1, 1, 1, 1, 1, 1, 1,
  2287. 1, 1, 1, 1, 575, 573, 369, 573,
  2288. 573, 573, 573, 573, 577, 1, 573, 573,
  2289. 1, 573, 573, 573, 573, 573, 573, 573,
  2290. 573, 573, 573, 573, 573, 573, 1, 1,
  2291. 1, 573, 372, 573, 373, 573, 573, 573,
  2292. 573, 573, 573, 573, 573, 573, 573, 573,
  2293. 573, 573, 573, 573, 573, 573, 573, 573,
  2294. 573, 573, 573, 573, 573, 573, 573, 1,
  2295. 1, 1, 573, 573, 573, 573, 573, 573,
  2296. 573, 573, 573, 573, 573, 573, 573, 573,
  2297. 573, 573, 573, 573, 573, 573, 573, 573,
  2298. 573, 573, 573, 573, 573, 573, 573, 573,
  2299. 573, 573, 573, 1, 1, 1, 1, 1,
  2300. 1, 1, 1, 1, 1, 1, 1, 1,
  2301. 1, 1, 1, 1, 1, 1, 1, 1,
  2302. 1, 1, 1, 1, 1, 1, 1, 1,
  2303. 1, 1, 1, 1, 1, 1, 1, 1,
  2304. 1, 1, 1, 1, 1, 1, 1, 1,
  2305. 1, 1, 1, 1, 1, 1, 1, 1,
  2306. 1, 1, 1, 1, 1, 1, 1, 1,
  2307. 1, 1, 1, 1, 1, 1, 578, 578,
  2308. 578, 578, 578, 578, 578, 578, 578, 578,
  2309. 578, 578, 578, 578, 578, 578, 578, 578,
  2310. 578, 578, 578, 578, 578, 578, 578, 578,
  2311. 578, 578, 578, 578, 579, 580, 580, 580,
  2312. 580, 580, 580, 580, 580, 580, 580, 580,
  2313. 580, 581, 580, 580, 582, 583, 583, 583,
  2314. 584, 1, 585, 1, 1, 1, 586, 1,
  2315. 1, 1, 1, 1, 1, 1, 1, 1,
  2316. 1, 1, 1, 1, 1, 1, 1, 1,
  2317. 1, 585, 1, 1, 1, 1, 1, 1,
  2318. 1, 587, 1, 1, 1, 1, 1, 1,
  2319. 1, 1, 1, 1, 1, 1, 1, 1,
  2320. 1, 1, 1, 1, 1, 1, 1, 34,
  2321. 1, 385, 1, 588, 1, 585, 1, 1,
  2322. 1, 1, 1, 1, 1, 1, 1, 1,
  2323. 1, 1, 1, 1, 1, 1, 1, 1,
  2324. 1, 1, 1, 1, 585, 1, 589, 1,
  2325. 1, 1, 590, 1, 1, 1, 1, 1,
  2326. 1, 1, 1, 1, 1, 1, 1, 1,
  2327. 1, 1, 1, 1, 1, 589, 1, 1,
  2328. 1, 1, 1, 1, 1, 591, 1, 1,
  2329. 1, 1, 1, 1, 1, 1, 1, 1,
  2330. 1, 1, 1, 1, 1, 1, 1, 1,
  2331. 1, 1, 1, 391, 1, 392, 1, 573,
  2332. 573, 573, 573, 573, 573, 573, 573, 573,
  2333. 573, 573, 573, 573, 573, 573, 573, 573,
  2334. 573, 573, 573, 573, 573, 573, 573, 573,
  2335. 573, 573, 573, 573, 573, 573, 573, 573,
  2336. 573, 573, 573, 573, 573, 573, 573, 573,
  2337. 573, 573, 573, 573, 573, 573, 573, 573,
  2338. 573, 573, 573, 573, 573, 573, 573, 573,
  2339. 573, 573, 573, 573, 573, 573, 573, 1,
  2340. 578, 578, 578, 578, 578, 578, 578, 578,
  2341. 578, 578, 578, 578, 578, 578, 578, 578,
  2342. 578, 578, 578, 578, 578, 578, 578, 578,
  2343. 578, 578, 578, 578, 578, 578, 578, 578,
  2344. 1, 578, 578, 578, 578, 578, 578, 578,
  2345. 578, 578, 578, 578, 578, 578, 578, 578,
  2346. 578, 578, 578, 578, 578, 578, 578, 578,
  2347. 578, 578, 578, 578, 578, 578, 578, 578,
  2348. 578, 578, 578, 578, 578, 578, 578, 578,
  2349. 578, 578, 578, 578, 578, 578, 578, 578,
  2350. 578, 578, 578, 578, 578, 578, 578, 578,
  2351. 578, 578, 578, 578, 578, 578, 578, 578,
  2352. 578, 1, 578, 578, 578, 578, 578, 578,
  2353. 578, 578, 578, 578, 578, 578, 578, 578,
  2354. 578, 578, 578, 578, 578, 578, 578, 578,
  2355. 578, 578, 578, 578, 578, 578, 578, 578,
  2356. 578, 578, 1, 580, 580, 580, 580, 580,
  2357. 580, 580, 580, 580, 580, 580, 580, 580,
  2358. 580, 580, 580, 580, 580, 580, 580, 580,
  2359. 580, 580, 580, 580, 580, 580, 580, 580,
  2360. 580, 580, 580, 580, 580, 580, 580, 580,
  2361. 580, 580, 580, 580, 580, 580, 580, 580,
  2362. 580, 580, 580, 1, 580, 580, 580, 580,
  2363. 580, 580, 580, 580, 580, 580, 580, 580,
  2364. 580, 580, 580, 580, 580, 580, 580, 580,
  2365. 580, 580, 580, 580, 580, 580, 580, 580,
  2366. 580, 580, 580, 580, 580, 580, 580, 580,
  2367. 580, 580, 580, 580, 580, 580, 580, 580,
  2368. 580, 580, 580, 580, 580, 580, 580, 580,
  2369. 580, 580, 580, 580, 580, 580, 580, 580,
  2370. 580, 580, 580, 580, 1, 580, 580, 580,
  2371. 580, 580, 580, 580, 580, 580, 580, 580,
  2372. 580, 580, 580, 580, 580, 1, 562, 562,
  2373. 562, 562, 562, 562, 562, 562, 562, 562,
  2374. 562, 562, 562, 562, 562, 562, 562, 562,
  2375. 562, 562, 562, 562, 562, 562, 562, 562,
  2376. 562, 562, 562, 562, 562, 562, 562, 562,
  2377. 562, 562, 562, 562, 562, 562, 562, 562,
  2378. 562, 562, 562, 562, 562, 562, 562, 562,
  2379. 562, 562, 562, 562, 562, 562, 562, 562,
  2380. 562, 562, 562, 562, 562, 562, 562, 562,
  2381. 562, 562, 562, 562, 562, 562, 562, 562,
  2382. 562, 562, 562, 562, 562, 562, 562, 562,
  2383. 562, 562, 562, 562, 562, 562, 562, 562,
  2384. 562, 562, 562, 562, 562, 562, 562, 562,
  2385. 562, 562, 562, 562, 562, 562, 562, 562,
  2386. 562, 562, 562, 562, 562, 562, 562, 562,
  2387. 562, 562, 562, 562, 562, 562, 562, 562,
  2388. 562, 562, 562, 562, 562, 562, 1, 1,
  2389. 1, 1, 1, 1, 1, 1, 1, 1,
  2390. 1, 1, 1, 1, 1, 1, 1, 1,
  2391. 1, 1, 1, 1, 1, 1, 1, 1,
  2392. 1, 1, 1, 1, 1, 1, 1, 1,
  2393. 1, 1, 1, 1, 1, 1, 1, 1,
  2394. 1, 1, 1, 1, 1, 1, 1, 1,
  2395. 1, 1, 1, 1, 1, 1, 1, 1,
  2396. 1, 1, 1, 1, 1, 1, 1, 1,
  2397. 565, 565, 565, 565, 565, 565, 565, 565,
  2398. 565, 565, 565, 565, 565, 565, 565, 565,
  2399. 565, 565, 565, 565, 565, 565, 565, 565,
  2400. 565, 565, 565, 565, 565, 565, 566, 567,
  2401. 567, 567, 567, 567, 567, 567, 567, 567,
  2402. 567, 567, 567, 568, 567, 567, 569, 570,
  2403. 570, 570, 571, 1, 562, 562, 562, 562,
  2404. 562, 562, 562, 562, 562, 562, 562, 562,
  2405. 562, 562, 562, 562, 562, 562, 562, 562,
  2406. 562, 562, 562, 562, 562, 562, 562, 562,
  2407. 562, 562, 562, 562, 562, 562, 562, 562,
  2408. 562, 562, 562, 562, 562, 562, 562, 562,
  2409. 562, 562, 562, 562, 562, 562, 562, 562,
  2410. 562, 562, 562, 562, 562, 562, 562, 562,
  2411. 562, 562, 562, 562, 1, 565, 565, 565,
  2412. 565, 565, 565, 565, 565, 565, 565, 565,
  2413. 565, 565, 565, 565, 565, 565, 565, 565,
  2414. 565, 565, 565, 565, 565, 565, 565, 565,
  2415. 565, 565, 565, 565, 565, 1, 565, 565,
  2416. 565, 565, 565, 565, 565, 565, 565, 565,
  2417. 565, 565, 565, 565, 565, 565, 565, 565,
  2418. 565, 565, 565, 565, 565, 565, 565, 565,
  2419. 565, 565, 565, 565, 565, 565, 565, 565,
  2420. 565, 565, 565, 565, 565, 565, 565, 565,
  2421. 565, 565, 565, 565, 565, 565, 565, 565,
  2422. 565, 565, 565, 565, 565, 565, 565, 565,
  2423. 565, 565, 565, 565, 565, 565, 1, 565,
  2424. 565, 565, 565, 565, 565, 565, 565, 565,
  2425. 565, 565, 565, 565, 565, 565, 565, 565,
  2426. 565, 565, 565, 565, 565, 565, 565, 565,
  2427. 565, 565, 565, 565, 565, 565, 565, 1,
  2428. 567, 567, 567, 567, 567, 567, 567, 567,
  2429. 567, 567, 567, 567, 567, 567, 567, 567,
  2430. 567, 567, 567, 567, 567, 567, 567, 567,
  2431. 567, 567, 567, 567, 567, 567, 567, 567,
  2432. 567, 567, 567, 567, 567, 567, 567, 567,
  2433. 567, 567, 567, 567, 567, 567, 567, 567,
  2434. 1, 567, 567, 567, 567, 567, 567, 567,
  2435. 567, 567, 567, 567, 567, 567, 567, 567,
  2436. 567, 567, 567, 567, 567, 567, 567, 567,
  2437. 567, 567, 567, 567, 567, 567, 567, 567,
  2438. 567, 567, 567, 567, 567, 567, 567, 567,
  2439. 567, 567, 567, 567, 567, 567, 567, 567,
  2440. 567, 567, 567, 567, 567, 567, 567, 567,
  2441. 567, 567, 567, 567, 567, 567, 567, 567,
  2442. 567, 1, 567, 567, 567, 567, 567, 567,
  2443. 567, 567, 567, 567, 567, 567, 567, 567,
  2444. 567, 567, 1, 592, 1, 369, 1, 1,
  2445. 1, 1, 1, 1, 1, 1, 1, 1,
  2446. 1, 1, 1, 1, 1, 1, 1, 1,
  2447. 1, 1, 1, 1, 369, 1, 593, 1,
  2448. 1, 1, 594, 1, 1, 1, 1, 1,
  2449. 1, 1, 1, 1, 1, 1, 1, 1,
  2450. 1, 1, 1, 1, 1, 593, 368, 595,
  2451. 368, 368, 368, 368, 368, 596, 1, 368,
  2452. 368, 1, 368, 573, 368, 368, 368, 368,
  2453. 368, 368, 368, 368, 368, 368, 368, 1,
  2454. 1, 1, 368, 372, 368, 373, 368, 368,
  2455. 368, 368, 368, 368, 368, 368, 368, 368,
  2456. 368, 368, 368, 368, 368, 368, 368, 368,
  2457. 368, 368, 368, 368, 368, 368, 368, 368,
  2458. 1, 1, 1, 368, 368, 368, 368, 368,
  2459. 368, 368, 368, 368, 368, 368, 368, 368,
  2460. 368, 368, 368, 368, 368, 368, 368, 368,
  2461. 368, 368, 368, 368, 368, 368, 368, 368,
  2462. 368, 368, 368, 368, 1, 1, 1, 1,
  2463. 1, 1, 1, 1, 1, 1, 1, 1,
  2464. 1, 1, 1, 1, 1, 1, 1, 1,
  2465. 1, 1, 1, 1, 1, 1, 1, 1,
  2466. 1, 1, 1, 1, 1, 1, 1, 1,
  2467. 1, 1, 1, 1, 1, 1, 1, 1,
  2468. 1, 1, 1, 1, 1, 1, 1, 1,
  2469. 1, 1, 1, 1, 1, 1, 1, 1,
  2470. 1, 1, 1, 1, 1, 1, 1, 374,
  2471. 374, 374, 374, 374, 374, 374, 374, 374,
  2472. 374, 374, 374, 374, 374, 374, 374, 374,
  2473. 374, 374, 374, 374, 374, 374, 374, 374,
  2474. 374, 374, 374, 374, 374, 375, 376, 376,
  2475. 376, 376, 376, 376, 376, 376, 376, 376,
  2476. 376, 376, 377, 376, 376, 378, 379, 379,
  2477. 379, 380, 1, 597, 1, 1, 1, 598,
  2478. 1, 1, 1, 1, 1, 1, 1, 1,
  2479. 1, 1, 1, 1, 1, 1, 1, 1,
  2480. 1, 1, 597, 394, 395, 394, 394, 394,
  2481. 394, 394, 599, 1, 394, 394, 1, 394,
  2482. 1, 394, 394, 394, 394, 394, 394, 394,
  2483. 394, 394, 394, 394, 1, 1, 1, 394,
  2484. 34, 394, 385, 394, 394, 394, 394, 394,
  2485. 394, 394, 394, 394, 394, 394, 394, 394,
  2486. 394, 394, 394, 394, 394, 394, 394, 394,
  2487. 394, 394, 394, 394, 394, 1, 1, 1,
  2488. 394, 394, 394, 394, 394, 394, 394, 394,
  2489. 394, 394, 394, 394, 394, 394, 394, 394,
  2490. 394, 394, 394, 394, 394, 394, 394, 394,
  2491. 394, 394, 394, 394, 394, 394, 394, 394,
  2492. 394, 1, 1, 1, 1, 1, 1, 1,
  2493. 1, 1, 1, 1, 1, 1, 1, 1,
  2494. 1, 1, 1, 1, 1, 1, 1, 1,
  2495. 1, 1, 1, 1, 1, 1, 1, 1,
  2496. 1, 1, 1, 1, 1, 1, 1, 1,
  2497. 1, 1, 1, 1, 1, 1, 1, 1,
  2498. 1, 1, 1, 1, 1, 1, 1, 1,
  2499. 1, 1, 1, 1, 1, 1, 1, 1,
  2500. 1, 1, 1, 1, 397, 397, 397, 397,
  2501. 397, 397, 397, 397, 397, 397, 397, 397,
  2502. 397, 397, 397, 397, 397, 397, 397, 397,
  2503. 397, 397, 397, 397, 397, 397, 397, 397,
  2504. 397, 397, 398, 399, 399, 399, 399, 399,
  2505. 399, 399, 399, 399, 399, 399, 399, 400,
  2506. 399, 399, 401, 402, 402, 402, 403, 1,
  2507. 600, 1, 597, 1, 1, 1, 1, 1,
  2508. 1, 1, 1, 1, 1, 1, 1, 1,
  2509. 1, 1, 1, 1, 1, 1, 1, 1,
  2510. 1, 597, 1, 601, 1, 1, 1, 602,
  2511. 1, 1, 1, 1, 1, 1, 1, 1,
  2512. 1, 1, 1, 1, 1, 1, 1, 1,
  2513. 1, 1, 601, 552, 553, 552, 552, 552,
  2514. 552, 552, 603, 1, 552, 552, 1, 552,
  2515. 1, 552, 552, 552, 552, 552, 552, 552,
  2516. 552, 552, 552, 552, 1, 1, 1, 552,
  2517. 391, 552, 392, 552, 552, 552, 552, 552,
  2518. 552, 552, 552, 552, 552, 552, 552, 552,
  2519. 552, 552, 552, 552, 552, 552, 552, 552,
  2520. 552, 552, 552, 552, 552, 1, 1, 1,
  2521. 552, 552, 552, 552, 552, 552, 552, 552,
  2522. 552, 552, 552, 552, 552, 552, 552, 552,
  2523. 552, 552, 552, 552, 552, 552, 552, 552,
  2524. 552, 552, 552, 552, 552, 552, 552, 552,
  2525. 552, 1, 1, 1, 1, 1, 1, 1,
  2526. 1, 1, 1, 1, 1, 1, 1, 1,
  2527. 1, 1, 1, 1, 1, 1, 1, 1,
  2528. 1, 1, 1, 1, 1, 1, 1, 1,
  2529. 1, 1, 1, 1, 1, 1, 1, 1,
  2530. 1, 1, 1, 1, 1, 1, 1, 1,
  2531. 1, 1, 1, 1, 1, 1, 1, 1,
  2532. 1, 1, 1, 1, 1, 1, 1, 1,
  2533. 1, 1, 1, 1, 555, 555, 555, 555,
  2534. 555, 555, 555, 555, 555, 555, 555, 555,
  2535. 555, 555, 555, 555, 555, 555, 555, 555,
  2536. 555, 555, 555, 555, 555, 555, 555, 555,
  2537. 555, 555, 556, 557, 557, 557, 557, 557,
  2538. 557, 557, 557, 557, 557, 557, 557, 558,
  2539. 557, 557, 559, 560, 560, 560, 561, 1,
  2540. 604, 604, 604, 604, 604, 604, 604, 604,
  2541. 605, 1, 604, 604, 606, 604, 604, 604,
  2542. 604, 604, 604, 604, 604, 604, 604, 604,
  2543. 604, 604, 604, 604, 604, 604, 604, 605,
  2544. 604, 530, 604, 604, 604, 604, 604, 604,
  2545. 604, 604, 604, 604, 604, 604, 604, 604,
  2546. 604, 604, 604, 604, 604, 604, 604, 604,
  2547. 604, 604, 604, 604, 604, 604, 604, 604,
  2548. 604, 604, 604, 604, 604, 604, 604, 604,
  2549. 604, 604, 604, 604, 604, 604, 604, 604,
  2550. 604, 604, 604, 604, 604, 604, 604, 604,
  2551. 604, 604, 604, 607, 604, 604, 604, 604,
  2552. 604, 604, 604, 604, 604, 604, 604, 604,
  2553. 604, 604, 604, 604, 604, 604, 604, 604,
  2554. 604, 604, 604, 604, 604, 604, 604, 604,
  2555. 604, 604, 604, 604, 604, 604, 604, 1,
  2556. 1, 1, 1, 1, 1, 1, 1, 1,
  2557. 1, 1, 1, 1, 1, 1, 1, 1,
  2558. 1, 1, 1, 1, 1, 1, 1, 1,
  2559. 1, 1, 1, 1, 1, 1, 1, 1,
  2560. 1, 1, 1, 1, 1, 1, 1, 1,
  2561. 1, 1, 1, 1, 1, 1, 1, 1,
  2562. 1, 1, 1, 1, 1, 1, 1, 1,
  2563. 1, 1, 1, 1, 1, 1, 1, 1,
  2564. 1, 608, 608, 608, 608, 608, 608, 608,
  2565. 608, 608, 608, 608, 608, 608, 608, 608,
  2566. 608, 608, 608, 608, 608, 608, 608, 608,
  2567. 608, 608, 608, 608, 608, 608, 608, 609,
  2568. 610, 610, 610, 610, 610, 610, 610, 610,
  2569. 610, 610, 610, 610, 611, 610, 610, 612,
  2570. 613, 613, 613, 614, 1, 615, 615, 615,
  2571. 615, 615, 615, 615, 615, 615, 1, 615,
  2572. 615, 616, 615, 615, 615, 615, 615, 615,
  2573. 615, 615, 615, 615, 615, 615, 615, 615,
  2574. 615, 615, 615, 615, 615, 615, 617, 615,
  2575. 615, 615, 615, 615, 615, 615, 615, 615,
  2576. 615, 615, 615, 615, 615, 615, 615, 615,
  2577. 615, 615, 615, 615, 615, 615, 615, 615,
  2578. 615, 615, 615, 615, 615, 615, 615, 615,
  2579. 615, 615, 615, 615, 615, 615, 615, 615,
  2580. 615, 615, 615, 615, 615, 615, 615, 615,
  2581. 615, 615, 615, 615, 615, 615, 615, 615,
  2582. 618, 615, 615, 615, 615, 615, 615, 615,
  2583. 615, 615, 615, 615, 615, 615, 615, 615,
  2584. 615, 615, 615, 615, 615, 615, 615, 615,
  2585. 615, 615, 615, 615, 615, 615, 615, 615,
  2586. 615, 615, 615, 615, 1, 1, 1, 1,
  2587. 1, 1, 1, 1, 1, 1, 1, 1,
  2588. 1, 1, 1, 1, 1, 1, 1, 1,
  2589. 1, 1, 1, 1, 1, 1, 1, 1,
  2590. 1, 1, 1, 1, 1, 1, 1, 1,
  2591. 1, 1, 1, 1, 1, 1, 1, 1,
  2592. 1, 1, 1, 1, 1, 1, 1, 1,
  2593. 1, 1, 1, 1, 1, 1, 1, 1,
  2594. 1, 1, 1, 1, 1, 1, 619, 619,
  2595. 619, 619, 619, 619, 619, 619, 619, 619,
  2596. 619, 619, 619, 619, 619, 619, 619, 619,
  2597. 619, 619, 619, 619, 619, 619, 619, 619,
  2598. 619, 619, 619, 619, 620, 621, 621, 621,
  2599. 621, 621, 621, 621, 621, 621, 621, 621,
  2600. 621, 622, 621, 621, 623, 624, 624, 624,
  2601. 625, 1, 626, 1, 615, 1, 1, 1,
  2602. 1, 1, 1, 1, 1, 1, 1, 1,
  2603. 1, 1, 1, 1, 1, 1, 1, 1,
  2604. 1, 1, 1, 615, 1, 366, 1, 1,
  2605. 1, 367, 1, 1, 1, 1, 1, 1,
  2606. 1, 1, 1, 1, 1, 1, 1, 1,
  2607. 1, 1, 1, 1, 366, 573, 369, 573,
  2608. 573, 573, 573, 573, 370, 1, 573, 573,
  2609. 1, 573, 371, 573, 573, 573, 573, 573,
  2610. 573, 573, 573, 573, 573, 573, 1, 1,
  2611. 1, 573, 372, 573, 373, 573, 573, 573,
  2612. 573, 573, 573, 573, 573, 573, 573, 573,
  2613. 573, 573, 573, 573, 573, 573, 573, 573,
  2614. 573, 573, 573, 573, 573, 573, 573, 1,
  2615. 1, 1, 573, 573, 573, 573, 573, 573,
  2616. 573, 573, 573, 573, 573, 573, 573, 573,
  2617. 573, 573, 573, 573, 573, 573, 573, 573,
  2618. 573, 573, 573, 573, 573, 573, 573, 573,
  2619. 573, 573, 573, 1, 1, 1, 1, 1,
  2620. 1, 1, 1, 1, 1, 1, 1, 1,
  2621. 1, 1, 1, 1, 1, 1, 1, 1,
  2622. 1, 1, 1, 1, 1, 1, 1, 1,
  2623. 1, 1, 1, 1, 1, 1, 1, 1,
  2624. 1, 1, 1, 1, 1, 1, 1, 1,
  2625. 1, 1, 1, 1, 1, 1, 1, 1,
  2626. 1, 1, 1, 1, 1, 1, 1, 1,
  2627. 1, 1, 1, 1, 1, 1, 578, 578,
  2628. 578, 578, 578, 578, 578, 578, 578, 578,
  2629. 578, 578, 578, 578, 578, 578, 578, 578,
  2630. 578, 578, 578, 578, 578, 578, 578, 578,
  2631. 578, 578, 578, 578, 579, 580, 580, 580,
  2632. 580, 580, 580, 580, 580, 580, 580, 580,
  2633. 580, 581, 580, 580, 582, 583, 583, 583,
  2634. 584, 1, 615, 615, 615, 615, 615, 615,
  2635. 615, 615, 615, 615, 615, 615, 615, 615,
  2636. 615, 615, 615, 615, 615, 615, 615, 615,
  2637. 615, 615, 615, 615, 615, 615, 615, 615,
  2638. 615, 615, 615, 615, 615, 615, 615, 615,
  2639. 615, 615, 615, 615, 615, 615, 615, 615,
  2640. 615, 615, 615, 615, 615, 615, 615, 615,
  2641. 615, 615, 615, 615, 615, 615, 615, 615,
  2642. 615, 615, 615, 615, 615, 615, 615, 615,
  2643. 615, 615, 615, 615, 615, 615, 615, 615,
  2644. 615, 615, 615, 615, 615, 615, 615, 615,
  2645. 615, 615, 615, 615, 615, 615, 615, 615,
  2646. 615, 615, 615, 615, 615, 615, 615, 615,
  2647. 615, 615, 615, 615, 615, 615, 615, 615,
  2648. 615, 615, 615, 615, 615, 615, 615, 615,
  2649. 615, 615, 615, 615, 615, 615, 615, 615,
  2650. 615, 615, 1, 1, 1, 1, 1, 1,
  2651. 1, 1, 1, 1, 1, 1, 1, 1,
  2652. 1, 1, 1, 1, 1, 1, 1, 1,
  2653. 1, 1, 1, 1, 1, 1, 1, 1,
  2654. 1, 1, 1, 1, 1, 1, 1, 1,
  2655. 1, 1, 1, 1, 1, 1, 1, 1,
  2656. 1, 1, 1, 1, 1, 1, 1, 1,
  2657. 1, 1, 1, 1, 1, 1, 1, 1,
  2658. 1, 1, 1, 1, 619, 619, 619, 619,
  2659. 619, 619, 619, 619, 619, 619, 619, 619,
  2660. 619, 619, 619, 619, 619, 619, 619, 619,
  2661. 619, 619, 619, 619, 619, 619, 619, 619,
  2662. 619, 619, 620, 621, 621, 621, 621, 621,
  2663. 621, 621, 621, 621, 621, 621, 621, 622,
  2664. 621, 621, 623, 624, 624, 624, 625, 1,
  2665. 615, 615, 615, 615, 615, 615, 615, 615,
  2666. 615, 615, 615, 615, 615, 615, 615, 615,
  2667. 615, 615, 615, 615, 615, 615, 615, 615,
  2668. 615, 615, 615, 615, 615, 615, 615, 615,
  2669. 615, 615, 615, 615, 615, 615, 615, 615,
  2670. 615, 615, 615, 615, 615, 615, 615, 615,
  2671. 615, 615, 615, 615, 615, 615, 615, 615,
  2672. 615, 615, 615, 615, 615, 615, 615, 615,
  2673. 1, 619, 619, 619, 619, 619, 619, 619,
  2674. 619, 619, 619, 619, 619, 619, 619, 619,
  2675. 619, 619, 619, 619, 619, 619, 619, 619,
  2676. 619, 619, 619, 619, 619, 619, 619, 619,
  2677. 619, 1, 619, 619, 619, 619, 619, 619,
  2678. 619, 619, 619, 619, 619, 619, 619, 619,
  2679. 619, 619, 619, 619, 619, 619, 619, 619,
  2680. 619, 619, 619, 619, 619, 619, 619, 619,
  2681. 619, 619, 619, 619, 619, 619, 619, 619,
  2682. 619, 619, 619, 619, 619, 619, 619, 619,
  2683. 619, 619, 619, 619, 619, 619, 619, 619,
  2684. 619, 619, 619, 619, 619, 619, 619, 619,
  2685. 619, 619, 1, 619, 619, 619, 619, 619,
  2686. 619, 619, 619, 619, 619, 619, 619, 619,
  2687. 619, 619, 619, 619, 619, 619, 619, 619,
  2688. 619, 619, 619, 619, 619, 619, 619, 619,
  2689. 619, 619, 619, 1, 621, 621, 621, 621,
  2690. 621, 621, 621, 621, 621, 621, 621, 621,
  2691. 621, 621, 621, 621, 621, 621, 621, 621,
  2692. 621, 621, 621, 621, 621, 621, 621, 621,
  2693. 621, 621, 621, 621, 621, 621, 621, 621,
  2694. 621, 621, 621, 621, 621, 621, 621, 621,
  2695. 621, 621, 621, 621, 1, 621, 621, 621,
  2696. 621, 621, 621, 621, 621, 621, 621, 621,
  2697. 621, 621, 621, 621, 621, 621, 621, 621,
  2698. 621, 621, 621, 621, 621, 621, 621, 621,
  2699. 621, 621, 621, 621, 621, 621, 621, 621,
  2700. 621, 621, 621, 621, 621, 621, 621, 621,
  2701. 621, 621, 621, 621, 621, 621, 621, 621,
  2702. 621, 621, 621, 621, 621, 621, 621, 621,
  2703. 621, 621, 621, 621, 621, 1, 621, 621,
  2704. 621, 621, 621, 621, 621, 621, 621, 621,
  2705. 621, 621, 621, 621, 621, 621, 1, 615,
  2706. 615, 615, 615, 615, 615, 615, 615, 627,
  2707. 1, 615, 615, 628, 615, 615, 615, 615,
  2708. 615, 615, 615, 615, 615, 615, 615, 615,
  2709. 615, 615, 615, 615, 615, 615, 627, 615,
  2710. 541, 615, 615, 615, 615, 615, 615, 615,
  2711. 615, 615, 615, 615, 615, 615, 615, 615,
  2712. 615, 615, 615, 615, 615, 615, 615, 615,
  2713. 615, 615, 615, 615, 615, 615, 615, 615,
  2714. 615, 615, 615, 615, 615, 615, 615, 615,
  2715. 615, 615, 615, 615, 615, 615, 615, 615,
  2716. 615, 615, 615, 615, 615, 615, 615, 615,
  2717. 615, 615, 618, 615, 615, 615, 615, 615,
  2718. 615, 615, 615, 615, 615, 615, 615, 615,
  2719. 615, 615, 615, 615, 615, 615, 615, 615,
  2720. 615, 615, 615, 615, 615, 615, 615, 615,
  2721. 615, 615, 615, 615, 615, 615, 1, 1,
  2722. 1, 1, 1, 1, 1, 1, 1, 1,
  2723. 1, 1, 1, 1, 1, 1, 1, 1,
  2724. 1, 1, 1, 1, 1, 1, 1, 1,
  2725. 1, 1, 1, 1, 1, 1, 1, 1,
  2726. 1, 1, 1, 1, 1, 1, 1, 1,
  2727. 1, 1, 1, 1, 1, 1, 1, 1,
  2728. 1, 1, 1, 1, 1, 1, 1, 1,
  2729. 1, 1, 1, 1, 1, 1, 1, 1,
  2730. 619, 619, 619, 619, 619, 619, 619, 619,
  2731. 619, 619, 619, 619, 619, 619, 619, 619,
  2732. 619, 619, 619, 619, 619, 619, 619, 619,
  2733. 619, 619, 619, 619, 619, 619, 620, 621,
  2734. 621, 621, 621, 621, 621, 621, 621, 621,
  2735. 621, 621, 621, 622, 621, 621, 623, 624,
  2736. 624, 624, 625, 1, 629, 1, 627, 1,
  2737. 1, 1, 1, 1, 1, 1, 1, 1,
  2738. 1, 1, 1, 1, 1, 1, 1, 1,
  2739. 1, 1, 1, 1, 1, 627, 1, 368,
  2740. 368, 368, 368, 368, 368, 368, 368, 368,
  2741. 368, 368, 368, 368, 368, 368, 368, 368,
  2742. 368, 368, 368, 368, 368, 368, 368, 368,
  2743. 368, 368, 368, 368, 368, 368, 368, 368,
  2744. 368, 368, 368, 368, 368, 368, 368, 368,
  2745. 368, 368, 368, 368, 368, 368, 368, 368,
  2746. 368, 368, 368, 368, 368, 368, 368, 368,
  2747. 368, 368, 368, 368, 368, 368, 368, 1,
  2748. 374, 374, 374, 374, 374, 374, 374, 374,
  2749. 374, 374, 374, 374, 374, 374, 374, 374,
  2750. 374, 374, 374, 374, 374, 374, 374, 374,
  2751. 374, 374, 374, 374, 374, 374, 374, 374,
  2752. 1, 374, 374, 374, 374, 374, 374, 374,
  2753. 374, 374, 374, 374, 374, 374, 374, 374,
  2754. 374, 374, 374, 374, 374, 374, 374, 374,
  2755. 374, 374, 374, 374, 374, 374, 374, 374,
  2756. 374, 374, 374, 374, 374, 374, 374, 374,
  2757. 374, 374, 374, 374, 374, 374, 374, 374,
  2758. 374, 374, 374, 374, 374, 374, 374, 374,
  2759. 374, 374, 374, 374, 374, 374, 374, 374,
  2760. 374, 1, 374, 374, 374, 374, 374, 374,
  2761. 374, 374, 374, 374, 374, 374, 374, 374,
  2762. 374, 374, 374, 374, 374, 374, 374, 374,
  2763. 374, 374, 374, 374, 374, 374, 374, 374,
  2764. 374, 374, 1, 376, 376, 376, 376, 376,
  2765. 376, 376, 376, 376, 376, 376, 376, 376,
  2766. 376, 376, 376, 376, 376, 376, 376, 376,
  2767. 376, 376, 376, 376, 376, 376, 376, 376,
  2768. 376, 376, 376, 376, 376, 376, 376, 376,
  2769. 376, 376, 376, 376, 376, 376, 376, 376,
  2770. 376, 376, 376, 1, 376, 376, 376, 376,
  2771. 376, 376, 376, 376, 376, 376, 376, 376,
  2772. 376, 376, 376, 376, 376, 376, 376, 376,
  2773. 376, 376, 376, 376, 376, 376, 376, 376,
  2774. 376, 376, 376, 376, 376, 376, 376, 376,
  2775. 376, 376, 376, 376, 376, 376, 376, 376,
  2776. 376, 376, 376, 376, 376, 376, 376, 376,
  2777. 376, 376, 376, 376, 376, 376, 376, 376,
  2778. 376, 376, 376, 376, 1, 376, 376, 376,
  2779. 376, 376, 376, 376, 376, 376, 376, 376,
  2780. 376, 376, 376, 376, 376, 1, 630, 630,
  2781. 630, 630, 630, 630, 630, 630, 631, 1,
  2782. 630, 630, 632, 630, 630, 630, 630, 630,
  2783. 630, 630, 630, 630, 630, 630, 630, 630,
  2784. 630, 630, 630, 630, 630, 631, 630, 633,
  2785. 630, 630, 630, 630, 630, 630, 630, 630,
  2786. 630, 630, 630, 630, 630, 630, 630, 630,
  2787. 630, 630, 630, 630, 630, 630, 630, 630,
  2788. 630, 630, 630, 630, 630, 630, 630, 630,
  2789. 630, 630, 630, 630, 630, 630, 630, 630,
  2790. 630, 630, 630, 630, 630, 630, 630, 630,
  2791. 630, 630, 630, 630, 630, 630, 630, 630,
  2792. 630, 634, 630, 630, 630, 630, 630, 630,
  2793. 630, 630, 630, 630, 630, 630, 630, 630,
  2794. 630, 630, 630, 630, 630, 630, 630, 630,
  2795. 630, 630, 630, 630, 630, 630, 630, 630,
  2796. 630, 630, 630, 630, 630, 1, 1, 1,
  2797. 1, 1, 1, 1, 1, 1, 1, 1,
  2798. 1, 1, 1, 1, 1, 1, 1, 1,
  2799. 1, 1, 1, 1, 1, 1, 1, 1,
  2800. 1, 1, 1, 1, 1, 1, 1, 1,
  2801. 1, 1, 1, 1, 1, 1, 1, 1,
  2802. 1, 1, 1, 1, 1, 1, 1, 1,
  2803. 1, 1, 1, 1, 1, 1, 1, 1,
  2804. 1, 1, 1, 1, 1, 1, 1, 635,
  2805. 635, 635, 635, 635, 635, 635, 635, 635,
  2806. 635, 635, 635, 635, 635, 635, 635, 635,
  2807. 635, 635, 635, 635, 635, 635, 635, 635,
  2808. 635, 635, 635, 635, 635, 636, 637, 637,
  2809. 637, 637, 637, 637, 637, 637, 637, 637,
  2810. 637, 637, 638, 637, 637, 639, 640, 640,
  2811. 640, 641, 1, 642, 642, 642, 642, 642,
  2812. 642, 642, 642, 642, 1, 642, 642, 643,
  2813. 642, 642, 642, 642, 642, 642, 642, 642,
  2814. 642, 642, 642, 642, 642, 642, 642, 642,
  2815. 642, 642, 642, 642, 644, 642, 642, 642,
  2816. 642, 642, 642, 642, 642, 642, 642, 642,
  2817. 642, 642, 642, 642, 642, 642, 642, 642,
  2818. 642, 642, 642, 642, 642, 642, 642, 642,
  2819. 642, 642, 642, 642, 642, 642, 642, 642,
  2820. 642, 642, 642, 642, 642, 642, 642, 642,
  2821. 642, 642, 642, 642, 642, 642, 642, 642,
  2822. 642, 642, 642, 642, 642, 642, 645, 642,
  2823. 642, 642, 642, 642, 642, 642, 642, 642,
  2824. 642, 642, 642, 642, 642, 642, 642, 642,
  2825. 642, 642, 642, 642, 642, 642, 642, 642,
  2826. 642, 642, 642, 642, 642, 642, 642, 642,
  2827. 642, 642, 1, 1, 1, 1, 1, 1,
  2828. 1, 1, 1, 1, 1, 1, 1, 1,
  2829. 1, 1, 1, 1, 1, 1, 1, 1,
  2830. 1, 1, 1, 1, 1, 1, 1, 1,
  2831. 1, 1, 1, 1, 1, 1, 1, 1,
  2832. 1, 1, 1, 1, 1, 1, 1, 1,
  2833. 1, 1, 1, 1, 1, 1, 1, 1,
  2834. 1, 1, 1, 1, 1, 1, 1, 1,
  2835. 1, 1, 1, 1, 646, 646, 646, 646,
  2836. 646, 646, 646, 646, 646, 646, 646, 646,
  2837. 646, 646, 646, 646, 646, 646, 646, 646,
  2838. 646, 646, 646, 646, 646, 646, 646, 646,
  2839. 646, 646, 647, 648, 648, 648, 648, 648,
  2840. 648, 648, 648, 648, 648, 648, 648, 649,
  2841. 648, 648, 650, 651, 651, 651, 652, 1,
  2842. 653, 1, 642, 1, 1, 1, 1, 1,
  2843. 1, 1, 1, 1, 1, 1, 1, 1,
  2844. 1, 1, 1, 1, 1, 1, 1, 1,
  2845. 1, 642, 1, 654, 1, 1, 1, 655,
  2846. 1, 1, 1, 1, 1, 1, 1, 1,
  2847. 1, 1, 1, 1, 1, 1, 1, 1,
  2848. 1, 1, 654, 573, 369, 573, 573, 573,
  2849. 573, 573, 656, 1, 573, 573, 1, 573,
  2850. 371, 573, 573, 573, 573, 573, 573, 573,
  2851. 573, 573, 573, 573, 1, 1, 1, 573,
  2852. 372, 573, 657, 573, 573, 573, 573, 573,
  2853. 573, 573, 573, 573, 573, 573, 573, 573,
  2854. 573, 573, 573, 573, 573, 573, 573, 573,
  2855. 573, 573, 573, 573, 573, 1, 1, 1,
  2856. 573, 573, 573, 573, 573, 573, 573, 573,
  2857. 573, 573, 573, 573, 573, 573, 573, 573,
  2858. 573, 573, 573, 573, 573, 573, 573, 573,
  2859. 573, 573, 573, 573, 573, 573, 573, 573,
  2860. 573, 1, 1, 1, 1, 1, 1, 1,
  2861. 1, 1, 1, 1, 1, 1, 1, 1,
  2862. 1, 1, 1, 1, 1, 1, 1, 1,
  2863. 1, 1, 1, 1, 1, 1, 1, 1,
  2864. 1, 1, 1, 1, 1, 1, 1, 1,
  2865. 1, 1, 1, 1, 1, 1, 1, 1,
  2866. 1, 1, 1, 1, 1, 1, 1, 1,
  2867. 1, 1, 1, 1, 1, 1, 1, 1,
  2868. 1, 1, 1, 1, 578, 578, 578, 578,
  2869. 578, 578, 578, 578, 578, 578, 578, 578,
  2870. 578, 578, 578, 578, 578, 578, 578, 578,
  2871. 578, 578, 578, 578, 578, 578, 578, 578,
  2872. 578, 578, 579, 580, 580, 580, 580, 580,
  2873. 580, 580, 580, 580, 580, 580, 580, 581,
  2874. 580, 580, 582, 583, 583, 583, 584, 1,
  2875. 658, 1, 1, 1, 659, 1, 1, 1,
  2876. 1, 1, 1, 1, 1, 1, 1, 1,
  2877. 1, 1, 1, 1, 1, 1, 1, 658,
  2878. 1, 1, 1, 1, 1, 1, 1, 660,
  2879. 1, 1, 1, 1, 1, 384, 1, 1,
  2880. 1, 1, 1, 1, 1, 1, 1, 1,
  2881. 1, 1, 1, 1, 1, 34, 1, 661,
  2882. 1, 662, 1, 658, 1, 1, 1, 1,
  2883. 1, 1, 1, 1, 1, 1, 1, 1,
  2884. 1, 1, 1, 1, 1, 1, 1, 1,
  2885. 1, 1, 658, 1, 663, 1, 1, 1,
  2886. 664, 1, 1, 1, 1, 1, 1, 1,
  2887. 1, 1, 1, 1, 1, 1, 1, 1,
  2888. 1, 1, 1, 663, 1, 1, 1, 1,
  2889. 1, 1, 1, 665, 1, 1, 1, 1,
  2890. 1, 390, 1, 1, 1, 1, 1, 1,
  2891. 1, 1, 1, 1, 1, 1, 1, 1,
  2892. 1, 391, 1, 666, 1, 642, 642, 642,
  2893. 642, 642, 642, 642, 642, 642, 642, 642,
  2894. 642, 642, 642, 642, 642, 642, 642, 642,
  2895. 642, 642, 642, 642, 642, 642, 642, 642,
  2896. 642, 642, 642, 642, 642, 642, 642, 642,
  2897. 642, 642, 642, 642, 642, 642, 642, 642,
  2898. 642, 642, 642, 642, 642, 642, 642, 642,
  2899. 642, 642, 642, 642, 642, 642, 642, 642,
  2900. 642, 642, 642, 642, 642, 642, 642, 642,
  2901. 642, 642, 642, 642, 642, 642, 642, 642,
  2902. 642, 642, 642, 642, 642, 642, 642, 642,
  2903. 642, 642, 642, 642, 642, 642, 642, 642,
  2904. 642, 642, 642, 642, 642, 642, 642, 642,
  2905. 642, 642, 642, 642, 642, 642, 642, 642,
  2906. 642, 642, 642, 642, 642, 642, 642, 642,
  2907. 642, 642, 642, 642, 642, 642, 642, 642,
  2908. 642, 642, 642, 642, 642, 1, 1, 1,
  2909. 1, 1, 1, 1, 1, 1, 1, 1,
  2910. 1, 1, 1, 1, 1, 1, 1, 1,
  2911. 1, 1, 1, 1, 1, 1, 1, 1,
  2912. 1, 1, 1, 1, 1, 1, 1, 1,
  2913. 1, 1, 1, 1, 1, 1, 1, 1,
  2914. 1, 1, 1, 1, 1, 1, 1, 1,
  2915. 1, 1, 1, 1, 1, 1, 1, 1,
  2916. 1, 1, 1, 1, 1, 1, 1, 646,
  2917. 646, 646, 646, 646, 646, 646, 646, 646,
  2918. 646, 646, 646, 646, 646, 646, 646, 646,
  2919. 646, 646, 646, 646, 646, 646, 646, 646,
  2920. 646, 646, 646, 646, 646, 647, 648, 648,
  2921. 648, 648, 648, 648, 648, 648, 648, 648,
  2922. 648, 648, 649, 648, 648, 650, 651, 651,
  2923. 651, 652, 1, 642, 642, 642, 642, 642,
  2924. 642, 642, 642, 642, 642, 642, 642, 642,
  2925. 642, 642, 642, 642, 642, 642, 642, 642,
  2926. 642, 642, 642, 642, 642, 642, 642, 642,
  2927. 642, 642, 642, 642, 642, 642, 642, 642,
  2928. 642, 642, 642, 642, 642, 642, 642, 642,
  2929. 642, 642, 642, 642, 642, 642, 642, 642,
  2930. 642, 642, 642, 642, 642, 642, 642, 642,
  2931. 642, 642, 642, 1, 646, 646, 646, 646,
  2932. 646, 646, 646, 646, 646, 646, 646, 646,
  2933. 646, 646, 646, 646, 646, 646, 646, 646,
  2934. 646, 646, 646, 646, 646, 646, 646, 646,
  2935. 646, 646, 646, 646, 1, 646, 646, 646,
  2936. 646, 646, 646, 646, 646, 646, 646, 646,
  2937. 646, 646, 646, 646, 646, 646, 646, 646,
  2938. 646, 646, 646, 646, 646, 646, 646, 646,
  2939. 646, 646, 646, 646, 646, 646, 646, 646,
  2940. 646, 646, 646, 646, 646, 646, 646, 646,
  2941. 646, 646, 646, 646, 646, 646, 646, 646,
  2942. 646, 646, 646, 646, 646, 646, 646, 646,
  2943. 646, 646, 646, 646, 646, 1, 646, 646,
  2944. 646, 646, 646, 646, 646, 646, 646, 646,
  2945. 646, 646, 646, 646, 646, 646, 646, 646,
  2946. 646, 646, 646, 646, 646, 646, 646, 646,
  2947. 646, 646, 646, 646, 646, 646, 1, 648,
  2948. 648, 648, 648, 648, 648, 648, 648, 648,
  2949. 648, 648, 648, 648, 648, 648, 648, 648,
  2950. 648, 648, 648, 648, 648, 648, 648, 648,
  2951. 648, 648, 648, 648, 648, 648, 648, 648,
  2952. 648, 648, 648, 648, 648, 648, 648, 648,
  2953. 648, 648, 648, 648, 648, 648, 648, 1,
  2954. 648, 648, 648, 648, 648, 648, 648, 648,
  2955. 648, 648, 648, 648, 648, 648, 648, 648,
  2956. 648, 648, 648, 648, 648, 648, 648, 648,
  2957. 648, 648, 648, 648, 648, 648, 648, 648,
  2958. 648, 648, 648, 648, 648, 648, 648, 648,
  2959. 648, 648, 648, 648, 648, 648, 648, 648,
  2960. 648, 648, 648, 648, 648, 648, 648, 648,
  2961. 648, 648, 648, 648, 648, 648, 648, 648,
  2962. 1, 648, 648, 648, 648, 648, 648, 648,
  2963. 648, 648, 648, 648, 648, 648, 648, 648,
  2964. 648, 1, 642, 642, 642, 642, 642, 642,
  2965. 642, 642, 667, 1, 642, 642, 668, 642,
  2966. 642, 642, 642, 642, 642, 642, 642, 642,
  2967. 642, 642, 642, 642, 642, 642, 642, 642,
  2968. 642, 667, 642, 669, 642, 642, 642, 642,
  2969. 642, 642, 642, 642, 642, 642, 642, 642,
  2970. 642, 642, 642, 642, 642, 642, 642, 642,
  2971. 642, 642, 642, 642, 642, 642, 642, 642,
  2972. 642, 642, 642, 642, 642, 642, 642, 642,
  2973. 642, 642, 642, 642, 642, 642, 642, 642,
  2974. 642, 642, 642, 642, 642, 642, 642, 642,
  2975. 642, 642, 642, 642, 642, 645, 642, 642,
  2976. 642, 642, 642, 642, 642, 642, 642, 642,
  2977. 642, 642, 642, 642, 642, 642, 642, 642,
  2978. 642, 642, 642, 642, 642, 642, 642, 642,
  2979. 642, 642, 642, 642, 642, 642, 642, 642,
  2980. 642, 1, 1, 1, 1, 1, 1, 1,
  2981. 1, 1, 1, 1, 1, 1, 1, 1,
  2982. 1, 1, 1, 1, 1, 1, 1, 1,
  2983. 1, 1, 1, 1, 1, 1, 1, 1,
  2984. 1, 1, 1, 1, 1, 1, 1, 1,
  2985. 1, 1, 1, 1, 1, 1, 1, 1,
  2986. 1, 1, 1, 1, 1, 1, 1, 1,
  2987. 1, 1, 1, 1, 1, 1, 1, 1,
  2988. 1, 1, 1, 646, 646, 646, 646, 646,
  2989. 646, 646, 646, 646, 646, 646, 646, 646,
  2990. 646, 646, 646, 646, 646, 646, 646, 646,
  2991. 646, 646, 646, 646, 646, 646, 646, 646,
  2992. 646, 647, 648, 648, 648, 648, 648, 648,
  2993. 648, 648, 648, 648, 648, 648, 649, 648,
  2994. 648, 650, 651, 651, 651, 652, 1, 670,
  2995. 1, 667, 1, 1, 1, 1, 1, 1,
  2996. 1, 1, 1, 1, 1, 1, 1, 1,
  2997. 1, 1, 1, 1, 1, 1, 1, 1,
  2998. 667, 1, 671, 1, 1, 1, 672, 1,
  2999. 1, 1, 1, 1, 1, 1, 1, 1,
  3000. 1, 1, 1, 1, 1, 1, 1, 1,
  3001. 1, 671, 1, 1, 1, 1, 1, 1,
  3002. 1, 673, 1, 1, 1, 1, 1, 384,
  3003. 1, 1, 1, 1, 1, 1, 1, 1,
  3004. 1, 1, 1, 1, 1, 1, 1, 34,
  3005. 1, 674, 1, 675, 1, 671, 1, 1,
  3006. 1, 1, 1, 1, 1, 1, 1, 1,
  3007. 1, 1, 1, 1, 1, 1, 1, 1,
  3008. 1, 1, 1, 1, 671, 1, 676, 1,
  3009. 1, 1, 677, 1, 1, 1, 1, 1,
  3010. 1, 1, 1, 1, 1, 1, 1, 1,
  3011. 1, 1, 1, 1, 1, 676, 1, 1,
  3012. 1, 1, 1, 1, 1, 678, 1, 1,
  3013. 1, 1, 1, 390, 1, 1, 1, 1,
  3014. 1, 1, 1, 1, 1, 1, 1, 1,
  3015. 1, 1, 1, 391, 1, 679, 1, 680,
  3016. 1, 1, 1, 681, 1, 1, 1, 1,
  3017. 1, 1, 1, 1, 1, 1, 1, 1,
  3018. 1, 1, 1, 1, 1, 1, 680, 682,
  3019. 683, 682, 682, 682, 682, 682, 684, 1,
  3020. 682, 682, 685, 682, 686, 682, 682, 682,
  3021. 682, 682, 682, 682, 682, 682, 682, 682,
  3022. 1, 1, 1, 682, 1, 682, 687, 682,
  3023. 682, 682, 682, 682, 682, 682, 682, 682,
  3024. 682, 682, 682, 682, 682, 682, 682, 682,
  3025. 682, 682, 682, 682, 682, 682, 682, 682,
  3026. 682, 1, 1, 1, 682, 682, 682, 682,
  3027. 682, 682, 682, 682, 682, 682, 682, 682,
  3028. 682, 682, 682, 682, 682, 682, 682, 682,
  3029. 682, 682, 682, 682, 682, 682, 682, 682,
  3030. 682, 682, 682, 682, 682, 1, 1, 1,
  3031. 1, 1, 1, 1, 1, 1, 1, 1,
  3032. 1, 1, 1, 1, 1, 1, 1, 1,
  3033. 1, 1, 1, 1, 1, 1, 1, 1,
  3034. 1, 1, 1, 1, 1, 1, 1, 1,
  3035. 1, 1, 1, 1, 1, 1, 1, 1,
  3036. 1, 1, 1, 1, 1, 1, 1, 1,
  3037. 1, 1, 1, 1, 1, 1, 1, 1,
  3038. 1, 1, 1, 1, 1, 1, 1, 1,
  3039. 688, 688, 688, 688, 688, 688, 688, 688,
  3040. 688, 688, 688, 688, 688, 688, 688, 688,
  3041. 688, 688, 688, 688, 688, 688, 688, 688,
  3042. 688, 688, 688, 688, 688, 688, 689, 690,
  3043. 690, 690, 690, 690, 690, 690, 690, 690,
  3044. 690, 690, 690, 691, 690, 690, 692, 693,
  3045. 693, 693, 694, 1, 363, 1, 1, 1,
  3046. 695, 1, 1, 1, 1, 1, 1, 1,
  3047. 1, 1, 1, 1, 1, 1, 1, 1,
  3048. 1, 1, 1, 363, 1, 1, 1, 1,
  3049. 1, 1, 1, 696, 1, 1, 1, 363,
  3050. 1, 1, 1, 1, 1, 1, 1, 1,
  3051. 1, 1, 1, 1, 1, 1, 1, 1,
  3052. 1, 1, 1, 364, 1, 697, 1, 363,
  3053. 1, 1, 1, 1, 1, 1, 1, 1,
  3054. 1, 1, 1, 1, 1, 1, 1, 1,
  3055. 1, 1, 1, 1, 1, 1, 363, 1,
  3056. 685, 1, 1, 1, 698, 1, 1, 1,
  3057. 1, 1, 1, 1, 1, 1, 1, 1,
  3058. 1, 1, 1, 1, 1, 1, 1, 685,
  3059. 1, 1, 1, 1, 1, 1, 1, 699,
  3060. 1, 1, 1, 685, 1, 1, 1, 1,
  3061. 1, 1, 1, 1, 1, 1, 1, 1,
  3062. 1, 1, 1, 1, 1, 1, 1, 687,
  3063. 1, 700, 1, 1, 1, 701, 1, 1,
  3064. 1, 1, 1, 1, 1, 1, 1, 1,
  3065. 1, 1, 1, 1, 1, 1, 1, 1,
  3066. 700, 702, 703, 702, 702, 702, 702, 702,
  3067. 704, 1, 702, 702, 1, 702, 705, 702,
  3068. 702, 702, 702, 702, 702, 702, 702, 702,
  3069. 702, 702, 1, 1, 1, 702, 1, 702,
  3070. 1, 702, 702, 702, 702, 702, 702, 702,
  3071. 702, 702, 702, 702, 702, 702, 702, 702,
  3072. 702, 702, 702, 702, 702, 702, 702, 702,
  3073. 702, 702, 702, 706, 1, 1, 702, 702,
  3074. 702, 702, 702, 702, 702, 702, 702, 702,
  3075. 702, 702, 702, 702, 702, 702, 702, 702,
  3076. 702, 702, 702, 702, 702, 702, 702, 702,
  3077. 702, 702, 702, 702, 702, 702, 702, 1,
  3078. 1, 1, 1, 1, 1, 1, 1, 1,
  3079. 1, 1, 1, 1, 1, 1, 1, 1,
  3080. 1, 1, 1, 1, 1, 1, 1, 1,
  3081. 1, 1, 1, 1, 1, 1, 1, 1,
  3082. 1, 1, 1, 1, 1, 1, 1, 1,
  3083. 1, 1, 1, 1, 1, 1, 1, 1,
  3084. 1, 1, 1, 1, 1, 1, 1, 1,
  3085. 1, 1, 1, 1, 1, 1, 1, 1,
  3086. 1, 1, 707, 707, 707, 707, 707, 707,
  3087. 707, 707, 707, 707, 707, 707, 707, 707,
  3088. 707, 707, 707, 707, 707, 707, 707, 707,
  3089. 707, 707, 707, 707, 707, 707, 707, 707,
  3090. 708, 709, 709, 709, 709, 709, 709, 709,
  3091. 709, 709, 709, 709, 709, 710, 709, 709,
  3092. 711, 712, 712, 712, 713, 1, 714, 1,
  3093. 1, 1, 715, 1, 1, 1, 1, 1,
  3094. 1, 1, 1, 1, 1, 1, 1, 1,
  3095. 1, 1, 1, 1, 1, 714, 716, 717,
  3096. 716, 716, 716, 716, 716, 718, 1, 716,
  3097. 716, 1, 716, 719, 716, 716, 716, 716,
  3098. 716, 716, 716, 716, 716, 716, 716, 1,
  3099. 1, 1, 716, 1, 716, 1, 716, 716,
  3100. 716, 716, 716, 716, 716, 716, 716, 716,
  3101. 716, 716, 716, 716, 716, 716, 716, 716,
  3102. 716, 716, 716, 716, 716, 716, 716, 716,
  3103. 720, 1, 1, 716, 716, 716, 716, 716,
  3104. 716, 716, 716, 716, 716, 716, 716, 716,
  3105. 716, 716, 716, 716, 716, 716, 716, 716,
  3106. 716, 716, 716, 716, 716, 716, 716, 716,
  3107. 716, 716, 716, 716, 1, 1, 1, 1,
  3108. 1, 1, 1, 1, 1, 1, 1, 1,
  3109. 1, 1, 1, 1, 1, 1, 1, 1,
  3110. 1, 1, 1, 1, 1, 1, 1, 1,
  3111. 1, 1, 1, 1, 1, 1, 1, 1,
  3112. 1, 1, 1, 1, 1, 1, 1, 1,
  3113. 1, 1, 1, 1, 1, 1, 1, 1,
  3114. 1, 1, 1, 1, 1, 1, 1, 1,
  3115. 1, 1, 1, 1, 1, 1, 1, 721,
  3116. 721, 721, 721, 721, 721, 721, 721, 721,
  3117. 721, 721, 721, 721, 721, 721, 721, 721,
  3118. 721, 721, 721, 721, 721, 721, 721, 721,
  3119. 721, 721, 721, 721, 721, 722, 723, 723,
  3120. 723, 723, 723, 723, 723, 723, 723, 723,
  3121. 723, 723, 724, 723, 723, 725, 726, 726,
  3122. 726, 727, 1, 728, 1, 714, 1, 1,
  3123. 1, 1, 1, 1, 1, 1, 1, 1,
  3124. 1, 1, 1, 1, 1, 1, 1, 1,
  3125. 1, 1, 1, 1, 714, 1, 729, 1,
  3126. 1, 1, 730, 1, 1, 1, 1, 1,
  3127. 1, 1, 1, 1, 1, 1, 1, 1,
  3128. 1, 1, 1, 1, 1, 729, 716, 717,
  3129. 716, 716, 716, 716, 716, 731, 1, 716,
  3130. 716, 732, 716, 733, 716, 716, 716, 716,
  3131. 716, 716, 716, 716, 716, 716, 716, 734,
  3132. 1, 1, 716, 1, 716, 1, 716, 716,
  3133. 716, 716, 716, 716, 716, 716, 716, 716,
  3134. 716, 716, 716, 716, 716, 716, 716, 716,
  3135. 716, 716, 716, 716, 716, 716, 716, 716,
  3136. 1, 1, 1, 716, 716, 716, 716, 716,
  3137. 716, 716, 716, 716, 716, 716, 716, 716,
  3138. 716, 716, 716, 716, 716, 716, 716, 716,
  3139. 716, 716, 716, 716, 716, 716, 716, 716,
  3140. 716, 716, 716, 716, 1, 1, 1, 1,
  3141. 1, 1, 1, 1, 1, 1, 1, 1,
  3142. 1, 1, 1, 1, 1, 1, 1, 1,
  3143. 1, 1, 1, 1, 1, 1, 1, 1,
  3144. 1, 1, 1, 1, 1, 1, 1, 1,
  3145. 1, 1, 1, 1, 1, 1, 1, 1,
  3146. 1, 1, 1, 1, 1, 1, 1, 1,
  3147. 1, 1, 1, 1, 1, 1, 1, 1,
  3148. 1, 1, 1, 1, 1, 1, 1, 721,
  3149. 721, 721, 721, 721, 721, 721, 721, 721,
  3150. 721, 721, 721, 721, 721, 721, 721, 721,
  3151. 721, 721, 721, 721, 721, 721, 721, 721,
  3152. 721, 721, 721, 721, 721, 722, 723, 723,
  3153. 723, 723, 723, 723, 723, 723, 723, 723,
  3154. 723, 723, 724, 723, 723, 725, 726, 726,
  3155. 726, 727, 1, 729, 1, 1, 1, 730,
  3156. 1, 1, 1, 1, 1, 1, 1, 1,
  3157. 1, 1, 1, 1, 1, 1, 1, 1,
  3158. 1, 1, 729, 1, 1, 1, 1, 1,
  3159. 1, 1, 731, 1, 1, 1, 732, 1,
  3160. 735, 1, 1, 1, 1, 1, 1, 1,
  3161. 1, 1, 1, 1, 734, 1, 736, 1,
  3162. 729, 1, 1, 1, 1, 1, 1, 1,
  3163. 1, 1, 1, 1, 1, 1, 1, 1,
  3164. 1, 1, 1, 1, 1, 1, 1, 729,
  3165. 1, 737, 1, 1, 1, 738, 1, 1,
  3166. 1, 1, 1, 1, 1, 1, 1, 1,
  3167. 1, 1, 1, 1, 1, 1, 1, 1,
  3168. 737, 1, 1, 1, 1, 1, 1, 1,
  3169. 739, 1, 1, 1, 740, 1, 741, 1,
  3170. 1, 1, 1, 1, 1, 1, 1, 1,
  3171. 1, 1, 742, 1, 743, 1, 1, 1,
  3172. 744, 1, 1, 1, 1, 1, 1, 1,
  3173. 1, 1, 1, 1, 1, 1, 1, 1,
  3174. 1, 1, 1, 743, 1, 1, 1, 1,
  3175. 1, 1, 1, 745, 1, 1, 1, 743,
  3176. 1, 1, 1, 1, 1, 1, 1, 1,
  3177. 1, 1, 1, 1, 1, 746, 1, 1,
  3178. 1, 1, 1, 364, 1, 747, 1, 743,
  3179. 1, 1, 1, 1, 1, 1, 1, 1,
  3180. 1, 1, 1, 1, 1, 1, 1, 1,
  3181. 1, 1, 1, 1, 1, 1, 743, 1,
  3182. 748, 1, 1, 1, 749, 1, 1, 1,
  3183. 1, 1, 1, 1, 1, 1, 1, 1,
  3184. 1, 1, 1, 1, 1, 1, 1, 748,
  3185. 1, 1, 1, 1, 1, 1, 1, 750,
  3186. 1, 1, 1, 748, 1, 1, 1, 1,
  3187. 1, 1, 1, 1, 1, 1, 1, 1,
  3188. 1, 751, 1, 1, 1, 1, 1, 687,
  3189. 1, 752, 1, 1, 1, 753, 1, 1,
  3190. 1, 1, 1, 1, 1, 1, 1, 1,
  3191. 1, 1, 1, 1, 1, 1, 1, 1,
  3192. 752, 754, 755, 754, 754, 754, 754, 754,
  3193. 756, 1, 754, 754, 1, 754, 757, 754,
  3194. 754, 754, 754, 754, 754, 754, 754, 754,
  3195. 754, 754, 1, 1, 1, 754, 1, 754,
  3196. 1, 754, 754, 754, 754, 754, 754, 754,
  3197. 754, 754, 754, 754, 754, 754, 754, 754,
  3198. 754, 754, 754, 754, 754, 754, 754, 754,
  3199. 754, 754, 754, 1, 1, 1, 754, 754,
  3200. 754, 754, 754, 754, 754, 754, 754, 754,
  3201. 754, 754, 754, 754, 754, 754, 754, 754,
  3202. 754, 754, 754, 754, 754, 754, 754, 754,
  3203. 754, 754, 754, 754, 754, 754, 754, 1,
  3204. 1, 1, 1, 1, 1, 1, 1, 1,
  3205. 1, 1, 1, 1, 1, 1, 1, 1,
  3206. 1, 1, 1, 1, 1, 1, 1, 1,
  3207. 1, 1, 1, 1, 1, 1, 1, 1,
  3208. 1, 1, 1, 1, 1, 1, 1, 1,
  3209. 1, 1, 1, 1, 1, 1, 1, 1,
  3210. 1, 1, 1, 1, 1, 1, 1, 1,
  3211. 1, 1, 1, 1, 1, 1, 1, 1,
  3212. 1, 1, 758, 758, 758, 758, 758, 758,
  3213. 758, 758, 758, 758, 758, 758, 758, 758,
  3214. 758, 758, 758, 758, 758, 758, 758, 758,
  3215. 758, 758, 758, 758, 758, 758, 758, 758,
  3216. 759, 760, 760, 760, 760, 760, 760, 760,
  3217. 760, 760, 760, 760, 760, 761, 760, 760,
  3218. 762, 763, 763, 763, 764, 1, 765, 1,
  3219. 1, 1, 766, 1, 1, 1, 1, 1,
  3220. 1, 1, 1, 1, 1, 1, 1, 1,
  3221. 1, 1, 1, 1, 1, 765, 347, 348,
  3222. 347, 347, 347, 347, 347, 767, 1, 347,
  3223. 347, 1, 347, 351, 347, 347, 347, 347,
  3224. 347, 347, 347, 347, 347, 347, 347, 1,
  3225. 1, 1, 347, 1, 347, 1, 347, 347,
  3226. 347, 347, 347, 347, 347, 347, 347, 347,
  3227. 347, 347, 347, 347, 347, 347, 347, 347,
  3228. 347, 347, 347, 347, 347, 347, 347, 347,
  3229. 1, 1, 1, 347, 347, 347, 347, 347,
  3230. 347, 347, 347, 347, 347, 347, 347, 347,
  3231. 347, 347, 347, 347, 347, 347, 347, 347,
  3232. 347, 347, 347, 347, 347, 347, 347, 347,
  3233. 347, 347, 347, 347, 1, 1, 1, 1,
  3234. 1, 1, 1, 1, 1, 1, 1, 1,
  3235. 1, 1, 1, 1, 1, 1, 1, 1,
  3236. 1, 1, 1, 1, 1, 1, 1, 1,
  3237. 1, 1, 1, 1, 1, 1, 1, 1,
  3238. 1, 1, 1, 1, 1, 1, 1, 1,
  3239. 1, 1, 1, 1, 1, 1, 1, 1,
  3240. 1, 1, 1, 1, 1, 1, 1, 1,
  3241. 1, 1, 1, 1, 1, 1, 1, 353,
  3242. 353, 353, 353, 353, 353, 353, 353, 353,
  3243. 353, 353, 353, 353, 353, 353, 353, 353,
  3244. 353, 353, 353, 353, 353, 353, 353, 353,
  3245. 353, 353, 353, 353, 353, 354, 355, 355,
  3246. 355, 355, 355, 355, 355, 355, 355, 355,
  3247. 355, 355, 356, 355, 355, 357, 358, 358,
  3248. 358, 359, 1, 768, 1, 765, 1, 1,
  3249. 1, 1, 1, 1, 1, 1, 1, 1,
  3250. 1, 1, 1, 1, 1, 1, 1, 1,
  3251. 1, 1, 1, 1, 765, 1, 769, 1,
  3252. 1, 1, 770, 1, 1, 1, 1, 1,
  3253. 1, 1, 1, 1, 1, 1, 1, 1,
  3254. 1, 1, 1, 1, 1, 769, 682, 683,
  3255. 682, 682, 682, 682, 682, 771, 1, 682,
  3256. 682, 1, 682, 686, 682, 682, 682, 682,
  3257. 682, 682, 682, 682, 682, 682, 682, 1,
  3258. 1, 1, 682, 1, 682, 1, 682, 682,
  3259. 682, 682, 682, 682, 682, 682, 682, 682,
  3260. 682, 682, 682, 682, 682, 682, 682, 682,
  3261. 682, 682, 682, 682, 682, 682, 682, 682,
  3262. 1, 1, 1, 682, 682, 682, 682, 682,
  3263. 682, 682, 682, 682, 682, 682, 682, 682,
  3264. 682, 682, 682, 682, 682, 682, 682, 682,
  3265. 682, 682, 682, 682, 682, 682, 682, 682,
  3266. 682, 682, 682, 682, 1, 1, 1, 1,
  3267. 1, 1, 1, 1, 1, 1, 1, 1,
  3268. 1, 1, 1, 1, 1, 1, 1, 1,
  3269. 1, 1, 1, 1, 1, 1, 1, 1,
  3270. 1, 1, 1, 1, 1, 1, 1, 1,
  3271. 1, 1, 1, 1, 1, 1, 1, 1,
  3272. 1, 1, 1, 1, 1, 1, 1, 1,
  3273. 1, 1, 1, 1, 1, 1, 1, 1,
  3274. 1, 1, 1, 1, 1, 1, 1, 688,
  3275. 688, 688, 688, 688, 688, 688, 688, 688,
  3276. 688, 688, 688, 688, 688, 688, 688, 688,
  3277. 688, 688, 688, 688, 688, 688, 688, 688,
  3278. 688, 688, 688, 688, 688, 689, 690, 690,
  3279. 690, 690, 690, 690, 690, 690, 690, 690,
  3280. 690, 690, 691, 690, 690, 692, 693, 693,
  3281. 693, 694, 1, 573, 369, 573, 573, 573,
  3282. 573, 573, 1, 1, 573, 573, 1, 573,
  3283. 772, 573, 573, 573, 573, 573, 573, 573,
  3284. 573, 573, 573, 573, 1, 1, 1, 573,
  3285. 1, 573, 1, 573, 573, 573, 573, 573,
  3286. 573, 573, 573, 573, 573, 573, 573, 573,
  3287. 573, 573, 573, 573, 573, 573, 573, 573,
  3288. 573, 573, 573, 573, 573, 1, 1, 1,
  3289. 573, 573, 573, 573, 573, 573, 573, 573,
  3290. 573, 573, 573, 573, 573, 573, 573, 573,
  3291. 573, 573, 573, 573, 573, 573, 573, 573,
  3292. 573, 573, 573, 573, 573, 573, 573, 573,
  3293. 573, 1, 1, 1, 1, 1, 1, 1,
  3294. 1, 1, 1, 1, 1, 1, 1, 1,
  3295. 1, 1, 1, 1, 1, 1, 1, 1,
  3296. 1, 1, 1, 1, 1, 1, 1, 1,
  3297. 1, 1, 1, 1, 1, 1, 1, 1,
  3298. 1, 1, 1, 1, 1, 1, 1, 1,
  3299. 1, 1, 1, 1, 1, 1, 1, 1,
  3300. 1, 1, 1, 1, 1, 1, 1, 1,
  3301. 1, 1, 1, 1, 578, 578, 578, 578,
  3302. 578, 578, 578, 578, 578, 578, 578, 578,
  3303. 578, 578, 578, 578, 578, 578, 578, 578,
  3304. 578, 578, 578, 578, 578, 578, 578, 578,
  3305. 578, 578, 579, 580, 580, 580, 580, 580,
  3306. 580, 580, 580, 580, 580, 580, 580, 581,
  3307. 580, 580, 582, 583, 583, 583, 584, 1,
  3308. 735, 1, 1, 1, 773, 1, 1, 1,
  3309. 1, 1, 1, 1, 1, 1, 1, 1,
  3310. 1, 1, 1, 1, 1, 1, 1, 735,
  3311. 774, 1, 774, 774, 774, 774, 774, 775,
  3312. 1, 774, 774, 1, 774, 1, 774, 774,
  3313. 774, 774, 774, 774, 774, 774, 774, 774,
  3314. 774, 1, 1, 1, 774, 1, 774, 1,
  3315. 774, 774, 774, 774, 774, 774, 774, 774,
  3316. 774, 774, 774, 774, 774, 774, 774, 774,
  3317. 774, 774, 774, 774, 774, 774, 774, 774,
  3318. 774, 774, 1, 1, 1, 774, 774, 774,
  3319. 774, 774, 774, 774, 774, 774, 774, 774,
  3320. 774, 774, 774, 774, 774, 774, 774, 774,
  3321. 774, 774, 774, 774, 774, 774, 774, 774,
  3322. 774, 774, 774, 774, 774, 774, 1, 1,
  3323. 1, 1, 1, 1, 1, 1, 1, 1,
  3324. 1, 1, 1, 1, 1, 1, 1, 1,
  3325. 1, 1, 1, 1, 1, 1, 1, 1,
  3326. 1, 1, 1, 1, 1, 1, 1, 1,
  3327. 1, 1, 1, 1, 1, 1, 1, 1,
  3328. 1, 1, 1, 1, 1, 1, 1, 1,
  3329. 1, 1, 1, 1, 1, 1, 1, 1,
  3330. 1, 1, 1, 1, 1, 1, 1, 1,
  3331. 1, 776, 776, 776, 776, 776, 776, 776,
  3332. 776, 776, 776, 776, 776, 776, 776, 776,
  3333. 776, 776, 776, 776, 776, 776, 776, 776,
  3334. 776, 776, 776, 776, 776, 776, 776, 777,
  3335. 778, 778, 778, 778, 778, 778, 778, 778,
  3336. 778, 778, 778, 778, 779, 778, 778, 780,
  3337. 781, 781, 781, 782, 1, 783, 1, 735,
  3338. 1, 1, 1, 1, 1, 1, 1, 1,
  3339. 1, 1, 1, 1, 1, 1, 1, 1,
  3340. 1, 1, 1, 1, 1, 1, 735, 1,
  3341. 729, 1, 1, 1, 730, 1, 1, 1,
  3342. 1, 1, 1, 1, 1, 1, 1, 1,
  3343. 1, 1, 1, 1, 1, 1, 1, 729,
  3344. 774, 1, 774, 774, 774, 774, 774, 731,
  3345. 1, 774, 774, 732, 774, 735, 774, 774,
  3346. 774, 774, 774, 774, 774, 774, 774, 774,
  3347. 774, 734, 1, 1, 774, 1, 774, 1,
  3348. 774, 774, 774, 774, 774, 774, 774, 774,
  3349. 774, 774, 774, 774, 774, 774, 774, 774,
  3350. 774, 774, 774, 774, 774, 774, 774, 774,
  3351. 774, 774, 1, 1, 1, 774, 774, 774,
  3352. 774, 774, 774, 774, 774, 774, 774, 774,
  3353. 774, 774, 774, 774, 774, 774, 774, 774,
  3354. 774, 774, 774, 774, 774, 774, 774, 774,
  3355. 774, 774, 774, 774, 774, 774, 1, 1,
  3356. 1, 1, 1, 1, 1, 1, 1, 1,
  3357. 1, 1, 1, 1, 1, 1, 1, 1,
  3358. 1, 1, 1, 1, 1, 1, 1, 1,
  3359. 1, 1, 1, 1, 1, 1, 1, 1,
  3360. 1, 1, 1, 1, 1, 1, 1, 1,
  3361. 1, 1, 1, 1, 1, 1, 1, 1,
  3362. 1, 1, 1, 1, 1, 1, 1, 1,
  3363. 1, 1, 1, 1, 1, 1, 1, 1,
  3364. 1, 776, 776, 776, 776, 776, 776, 776,
  3365. 776, 776, 776, 776, 776, 776, 776, 776,
  3366. 776, 776, 776, 776, 776, 776, 776, 776,
  3367. 776, 776, 776, 776, 776, 776, 776, 777,
  3368. 778, 778, 778, 778, 778, 778, 778, 778,
  3369. 778, 778, 778, 778, 779, 778, 778, 780,
  3370. 781, 781, 781, 782, 1, 774, 774, 774,
  3371. 774, 774, 774, 774, 774, 774, 774, 774,
  3372. 774, 774, 774, 774, 774, 774, 774, 774,
  3373. 774, 774, 774, 774, 774, 774, 774, 774,
  3374. 774, 774, 774, 774, 774, 774, 774, 774,
  3375. 774, 774, 774, 774, 774, 774, 774, 774,
  3376. 774, 774, 774, 774, 774, 774, 774, 774,
  3377. 774, 774, 774, 774, 774, 774, 774, 774,
  3378. 774, 774, 774, 774, 774, 1, 776, 776,
  3379. 776, 776, 776, 776, 776, 776, 776, 776,
  3380. 776, 776, 776, 776, 776, 776, 776, 776,
  3381. 776, 776, 776, 776, 776, 776, 776, 776,
  3382. 776, 776, 776, 776, 776, 776, 1, 776,
  3383. 776, 776, 776, 776, 776, 776, 776, 776,
  3384. 776, 776, 776, 776, 776, 776, 776, 776,
  3385. 776, 776, 776, 776, 776, 776, 776, 776,
  3386. 776, 776, 776, 776, 776, 776, 776, 776,
  3387. 776, 776, 776, 776, 776, 776, 776, 776,
  3388. 776, 776, 776, 776, 776, 776, 776, 776,
  3389. 776, 776, 776, 776, 776, 776, 776, 776,
  3390. 776, 776, 776, 776, 776, 776, 776, 1,
  3391. 776, 776, 776, 776, 776, 776, 776, 776,
  3392. 776, 776, 776, 776, 776, 776, 776, 776,
  3393. 776, 776, 776, 776, 776, 776, 776, 776,
  3394. 776, 776, 776, 776, 776, 776, 776, 776,
  3395. 1, 778, 778, 778, 778, 778, 778, 778,
  3396. 778, 778, 778, 778, 778, 778, 778, 778,
  3397. 778, 778, 778, 778, 778, 778, 778, 778,
  3398. 778, 778, 778, 778, 778, 778, 778, 778,
  3399. 778, 778, 778, 778, 778, 778, 778, 778,
  3400. 778, 778, 778, 778, 778, 778, 778, 778,
  3401. 778, 1, 778, 778, 778, 778, 778, 778,
  3402. 778, 778, 778, 778, 778, 778, 778, 778,
  3403. 778, 778, 778, 778, 778, 778, 778, 778,
  3404. 778, 778, 778, 778, 778, 778, 778, 778,
  3405. 778, 778, 778, 778, 778, 778, 778, 778,
  3406. 778, 778, 778, 778, 778, 778, 778, 778,
  3407. 778, 778, 778, 778, 778, 778, 778, 778,
  3408. 778, 778, 778, 778, 778, 778, 778, 778,
  3409. 778, 778, 1, 778, 778, 778, 778, 778,
  3410. 778, 778, 778, 778, 778, 778, 778, 778,
  3411. 778, 778, 778, 1, 741, 1, 1, 1,
  3412. 784, 1, 1, 1, 1, 1, 1, 1,
  3413. 1, 1, 1, 1, 1, 1, 1, 1,
  3414. 1, 1, 1, 741, 785, 1, 785, 785,
  3415. 785, 785, 785, 786, 1, 785, 785, 1,
  3416. 785, 1, 785, 785, 785, 785, 785, 785,
  3417. 785, 785, 785, 785, 785, 1, 1, 1,
  3418. 785, 1, 785, 1, 785, 785, 785, 785,
  3419. 785, 785, 785, 785, 785, 785, 785, 785,
  3420. 785, 785, 785, 785, 785, 785, 785, 785,
  3421. 785, 785, 785, 785, 785, 785, 1, 1,
  3422. 1, 785, 785, 785, 785, 785, 785, 785,
  3423. 785, 785, 785, 785, 785, 785, 785, 785,
  3424. 785, 785, 785, 785, 785, 785, 785, 785,
  3425. 785, 785, 785, 785, 785, 785, 785, 785,
  3426. 785, 785, 1, 1, 1, 1, 1, 1,
  3427. 1, 1, 1, 1, 1, 1, 1, 1,
  3428. 1, 1, 1, 1, 1, 1, 1, 1,
  3429. 1, 1, 1, 1, 1, 1, 1, 1,
  3430. 1, 1, 1, 1, 1, 1, 1, 1,
  3431. 1, 1, 1, 1, 1, 1, 1, 1,
  3432. 1, 1, 1, 1, 1, 1, 1, 1,
  3433. 1, 1, 1, 1, 1, 1, 1, 1,
  3434. 1, 1, 1, 1, 1, 787, 787, 787,
  3435. 787, 787, 787, 787, 787, 787, 787, 787,
  3436. 787, 787, 787, 787, 787, 787, 787, 787,
  3437. 787, 787, 787, 787, 787, 787, 787, 787,
  3438. 787, 787, 787, 788, 789, 789, 789, 789,
  3439. 789, 789, 789, 789, 789, 789, 789, 789,
  3440. 790, 789, 789, 791, 792, 792, 792, 793,
  3441. 1, 794, 794, 794, 794, 794, 794, 794,
  3442. 794, 717, 1, 794, 794, 795, 794, 794,
  3443. 794, 794, 794, 794, 794, 794, 794, 794,
  3444. 794, 794, 794, 794, 794, 794, 794, 794,
  3445. 717, 794, 1, 794, 794, 794, 794, 794,
  3446. 794, 794, 794, 794, 794, 794, 794, 794,
  3447. 794, 794, 794, 794, 794, 794, 794, 794,
  3448. 794, 794, 794, 794, 794, 794, 794, 794,
  3449. 794, 794, 794, 794, 794, 794, 794, 794,
  3450. 794, 794, 794, 794, 794, 794, 794, 794,
  3451. 794, 794, 794, 794, 794, 794, 794, 794,
  3452. 794, 794, 794, 794, 796, 794, 794, 794,
  3453. 794, 794, 794, 794, 794, 794, 794, 794,
  3454. 794, 794, 794, 794, 794, 794, 794, 794,
  3455. 794, 794, 794, 794, 794, 794, 794, 794,
  3456. 794, 794, 794, 794, 794, 794, 794, 794,
  3457. 1, 1, 1, 1, 1, 1, 1, 1,
  3458. 1, 1, 1, 1, 1, 1, 1, 1,
  3459. 1, 1, 1, 1, 1, 1, 1, 1,
  3460. 1, 1, 1, 1, 1, 1, 1, 1,
  3461. 1, 1, 1, 1, 1, 1, 1, 1,
  3462. 1, 1, 1, 1, 1, 1, 1, 1,
  3463. 1, 1, 1, 1, 1, 1, 1, 1,
  3464. 1, 1, 1, 1, 1, 1, 1, 1,
  3465. 1, 1, 797, 797, 797, 797, 797, 797,
  3466. 797, 797, 797, 797, 797, 797, 797, 797,
  3467. 797, 797, 797, 797, 797, 797, 797, 797,
  3468. 797, 797, 797, 797, 797, 797, 797, 797,
  3469. 798, 799, 799, 799, 799, 799, 799, 799,
  3470. 799, 799, 799, 799, 799, 800, 799, 799,
  3471. 801, 802, 802, 802, 803, 1, 794, 794,
  3472. 794, 794, 794, 794, 794, 794, 794, 1,
  3473. 794, 794, 804, 794, 794, 794, 794, 794,
  3474. 794, 794, 794, 794, 794, 794, 794, 794,
  3475. 794, 794, 794, 794, 794, 794, 794, 805,
  3476. 794, 794, 794, 794, 794, 794, 794, 794,
  3477. 794, 794, 794, 794, 794, 794, 794, 794,
  3478. 794, 794, 794, 794, 794, 794, 794, 794,
  3479. 794, 794, 794, 794, 794, 794, 794, 794,
  3480. 794, 794, 794, 794, 794, 794, 794, 794,
  3481. 794, 794, 794, 794, 794, 794, 794, 794,
  3482. 794, 794, 794, 794, 794, 794, 794, 794,
  3483. 794, 796, 794, 794, 794, 794, 794, 794,
  3484. 794, 794, 794, 794, 794, 794, 794, 794,
  3485. 794, 794, 794, 794, 794, 794, 794, 794,
  3486. 794, 794, 794, 794, 794, 794, 794, 794,
  3487. 794, 794, 794, 794, 794, 1, 1, 1,
  3488. 1, 1, 1, 1, 1, 1, 1, 1,
  3489. 1, 1, 1, 1, 1, 1, 1, 1,
  3490. 1, 1, 1, 1, 1, 1, 1, 1,
  3491. 1, 1, 1, 1, 1, 1, 1, 1,
  3492. 1, 1, 1, 1, 1, 1, 1, 1,
  3493. 1, 1, 1, 1, 1, 1, 1, 1,
  3494. 1, 1, 1, 1, 1, 1, 1, 1,
  3495. 1, 1, 1, 1, 1, 1, 1, 797,
  3496. 797, 797, 797, 797, 797, 797, 797, 797,
  3497. 797, 797, 797, 797, 797, 797, 797, 797,
  3498. 797, 797, 797, 797, 797, 797, 797, 797,
  3499. 797, 797, 797, 797, 797, 798, 799, 799,
  3500. 799, 799, 799, 799, 799, 799, 799, 799,
  3501. 799, 799, 800, 799, 799, 801, 802, 802,
  3502. 802, 803, 1, 806, 1, 794, 1, 1,
  3503. 1, 1, 1, 1, 1, 1, 1, 1,
  3504. 1, 1, 1, 1, 1, 1, 1, 1,
  3505. 1, 1, 1, 1, 794, 1, 807, 1,
  3506. 1, 1, 808, 1, 1, 1, 1, 1,
  3507. 1, 1, 1, 1, 1, 1, 1, 1,
  3508. 1, 1, 1, 1, 1, 807, 805, 717,
  3509. 805, 805, 805, 805, 805, 809, 1, 805,
  3510. 805, 732, 805, 719, 805, 805, 805, 805,
  3511. 805, 805, 805, 805, 805, 805, 805, 734,
  3512. 1, 1, 805, 1, 805, 1, 805, 805,
  3513. 805, 805, 805, 805, 805, 805, 805, 805,
  3514. 805, 805, 805, 805, 805, 805, 805, 805,
  3515. 805, 805, 805, 805, 805, 805, 805, 805,
  3516. 1, 1, 1, 805, 805, 805, 805, 805,
  3517. 805, 805, 805, 805, 805, 805, 805, 805,
  3518. 805, 805, 805, 805, 805, 805, 805, 805,
  3519. 805, 805, 805, 805, 805, 805, 805, 805,
  3520. 805, 805, 805, 805, 1, 1, 1, 1,
  3521. 1, 1, 1, 1, 1, 1, 1, 1,
  3522. 1, 1, 1, 1, 1, 1, 1, 1,
  3523. 1, 1, 1, 1, 1, 1, 1, 1,
  3524. 1, 1, 1, 1, 1, 1, 1, 1,
  3525. 1, 1, 1, 1, 1, 1, 1, 1,
  3526. 1, 1, 1, 1, 1, 1, 1, 1,
  3527. 1, 1, 1, 1, 1, 1, 1, 1,
  3528. 1, 1, 1, 1, 1, 1, 1, 810,
  3529. 810, 810, 810, 810, 810, 810, 810, 810,
  3530. 810, 810, 810, 810, 810, 810, 810, 810,
  3531. 810, 810, 810, 810, 810, 810, 810, 810,
  3532. 810, 810, 810, 810, 810, 811, 812, 812,
  3533. 812, 812, 812, 812, 812, 812, 812, 812,
  3534. 812, 812, 813, 812, 812, 814, 815, 815,
  3535. 815, 816, 1, 807, 1, 1, 1, 808,
  3536. 1, 1, 1, 1, 1, 1, 1, 1,
  3537. 1, 1, 1, 1, 1, 1, 1, 1,
  3538. 1, 1, 807, 1, 1, 1, 1, 1,
  3539. 1, 1, 809, 1, 1, 1, 732, 1,
  3540. 1, 1, 1, 1, 1, 1, 1, 1,
  3541. 1, 1, 1, 1, 734, 1, 817, 1,
  3542. 807, 1, 1, 1, 1, 1, 1, 1,
  3543. 1, 1, 1, 1, 1, 1, 1, 1,
  3544. 1, 1, 1, 1, 1, 1, 1, 807,
  3545. 1, 818, 1, 1, 1, 819, 1, 1,
  3546. 1, 1, 1, 1, 1, 1, 1, 1,
  3547. 1, 1, 1, 1, 1, 1, 1, 1,
  3548. 818, 1, 1, 1, 1, 1, 1, 1,
  3549. 820, 1, 1, 1, 740, 1, 1, 1,
  3550. 1, 1, 1, 1, 1, 1, 1, 1,
  3551. 1, 1, 742, 1, 805, 717, 805, 805,
  3552. 805, 805, 805, 1, 1, 805, 805, 1,
  3553. 805, 719, 805, 805, 805, 805, 805, 805,
  3554. 805, 805, 805, 805, 805, 1, 1, 1,
  3555. 805, 1, 805, 1, 805, 805, 805, 805,
  3556. 805, 805, 805, 805, 805, 805, 805, 805,
  3557. 805, 805, 805, 805, 805, 805, 805, 805,
  3558. 805, 805, 805, 805, 805, 805, 1, 1,
  3559. 1, 805, 805, 805, 805, 805, 805, 805,
  3560. 805, 805, 805, 805, 805, 805, 805, 805,
  3561. 805, 805, 805, 805, 805, 805, 805, 805,
  3562. 805, 805, 805, 805, 805, 805, 805, 805,
  3563. 805, 805, 1, 1, 1, 1, 1, 1,
  3564. 1, 1, 1, 1, 1, 1, 1, 1,
  3565. 1, 1, 1, 1, 1, 1, 1, 1,
  3566. 1, 1, 1, 1, 1, 1, 1, 1,
  3567. 1, 1, 1, 1, 1, 1, 1, 1,
  3568. 1, 1, 1, 1, 1, 1, 1, 1,
  3569. 1, 1, 1, 1, 1, 1, 1, 1,
  3570. 1, 1, 1, 1, 1, 1, 1, 1,
  3571. 1, 1, 1, 1, 1, 810, 810, 810,
  3572. 810, 810, 810, 810, 810, 810, 810, 810,
  3573. 810, 810, 810, 810, 810, 810, 810, 810,
  3574. 810, 810, 810, 810, 810, 810, 810, 810,
  3575. 810, 810, 810, 811, 812, 812, 812, 812,
  3576. 812, 812, 812, 812, 812, 812, 812, 812,
  3577. 813, 812, 812, 814, 815, 815, 815, 816,
  3578. 1, 805, 805, 805, 805, 805, 805, 805,
  3579. 805, 805, 805, 805, 805, 805, 805, 805,
  3580. 805, 805, 805, 805, 805, 805, 805, 805,
  3581. 805, 805, 805, 805, 805, 805, 805, 805,
  3582. 805, 805, 805, 805, 805, 805, 805, 805,
  3583. 805, 805, 805, 805, 805, 805, 805, 805,
  3584. 805, 805, 805, 805, 805, 805, 805, 805,
  3585. 805, 805, 805, 805, 805, 805, 805, 805,
  3586. 805, 1, 810, 810, 810, 810, 810, 810,
  3587. 810, 810, 810, 810, 810, 810, 810, 810,
  3588. 810, 810, 810, 810, 810, 810, 810, 810,
  3589. 810, 810, 810, 810, 810, 810, 810, 810,
  3590. 810, 810, 1, 810, 810, 810, 810, 810,
  3591. 810, 810, 810, 810, 810, 810, 810, 810,
  3592. 810, 810, 810, 810, 810, 810, 810, 810,
  3593. 810, 810, 810, 810, 810, 810, 810, 810,
  3594. 810, 810, 810, 810, 810, 810, 810, 810,
  3595. 810, 810, 810, 810, 810, 810, 810, 810,
  3596. 810, 810, 810, 810, 810, 810, 810, 810,
  3597. 810, 810, 810, 810, 810, 810, 810, 810,
  3598. 810, 810, 810, 1, 810, 810, 810, 810,
  3599. 810, 810, 810, 810, 810, 810, 810, 810,
  3600. 810, 810, 810, 810, 810, 810, 810, 810,
  3601. 810, 810, 810, 810, 810, 810, 810, 810,
  3602. 810, 810, 810, 810, 1, 812, 812, 812,
  3603. 812, 812, 812, 812, 812, 812, 812, 812,
  3604. 812, 812, 812, 812, 812, 812, 812, 812,
  3605. 812, 812, 812, 812, 812, 812, 812, 812,
  3606. 812, 812, 812, 812, 812, 812, 812, 812,
  3607. 812, 812, 812, 812, 812, 812, 812, 812,
  3608. 812, 812, 812, 812, 812, 1, 812, 812,
  3609. 812, 812, 812, 812, 812, 812, 812, 812,
  3610. 812, 812, 812, 812, 812, 812, 812, 812,
  3611. 812, 812, 812, 812, 812, 812, 812, 812,
  3612. 812, 812, 812, 812, 812, 812, 812, 812,
  3613. 812, 812, 812, 812, 812, 812, 812, 812,
  3614. 812, 812, 812, 812, 812, 812, 812, 812,
  3615. 812, 812, 812, 812, 812, 812, 812, 812,
  3616. 812, 812, 812, 812, 812, 812, 1, 812,
  3617. 812, 812, 812, 812, 812, 812, 812, 812,
  3618. 812, 812, 812, 812, 812, 812, 812, 1,
  3619. 794, 794, 794, 794, 794, 794, 794, 794,
  3620. 794, 794, 794, 794, 794, 794, 794, 794,
  3621. 794, 794, 794, 794, 794, 794, 794, 794,
  3622. 794, 794, 794, 794, 794, 794, 794, 794,
  3623. 794, 794, 794, 794, 794, 794, 794, 794,
  3624. 794, 794, 794, 794, 794, 794, 794, 794,
  3625. 794, 794, 794, 794, 794, 794, 794, 794,
  3626. 794, 794, 794, 794, 794, 794, 794, 794,
  3627. 794, 794, 794, 794, 794, 794, 794, 794,
  3628. 794, 794, 794, 794, 794, 794, 794, 794,
  3629. 794, 794, 794, 794, 794, 794, 794, 794,
  3630. 794, 794, 794, 794, 794, 794, 794, 794,
  3631. 794, 794, 794, 794, 794, 794, 794, 794,
  3632. 794, 794, 794, 794, 794, 794, 794, 794,
  3633. 794, 794, 794, 794, 794, 794, 794, 794,
  3634. 794, 794, 794, 794, 794, 794, 794, 794,
  3635. 1, 1, 1, 1, 1, 1, 1, 1,
  3636. 1, 1, 1, 1, 1, 1, 1, 1,
  3637. 1, 1, 1, 1, 1, 1, 1, 1,
  3638. 1, 1, 1, 1, 1, 1, 1, 1,
  3639. 1, 1, 1, 1, 1, 1, 1, 1,
  3640. 1, 1, 1, 1, 1, 1, 1, 1,
  3641. 1, 1, 1, 1, 1, 1, 1, 1,
  3642. 1, 1, 1, 1, 1, 1, 1, 1,
  3643. 1, 1, 797, 797, 797, 797, 797, 797,
  3644. 797, 797, 797, 797, 797, 797, 797, 797,
  3645. 797, 797, 797, 797, 797, 797, 797, 797,
  3646. 797, 797, 797, 797, 797, 797, 797, 797,
  3647. 798, 799, 799, 799, 799, 799, 799, 799,
  3648. 799, 799, 799, 799, 799, 800, 799, 799,
  3649. 801, 802, 802, 802, 803, 1, 794, 794,
  3650. 794, 794, 794, 794, 794, 794, 794, 794,
  3651. 794, 794, 794, 794, 794, 794, 794, 794,
  3652. 794, 794, 794, 794, 794, 794, 794, 794,
  3653. 794, 794, 794, 794, 794, 794, 794, 794,
  3654. 794, 794, 794, 794, 794, 794, 794, 794,
  3655. 794, 794, 794, 794, 794, 794, 794, 794,
  3656. 794, 794, 794, 794, 794, 794, 794, 794,
  3657. 794, 794, 794, 794, 794, 794, 1, 797,
  3658. 797, 797, 797, 797, 797, 797, 797, 797,
  3659. 797, 797, 797, 797, 797, 797, 797, 797,
  3660. 797, 797, 797, 797, 797, 797, 797, 797,
  3661. 797, 797, 797, 797, 797, 797, 797, 1,
  3662. 797, 797, 797, 797, 797, 797, 797, 797,
  3663. 797, 797, 797, 797, 797, 797, 797, 797,
  3664. 797, 797, 797, 797, 797, 797, 797, 797,
  3665. 797, 797, 797, 797, 797, 797, 797, 797,
  3666. 797, 797, 797, 797, 797, 797, 797, 797,
  3667. 797, 797, 797, 797, 797, 797, 797, 797,
  3668. 797, 797, 797, 797, 797, 797, 797, 797,
  3669. 797, 797, 797, 797, 797, 797, 797, 797,
  3670. 1, 797, 797, 797, 797, 797, 797, 797,
  3671. 797, 797, 797, 797, 797, 797, 797, 797,
  3672. 797, 797, 797, 797, 797, 797, 797, 797,
  3673. 797, 797, 797, 797, 797, 797, 797, 797,
  3674. 797, 1, 799, 799, 799, 799, 799, 799,
  3675. 799, 799, 799, 799, 799, 799, 799, 799,
  3676. 799, 799, 799, 799, 799, 799, 799, 799,
  3677. 799, 799, 799, 799, 799, 799, 799, 799,
  3678. 799, 799, 799, 799, 799, 799, 799, 799,
  3679. 799, 799, 799, 799, 799, 799, 799, 799,
  3680. 799, 799, 1, 799, 799, 799, 799, 799,
  3681. 799, 799, 799, 799, 799, 799, 799, 799,
  3682. 799, 799, 799, 799, 799, 799, 799, 799,
  3683. 799, 799, 799, 799, 799, 799, 799, 799,
  3684. 799, 799, 799, 799, 799, 799, 799, 799,
  3685. 799, 799, 799, 799, 799, 799, 799, 799,
  3686. 799, 799, 799, 799, 799, 799, 799, 799,
  3687. 799, 799, 799, 799, 799, 799, 799, 799,
  3688. 799, 799, 799, 1, 799, 799, 799, 799,
  3689. 799, 799, 799, 799, 799, 799, 799, 799,
  3690. 799, 799, 799, 799, 1, 821, 1, 717,
  3691. 1, 1, 1, 1, 1, 1, 1, 1,
  3692. 1, 1, 1, 1, 1, 1, 1, 1,
  3693. 1, 1, 1, 1, 1, 1, 717, 1,
  3694. 735, 1, 1, 1, 773, 1, 1, 1,
  3695. 1, 1, 1, 1, 1, 1, 1, 1,
  3696. 1, 1, 1, 1, 1, 1, 1, 735,
  3697. 716, 717, 716, 716, 716, 716, 716, 775,
  3698. 1, 716, 716, 1, 716, 719, 716, 716,
  3699. 716, 716, 716, 716, 716, 716, 716, 716,
  3700. 716, 1, 1, 1, 716, 1, 716, 1,
  3701. 716, 716, 716, 716, 716, 716, 716, 716,
  3702. 716, 716, 716, 716, 716, 716, 716, 716,
  3703. 716, 716, 716, 716, 716, 716, 716, 716,
  3704. 716, 716, 1, 1, 1, 716, 716, 716,
  3705. 716, 716, 716, 716, 716, 716, 716, 716,
  3706. 716, 716, 716, 716, 716, 716, 716, 716,
  3707. 716, 716, 716, 716, 716, 716, 716, 716,
  3708. 716, 716, 716, 716, 716, 716, 1, 1,
  3709. 1, 1, 1, 1, 1, 1, 1, 1,
  3710. 1, 1, 1, 1, 1, 1, 1, 1,
  3711. 1, 1, 1, 1, 1, 1, 1, 1,
  3712. 1, 1, 1, 1, 1, 1, 1, 1,
  3713. 1, 1, 1, 1, 1, 1, 1, 1,
  3714. 1, 1, 1, 1, 1, 1, 1, 1,
  3715. 1, 1, 1, 1, 1, 1, 1, 1,
  3716. 1, 1, 1, 1, 1, 1, 1, 1,
  3717. 1, 721, 721, 721, 721, 721, 721, 721,
  3718. 721, 721, 721, 721, 721, 721, 721, 721,
  3719. 721, 721, 721, 721, 721, 721, 721, 721,
  3720. 721, 721, 721, 721, 721, 721, 721, 722,
  3721. 723, 723, 723, 723, 723, 723, 723, 723,
  3722. 723, 723, 723, 723, 724, 723, 723, 725,
  3723. 726, 726, 726, 727, 1, 716, 716, 716,
  3724. 716, 716, 716, 716, 716, 716, 716, 716,
  3725. 716, 716, 716, 716, 716, 716, 716, 716,
  3726. 716, 716, 716, 716, 716, 716, 716, 716,
  3727. 716, 716, 716, 716, 716, 716, 716, 716,
  3728. 716, 716, 716, 716, 716, 716, 716, 716,
  3729. 716, 716, 716, 716, 716, 716, 716, 716,
  3730. 716, 716, 716, 716, 716, 716, 716, 716,
  3731. 716, 716, 716, 716, 716, 1, 721, 721,
  3732. 721, 721, 721, 721, 721, 721, 721, 721,
  3733. 721, 721, 721, 721, 721, 721, 721, 721,
  3734. 721, 721, 721, 721, 721, 721, 721, 721,
  3735. 721, 721, 721, 721, 721, 721, 1, 721,
  3736. 721, 721, 721, 721, 721, 721, 721, 721,
  3737. 721, 721, 721, 721, 721, 721, 721, 721,
  3738. 721, 721, 721, 721, 721, 721, 721, 721,
  3739. 721, 721, 721, 721, 721, 721, 721, 721,
  3740. 721, 721, 721, 721, 721, 721, 721, 721,
  3741. 721, 721, 721, 721, 721, 721, 721, 721,
  3742. 721, 721, 721, 721, 721, 721, 721, 721,
  3743. 721, 721, 721, 721, 721, 721, 721, 1,
  3744. 721, 721, 721, 721, 721, 721, 721, 721,
  3745. 721, 721, 721, 721, 721, 721, 721, 721,
  3746. 721, 721, 721, 721, 721, 721, 721, 721,
  3747. 721, 721, 721, 721, 721, 721, 721, 721,
  3748. 1, 723, 723, 723, 723, 723, 723, 723,
  3749. 723, 723, 723, 723, 723, 723, 723, 723,
  3750. 723, 723, 723, 723, 723, 723, 723, 723,
  3751. 723, 723, 723, 723, 723, 723, 723, 723,
  3752. 723, 723, 723, 723, 723, 723, 723, 723,
  3753. 723, 723, 723, 723, 723, 723, 723, 723,
  3754. 723, 1, 723, 723, 723, 723, 723, 723,
  3755. 723, 723, 723, 723, 723, 723, 723, 723,
  3756. 723, 723, 723, 723, 723, 723, 723, 723,
  3757. 723, 723, 723, 723, 723, 723, 723, 723,
  3758. 723, 723, 723, 723, 723, 723, 723, 723,
  3759. 723, 723, 723, 723, 723, 723, 723, 723,
  3760. 723, 723, 723, 723, 723, 723, 723, 723,
  3761. 723, 723, 723, 723, 723, 723, 723, 723,
  3762. 723, 723, 1, 723, 723, 723, 723, 723,
  3763. 723, 723, 723, 723, 723, 723, 723, 723,
  3764. 723, 723, 723, 1, 822, 1, 1, 1,
  3765. 823, 1, 1, 1, 1, 1, 1, 1,
  3766. 1, 1, 1, 1, 1, 1, 1, 1,
  3767. 1, 1, 1, 822, 824, 825, 824, 824,
  3768. 824, 824, 824, 826, 1, 824, 824, 1,
  3769. 824, 827, 824, 824, 824, 824, 824, 824,
  3770. 824, 824, 824, 824, 824, 1, 1, 1,
  3771. 824, 1, 824, 1, 824, 824, 824, 824,
  3772. 824, 824, 824, 824, 824, 824, 824, 824,
  3773. 824, 824, 824, 824, 824, 824, 824, 824,
  3774. 824, 824, 824, 824, 824, 824, 828, 1,
  3775. 1, 824, 824, 824, 824, 824, 824, 824,
  3776. 824, 824, 824, 824, 824, 824, 824, 824,
  3777. 824, 824, 824, 824, 824, 824, 824, 824,
  3778. 824, 824, 824, 824, 824, 824, 824, 824,
  3779. 824, 824, 1, 1, 1, 1, 1, 1,
  3780. 1, 1, 1, 1, 1, 1, 1, 1,
  3781. 1, 1, 1, 1, 1, 1, 1, 1,
  3782. 1, 1, 1, 1, 1, 1, 1, 1,
  3783. 1, 1, 1, 1, 1, 1, 1, 1,
  3784. 1, 1, 1, 1, 1, 1, 1, 1,
  3785. 1, 1, 1, 1, 1, 1, 1, 1,
  3786. 1, 1, 1, 1, 1, 1, 1, 1,
  3787. 1, 1, 1, 1, 1, 829, 829, 829,
  3788. 829, 829, 829, 829, 829, 829, 829, 829,
  3789. 829, 829, 829, 829, 829, 829, 829, 829,
  3790. 829, 829, 829, 829, 829, 829, 829, 829,
  3791. 829, 829, 829, 830, 831, 831, 831, 831,
  3792. 831, 831, 831, 831, 831, 831, 831, 831,
  3793. 832, 831, 831, 833, 834, 834, 834, 835,
  3794. 1, 720, 720, 720, 720, 720, 720, 720,
  3795. 720, 720, 1, 720, 720, 836, 720, 720,
  3796. 720, 720, 720, 720, 720, 720, 720, 720,
  3797. 720, 720, 720, 720, 720, 720, 720, 720,
  3798. 720, 720, 720, 720, 720, 720, 720, 720,
  3799. 720, 720, 720, 720, 720, 720, 720, 720,
  3800. 720, 720, 720, 720, 720, 720, 720, 720,
  3801. 720, 720, 720, 720, 720, 720, 720, 720,
  3802. 720, 720, 720, 720, 720, 720, 720, 720,
  3803. 720, 720, 720, 720, 720, 720, 720, 720,
  3804. 720, 720, 720, 720, 720, 720, 720, 720,
  3805. 720, 720, 720, 1, 837, 807, 720, 720,
  3806. 720, 720, 720, 720, 720, 720, 720, 720,
  3807. 720, 720, 720, 720, 720, 720, 720, 720,
  3808. 720, 720, 720, 720, 720, 720, 720, 720,
  3809. 720, 720, 720, 720, 720, 720, 720, 720,
  3810. 1, 1, 1, 1, 1, 1, 1, 1,
  3811. 1, 1, 1, 1, 1, 1, 1, 1,
  3812. 1, 1, 1, 1, 1, 1, 1, 1,
  3813. 1, 1, 1, 1, 1, 1, 1, 1,
  3814. 1, 1, 1, 1, 1, 1, 1, 1,
  3815. 1, 1, 1, 1, 1, 1, 1, 1,
  3816. 1, 1, 1, 1, 1, 1, 1, 1,
  3817. 1, 1, 1, 1, 1, 1, 1, 1,
  3818. 1, 1, 838, 838, 838, 838, 838, 838,
  3819. 838, 838, 838, 838, 838, 838, 838, 838,
  3820. 838, 838, 838, 838, 838, 838, 838, 838,
  3821. 838, 838, 838, 838, 838, 838, 838, 838,
  3822. 839, 840, 840, 840, 840, 840, 840, 840,
  3823. 840, 840, 840, 840, 840, 841, 840, 840,
  3824. 842, 843, 843, 843, 844, 1, 845, 1,
  3825. 720, 1, 1, 1, 1, 1, 1, 1,
  3826. 1, 1, 1, 1, 1, 1, 1, 1,
  3827. 1, 1, 1, 1, 1, 1, 1, 720,
  3828. 1, 720, 720, 720, 720, 720, 720, 720,
  3829. 720, 720, 720, 720, 720, 720, 720, 720,
  3830. 720, 720, 720, 720, 720, 720, 720, 720,
  3831. 720, 720, 720, 720, 720, 720, 720, 720,
  3832. 720, 720, 720, 720, 720, 720, 720, 720,
  3833. 720, 720, 720, 720, 720, 720, 720, 720,
  3834. 720, 720, 720, 720, 720, 720, 720, 720,
  3835. 720, 720, 720, 720, 720, 720, 720, 720,
  3836. 720, 720, 720, 720, 720, 720, 720, 720,
  3837. 720, 720, 720, 720, 720, 720, 720, 720,
  3838. 720, 720, 720, 720, 720, 720, 720, 720,
  3839. 720, 720, 720, 720, 720, 720, 720, 720,
  3840. 720, 720, 720, 720, 720, 720, 720, 720,
  3841. 720, 720, 720, 720, 720, 720, 720, 720,
  3842. 720, 720, 720, 720, 720, 720, 720, 720,
  3843. 720, 720, 720, 720, 720, 720, 720, 720,
  3844. 720, 1, 1, 1, 1, 1, 1, 1,
  3845. 1, 1, 1, 1, 1, 1, 1, 1,
  3846. 1, 1, 1, 1, 1, 1, 1, 1,
  3847. 1, 1, 1, 1, 1, 1, 1, 1,
  3848. 1, 1, 1, 1, 1, 1, 1, 1,
  3849. 1, 1, 1, 1, 1, 1, 1, 1,
  3850. 1, 1, 1, 1, 1, 1, 1, 1,
  3851. 1, 1, 1, 1, 1, 1, 1, 1,
  3852. 1, 1, 1, 838, 838, 838, 838, 838,
  3853. 838, 838, 838, 838, 838, 838, 838, 838,
  3854. 838, 838, 838, 838, 838, 838, 838, 838,
  3855. 838, 838, 838, 838, 838, 838, 838, 838,
  3856. 838, 839, 840, 840, 840, 840, 840, 840,
  3857. 840, 840, 840, 840, 840, 840, 841, 840,
  3858. 840, 842, 843, 843, 843, 844, 1, 720,
  3859. 720, 720, 720, 720, 720, 720, 720, 720,
  3860. 720, 720, 720, 720, 720, 720, 720, 720,
  3861. 720, 720, 720, 720, 720, 720, 720, 720,
  3862. 720, 720, 720, 720, 720, 720, 720, 720,
  3863. 720, 720, 720, 720, 720, 720, 720, 720,
  3864. 720, 720, 720, 720, 720, 720, 720, 720,
  3865. 720, 720, 720, 720, 720, 720, 720, 720,
  3866. 720, 720, 720, 720, 720, 720, 720, 1,
  3867. 838, 838, 838, 838, 838, 838, 838, 838,
  3868. 838, 838, 838, 838, 838, 838, 838, 838,
  3869. 838, 838, 838, 838, 838, 838, 838, 838,
  3870. 838, 838, 838, 838, 838, 838, 838, 838,
  3871. 1, 838, 838, 838, 838, 838, 838, 838,
  3872. 838, 838, 838, 838, 838, 838, 838, 838,
  3873. 838, 838, 838, 838, 838, 838, 838, 838,
  3874. 838, 838, 838, 838, 838, 838, 838, 838,
  3875. 838, 838, 838, 838, 838, 838, 838, 838,
  3876. 838, 838, 838, 838, 838, 838, 838, 838,
  3877. 838, 838, 838, 838, 838, 838, 838, 838,
  3878. 838, 838, 838, 838, 838, 838, 838, 838,
  3879. 838, 1, 838, 838, 838, 838, 838, 838,
  3880. 838, 838, 838, 838, 838, 838, 838, 838,
  3881. 838, 838, 838, 838, 838, 838, 838, 838,
  3882. 838, 838, 838, 838, 838, 838, 838, 838,
  3883. 838, 838, 1, 840, 840, 840, 840, 840,
  3884. 840, 840, 840, 840, 840, 840, 840, 840,
  3885. 840, 840, 840, 840, 840, 840, 840, 840,
  3886. 840, 840, 840, 840, 840, 840, 840, 840,
  3887. 840, 840, 840, 840, 840, 840, 840, 840,
  3888. 840, 840, 840, 840, 840, 840, 840, 840,
  3889. 840, 840, 840, 1, 840, 840, 840, 840,
  3890. 840, 840, 840, 840, 840, 840, 840, 840,
  3891. 840, 840, 840, 840, 840, 840, 840, 840,
  3892. 840, 840, 840, 840, 840, 840, 840, 840,
  3893. 840, 840, 840, 840, 840, 840, 840, 840,
  3894. 840, 840, 840, 840, 840, 840, 840, 840,
  3895. 840, 840, 840, 840, 840, 840, 840, 840,
  3896. 840, 840, 840, 840, 840, 840, 840, 840,
  3897. 840, 840, 840, 840, 1, 840, 840, 840,
  3898. 840, 840, 840, 840, 840, 840, 840, 840,
  3899. 840, 840, 840, 840, 840, 1, 846, 1,
  3900. 1, 1, 847, 1, 1, 1, 1, 1,
  3901. 1, 1, 1, 1, 1, 1, 1, 1,
  3902. 1, 1, 1, 1, 1, 846, 848, 849,
  3903. 848, 848, 848, 848, 848, 850, 1, 848,
  3904. 848, 1, 848, 851, 848, 848, 848, 848,
  3905. 848, 848, 848, 848, 848, 848, 848, 1,
  3906. 1, 1, 848, 1, 848, 1, 848, 848,
  3907. 848, 848, 848, 848, 848, 848, 848, 848,
  3908. 848, 848, 848, 848, 848, 848, 848, 848,
  3909. 848, 848, 848, 848, 848, 848, 848, 848,
  3910. 25, 1, 1, 848, 848, 848, 848, 848,
  3911. 848, 848, 848, 848, 848, 848, 848, 848,
  3912. 848, 848, 848, 848, 848, 848, 848, 848,
  3913. 848, 848, 848, 848, 848, 848, 848, 848,
  3914. 848, 848, 848, 848, 1, 1, 1, 1,
  3915. 1, 1, 1, 1, 1, 1, 1, 1,
  3916. 1, 1, 1, 1, 1, 1, 1, 1,
  3917. 1, 1, 1, 1, 1, 1, 1, 1,
  3918. 1, 1, 1, 1, 1, 1, 1, 1,
  3919. 1, 1, 1, 1, 1, 1, 1, 1,
  3920. 1, 1, 1, 1, 1, 1, 1, 1,
  3921. 1, 1, 1, 1, 1, 1, 1, 1,
  3922. 1, 1, 1, 1, 1, 1, 1, 852,
  3923. 852, 852, 852, 852, 852, 852, 852, 852,
  3924. 852, 852, 852, 852, 852, 852, 852, 852,
  3925. 852, 852, 852, 852, 852, 852, 852, 852,
  3926. 852, 852, 852, 852, 852, 853, 854, 854,
  3927. 854, 854, 854, 854, 854, 854, 854, 854,
  3928. 854, 854, 855, 854, 854, 856, 857, 857,
  3929. 857, 858, 1, 859, 1, 1, 1, 860,
  3930. 1, 1, 1, 1, 1, 1, 1, 1,
  3931. 1, 1, 1, 1, 1, 1, 1, 1,
  3932. 1, 1, 859, 861, 862, 861, 861, 861,
  3933. 861, 861, 863, 1, 861, 861, 1, 861,
  3934. 864, 861, 861, 861, 861, 861, 861, 861,
  3935. 861, 861, 861, 861, 1, 1, 1, 861,
  3936. 1, 861, 1, 861, 861, 861, 861, 861,
  3937. 861, 861, 861, 861, 861, 861, 861, 861,
  3938. 861, 861, 861, 861, 861, 861, 861, 861,
  3939. 861, 861, 861, 861, 861, 865, 1, 1,
  3940. 861, 861, 861, 861, 861, 861, 861, 861,
  3941. 861, 861, 861, 861, 861, 861, 861, 861,
  3942. 861, 861, 861, 861, 861, 861, 861, 861,
  3943. 861, 861, 861, 861, 861, 861, 861, 861,
  3944. 861, 1, 1, 1, 1, 1, 1, 1,
  3945. 1, 1, 1, 1, 1, 1, 1, 1,
  3946. 1, 1, 1, 1, 1, 1, 1, 1,
  3947. 1, 1, 1, 1, 1, 1, 1, 1,
  3948. 1, 1, 1, 1, 1, 1, 1, 1,
  3949. 1, 1, 1, 1, 1, 1, 1, 1,
  3950. 1, 1, 1, 1, 1, 1, 1, 1,
  3951. 1, 1, 1, 1, 1, 1, 1, 1,
  3952. 1, 1, 1, 1, 866, 866, 866, 866,
  3953. 866, 866, 866, 866, 866, 866, 866, 866,
  3954. 866, 866, 866, 866, 866, 866, 866, 866,
  3955. 866, 866, 866, 866, 866, 866, 866, 866,
  3956. 866, 866, 867, 868, 868, 868, 868, 868,
  3957. 868, 868, 868, 868, 868, 868, 868, 869,
  3958. 868, 868, 870, 871, 871, 871, 872, 1,
  3959. 873, 1, 859, 1, 1, 1, 1, 1,
  3960. 1, 1, 1, 1, 1, 1, 1, 1,
  3961. 1, 1, 1, 1, 1, 1, 1, 1,
  3962. 1, 859, 1, 874, 1, 1, 1, 875,
  3963. 1, 1, 1, 1, 1, 1, 1, 1,
  3964. 1, 1, 1, 1, 1, 1, 1, 1,
  3965. 1, 1, 874, 876, 877, 876, 876, 876,
  3966. 876, 876, 878, 1, 876, 876, 1, 876,
  3967. 879, 876, 876, 876, 876, 876, 876, 876,
  3968. 876, 876, 876, 876, 1, 880, 881, 876,
  3969. 1, 876, 1, 876, 876, 876, 876, 876,
  3970. 876, 876, 876, 876, 876, 876, 876, 876,
  3971. 876, 876, 876, 876, 876, 876, 876, 876,
  3972. 876, 876, 876, 876, 876, 882, 1, 1,
  3973. 876, 876, 876, 876, 876, 876, 876, 876,
  3974. 876, 876, 876, 876, 876, 876, 876, 876,
  3975. 876, 876, 876, 876, 876, 876, 876, 876,
  3976. 876, 876, 876, 876, 876, 876, 876, 876,
  3977. 876, 1, 1, 1, 1, 1, 1, 1,
  3978. 1, 1, 1, 1, 1, 1, 1, 1,
  3979. 1, 1, 1, 1, 1, 1, 1, 1,
  3980. 1, 1, 1, 1, 1, 1, 1, 1,
  3981. 1, 1, 1, 1, 1, 1, 1, 1,
  3982. 1, 1, 1, 1, 1, 1, 1, 1,
  3983. 1, 1, 1, 1, 1, 1, 1, 1,
  3984. 1, 1, 1, 1, 1, 1, 1, 1,
  3985. 1, 1, 1, 1, 883, 883, 883, 883,
  3986. 883, 883, 883, 883, 883, 883, 883, 883,
  3987. 883, 883, 883, 883, 883, 883, 883, 883,
  3988. 883, 883, 883, 883, 883, 883, 883, 883,
  3989. 883, 883, 884, 885, 885, 885, 885, 885,
  3990. 885, 885, 885, 885, 885, 885, 885, 886,
  3991. 885, 885, 887, 888, 888, 888, 889, 1,
  3992. 874, 1, 1, 1, 875, 1, 1, 1,
  3993. 1, 1, 1, 1, 1, 1, 1, 1,
  3994. 1, 1, 1, 1, 1, 1, 1, 874,
  3995. 890, 891, 890, 890, 890, 890, 890, 878,
  3996. 1, 890, 890, 1, 890, 892, 890, 890,
  3997. 890, 890, 890, 890, 890, 890, 890, 890,
  3998. 890, 1, 880, 893, 890, 1, 890, 1,
  3999. 890, 890, 890, 890, 890, 890, 890, 890,
  4000. 890, 890, 890, 890, 890, 890, 890, 890,
  4001. 890, 890, 890, 890, 890, 890, 890, 890,
  4002. 890, 890, 882, 1, 1, 890, 890, 890,
  4003. 890, 890, 890, 890, 890, 890, 890, 890,
  4004. 890, 890, 890, 890, 890, 890, 890, 890,
  4005. 890, 890, 890, 890, 890, 890, 890, 890,
  4006. 890, 890, 890, 890, 890, 890, 1, 1,
  4007. 1, 1, 1, 1, 1, 1, 1, 1,
  4008. 1, 1, 1, 1, 1, 1, 1, 1,
  4009. 1, 1, 1, 1, 1, 1, 1, 1,
  4010. 1, 1, 1, 1, 1, 1, 1, 1,
  4011. 1, 1, 1, 1, 1, 1, 1, 1,
  4012. 1, 1, 1, 1, 1, 1, 1, 1,
  4013. 1, 1, 1, 1, 1, 1, 1, 1,
  4014. 1, 1, 1, 1, 1, 1, 1, 1,
  4015. 1, 894, 894, 894, 894, 894, 894, 894,
  4016. 894, 894, 894, 894, 894, 894, 894, 894,
  4017. 894, 894, 894, 894, 894, 894, 894, 894,
  4018. 894, 894, 894, 894, 894, 894, 894, 895,
  4019. 896, 896, 896, 896, 896, 896, 896, 896,
  4020. 896, 896, 896, 896, 897, 896, 896, 898,
  4021. 899, 899, 899, 900, 1, 901, 1, 902,
  4022. 1, 1, 1, 1, 1, 1, 1, 1,
  4023. 1, 1, 1, 1, 1, 1, 1, 1,
  4024. 1, 1, 1, 1, 1, 1, 902, 1,
  4025. 903, 1, 1, 1, 904, 1, 1, 1,
  4026. 1, 1, 1, 1, 1, 1, 1, 1,
  4027. 1, 1, 1, 1, 1, 1, 1, 903,
  4028. 905, 906, 905, 905, 905, 905, 905, 907,
  4029. 1, 905, 905, 1, 905, 908, 905, 905,
  4030. 905, 905, 905, 905, 905, 905, 905, 905,
  4031. 905, 1, 909, 910, 905, 1, 905, 1,
  4032. 905, 905, 905, 905, 905, 905, 905, 905,
  4033. 905, 905, 905, 905, 905, 905, 905, 905,
  4034. 905, 905, 905, 905, 905, 905, 905, 905,
  4035. 905, 905, 911, 1, 1, 905, 905, 905,
  4036. 905, 905, 905, 905, 905, 905, 905, 905,
  4037. 905, 905, 905, 905, 905, 905, 905, 905,
  4038. 905, 905, 905, 905, 905, 905, 905, 905,
  4039. 905, 905, 905, 905, 905, 905, 1, 1,
  4040. 1, 1, 1, 1, 1, 1, 1, 1,
  4041. 1, 1, 1, 1, 1, 1, 1, 1,
  4042. 1, 1, 1, 1, 1, 1, 1, 1,
  4043. 1, 1, 1, 1, 1, 1, 1, 1,
  4044. 1, 1, 1, 1, 1, 1, 1, 1,
  4045. 1, 1, 1, 1, 1, 1, 1, 1,
  4046. 1, 1, 1, 1, 1, 1, 1, 1,
  4047. 1, 1, 1, 1, 1, 1, 1, 1,
  4048. 1, 912, 912, 912, 912, 912, 912, 912,
  4049. 912, 912, 912, 912, 912, 912, 912, 912,
  4050. 912, 912, 912, 912, 912, 912, 912, 912,
  4051. 912, 912, 912, 912, 912, 912, 912, 913,
  4052. 914, 914, 914, 914, 914, 914, 914, 914,
  4053. 914, 914, 914, 914, 915, 914, 914, 916,
  4054. 917, 917, 917, 918, 1, 919, 1, 1,
  4055. 1, 920, 1, 1, 1, 1, 1, 1,
  4056. 1, 1, 1, 1, 1, 1, 1, 1,
  4057. 1, 1, 1, 1, 919, 921, 922, 921,
  4058. 921, 921, 921, 921, 923, 1, 921, 921,
  4059. 1, 921, 153, 921, 921, 921, 921, 921,
  4060. 921, 921, 921, 921, 921, 921, 1, 1,
  4061. 1, 921, 1, 921, 1, 921, 921, 921,
  4062. 921, 921, 921, 921, 921, 921, 921, 921,
  4063. 921, 921, 921, 921, 921, 921, 921, 921,
  4064. 921, 921, 921, 921, 921, 921, 921, 1,
  4065. 1, 1, 921, 921, 921, 921, 921, 921,
  4066. 921, 921, 921, 921, 921, 921, 921, 921,
  4067. 921, 921, 921, 921, 921, 921, 921, 921,
  4068. 921, 921, 921, 921, 921, 921, 921, 921,
  4069. 921, 921, 921, 1, 1, 1, 1, 1,
  4070. 1, 1, 1, 1, 1, 1, 1, 1,
  4071. 1, 1, 1, 1, 1, 1, 1, 1,
  4072. 1, 1, 1, 1, 1, 1, 1, 1,
  4073. 1, 1, 1, 1, 1, 1, 1, 1,
  4074. 1, 1, 1, 1, 1, 1, 1, 1,
  4075. 1, 1, 1, 1, 1, 1, 1, 1,
  4076. 1, 1, 1, 1, 1, 1, 1, 1,
  4077. 1, 1, 1, 1, 1, 1, 924, 924,
  4078. 924, 924, 924, 924, 924, 924, 924, 924,
  4079. 924, 924, 924, 924, 924, 924, 924, 924,
  4080. 924, 924, 924, 924, 924, 924, 924, 924,
  4081. 924, 924, 924, 924, 925, 926, 926, 926,
  4082. 926, 926, 926, 926, 926, 926, 926, 926,
  4083. 926, 927, 926, 926, 928, 929, 929, 929,
  4084. 930, 1, 919, 1, 1, 1, 920, 1,
  4085. 1, 1, 1, 1, 1, 1, 1, 1,
  4086. 1, 1, 1, 1, 1, 1, 1, 1,
  4087. 1, 919, 931, 1, 931, 931, 931, 931,
  4088. 931, 923, 1, 931, 931, 1, 931, 1,
  4089. 931, 931, 931, 931, 931, 931, 931, 931,
  4090. 931, 931, 931, 1, 1, 1, 931, 1,
  4091. 931, 1, 931, 931, 931, 931, 931, 931,
  4092. 931, 931, 931, 931, 931, 931, 931, 931,
  4093. 931, 931, 931, 931, 931, 931, 931, 931,
  4094. 931, 931, 931, 931, 1, 1, 1, 931,
  4095. 931, 931, 931, 931, 931, 931, 931, 931,
  4096. 931, 931, 931, 931, 931, 931, 931, 931,
  4097. 931, 931, 931, 931, 931, 931, 931, 931,
  4098. 931, 931, 931, 931, 931, 931, 931, 931,
  4099. 1, 1, 1, 1, 1, 1, 1, 1,
  4100. 1, 1, 1, 1, 1, 1, 1, 1,
  4101. 1, 1, 1, 1, 1, 1, 1, 1,
  4102. 1, 1, 1, 1, 1, 1, 1, 1,
  4103. 1, 1, 1, 1, 1, 1, 1, 1,
  4104. 1, 1, 1, 1, 1, 1, 1, 1,
  4105. 1, 1, 1, 1, 1, 1, 1, 1,
  4106. 1, 1, 1, 1, 1, 1, 1, 1,
  4107. 1, 1, 1, 932, 932, 932, 932, 932,
  4108. 932, 932, 932, 932, 932, 932, 932, 932,
  4109. 932, 932, 932, 932, 932, 932, 932, 932,
  4110. 932, 932, 932, 932, 932, 932, 932, 932,
  4111. 932, 933, 934, 934, 934, 934, 934, 934,
  4112. 934, 934, 934, 934, 934, 934, 935, 934,
  4113. 934, 936, 937, 937, 937, 938, 1, 939,
  4114. 1, 919, 1, 1, 1, 1, 1, 1,
  4115. 1, 1, 1, 1, 1, 1, 1, 1,
  4116. 1, 1, 1, 1, 1, 1, 1, 1,
  4117. 919, 1, 874, 1, 1, 1, 875, 1,
  4118. 1, 1, 1, 1, 1, 1, 1, 1,
  4119. 1, 1, 1, 1, 1, 1, 1, 1,
  4120. 1, 874, 940, 941, 940, 940, 940, 940,
  4121. 940, 878, 1, 940, 940, 1, 940, 942,
  4122. 940, 940, 940, 940, 940, 940, 940, 940,
  4123. 940, 940, 940, 1, 880, 881, 940, 1,
  4124. 940, 1, 940, 940, 940, 940, 940, 940,
  4125. 940, 940, 940, 940, 940, 940, 940, 940,
  4126. 940, 940, 940, 940, 940, 940, 940, 940,
  4127. 940, 940, 940, 940, 882, 1, 1, 940,
  4128. 940, 940, 940, 940, 940, 940, 940, 940,
  4129. 940, 940, 940, 940, 940, 940, 940, 940,
  4130. 940, 940, 940, 940, 940, 940, 940, 940,
  4131. 940, 940, 940, 940, 940, 940, 940, 940,
  4132. 1, 1, 1, 1, 1, 1, 1, 1,
  4133. 1, 1, 1, 1, 1, 1, 1, 1,
  4134. 1, 1, 1, 1, 1, 1, 1, 1,
  4135. 1, 1, 1, 1, 1, 1, 1, 1,
  4136. 1, 1, 1, 1, 1, 1, 1, 1,
  4137. 1, 1, 1, 1, 1, 1, 1, 1,
  4138. 1, 1, 1, 1, 1, 1, 1, 1,
  4139. 1, 1, 1, 1, 1, 1, 1, 1,
  4140. 1, 1, 1, 943, 943, 943, 943, 943,
  4141. 943, 943, 943, 943, 943, 943, 943, 943,
  4142. 943, 943, 943, 943, 943, 943, 943, 943,
  4143. 943, 943, 943, 943, 943, 943, 943, 943,
  4144. 943, 944, 945, 945, 945, 945, 945, 945,
  4145. 945, 945, 945, 945, 945, 945, 946, 945,
  4146. 945, 947, 948, 948, 948, 949, 1, 874,
  4147. 1, 1, 1, 875, 1, 1, 1, 1,
  4148. 1, 1, 1, 1, 1, 1, 1, 1,
  4149. 1, 1, 1, 1, 1, 1, 874, 940,
  4150. 941, 940, 940, 940, 940, 940, 878, 1,
  4151. 940, 940, 1, 940, 942, 940, 940, 940,
  4152. 940, 940, 940, 940, 940, 940, 940, 940,
  4153. 1, 950, 881, 940, 1, 940, 43, 940,
  4154. 940, 940, 940, 940, 940, 940, 940, 940,
  4155. 940, 940, 940, 940, 940, 940, 940, 940,
  4156. 940, 940, 940, 940, 940, 940, 940, 940,
  4157. 940, 882, 1, 1, 940, 940, 940, 940,
  4158. 940, 940, 940, 940, 940, 940, 940, 940,
  4159. 940, 940, 940, 940, 940, 940, 940, 940,
  4160. 940, 940, 940, 940, 940, 940, 940, 940,
  4161. 940, 940, 940, 940, 940, 1, 1, 1,
  4162. 1, 1, 1, 1, 1, 1, 1, 1,
  4163. 1, 1, 1, 1, 1, 1, 1, 1,
  4164. 1, 1, 1, 1, 1, 1, 1, 1,
  4165. 1, 1, 1, 1, 1, 1, 1, 1,
  4166. 1, 1, 1, 1, 1, 1, 1, 1,
  4167. 1, 1, 1, 1, 1, 1, 1, 1,
  4168. 1, 1, 1, 1, 1, 1, 1, 1,
  4169. 1, 1, 1, 1, 1, 1, 1, 1,
  4170. 943, 943, 943, 943, 943, 943, 943, 943,
  4171. 943, 943, 943, 943, 943, 943, 943, 943,
  4172. 943, 943, 943, 943, 943, 943, 943, 943,
  4173. 943, 943, 943, 943, 943, 943, 944, 945,
  4174. 945, 945, 945, 945, 945, 945, 945, 945,
  4175. 945, 945, 945, 946, 945, 945, 947, 948,
  4176. 948, 948, 949, 1, 865, 865, 865, 865,
  4177. 865, 865, 865, 865, 865, 1, 865, 865,
  4178. 951, 865, 865, 865, 865, 865, 865, 865,
  4179. 865, 865, 865, 865, 865, 865, 865, 865,
  4180. 865, 865, 865, 865, 865, 865, 865, 865,
  4181. 865, 865, 865, 865, 865, 865, 865, 865,
  4182. 865, 865, 865, 865, 865, 865, 865, 865,
  4183. 865, 865, 865, 865, 865, 865, 865, 865,
  4184. 865, 865, 865, 865, 865, 865, 865, 865,
  4185. 865, 865, 865, 865, 865, 865, 865, 865,
  4186. 865, 865, 865, 865, 865, 865, 865, 865,
  4187. 865, 865, 865, 865, 865, 865, 1, 952,
  4188. 953, 865, 865, 865, 865, 865, 865, 865,
  4189. 865, 865, 865, 865, 865, 865, 865, 865,
  4190. 865, 865, 865, 865, 865, 865, 865, 865,
  4191. 865, 865, 865, 865, 865, 865, 865, 865,
  4192. 865, 865, 865, 1, 1, 1, 1, 1,
  4193. 1, 1, 1, 1, 1, 1, 1, 1,
  4194. 1, 1, 1, 1, 1, 1, 1, 1,
  4195. 1, 1, 1, 1, 1, 1, 1, 1,
  4196. 1, 1, 1, 1, 1, 1, 1, 1,
  4197. 1, 1, 1, 1, 1, 1, 1, 1,
  4198. 1, 1, 1, 1, 1, 1, 1, 1,
  4199. 1, 1, 1, 1, 1, 1, 1, 1,
  4200. 1, 1, 1, 1, 1, 954, 954, 954,
  4201. 954, 954, 954, 954, 954, 954, 954, 954,
  4202. 954, 954, 954, 954, 954, 954, 954, 954,
  4203. 954, 954, 954, 954, 954, 954, 954, 954,
  4204. 954, 954, 954, 955, 956, 956, 956, 956,
  4205. 956, 956, 956, 956, 956, 956, 956, 956,
  4206. 957, 956, 956, 958, 959, 959, 959, 960,
  4207. 1, 961, 1, 865, 1, 1, 1, 1,
  4208. 1, 1, 1, 1, 1, 1, 1, 1,
  4209. 1, 1, 1, 1, 1, 1, 1, 1,
  4210. 1, 1, 865, 1, 865, 865, 865, 865,
  4211. 865, 865, 865, 865, 865, 865, 865, 865,
  4212. 865, 865, 865, 865, 865, 865, 865, 865,
  4213. 865, 865, 865, 865, 865, 865, 865, 865,
  4214. 865, 865, 865, 865, 865, 865, 865, 865,
  4215. 865, 865, 865, 865, 865, 865, 865, 865,
  4216. 865, 865, 865, 865, 865, 865, 865, 865,
  4217. 865, 865, 865, 865, 865, 865, 865, 865,
  4218. 865, 865, 865, 865, 865, 865, 865, 865,
  4219. 865, 865, 865, 865, 865, 865, 865, 865,
  4220. 865, 865, 865, 865, 865, 865, 865, 865,
  4221. 865, 865, 865, 865, 865, 865, 865, 865,
  4222. 865, 865, 865, 865, 865, 865, 865, 865,
  4223. 865, 865, 865, 865, 865, 865, 865, 865,
  4224. 865, 865, 865, 865, 865, 865, 865, 865,
  4225. 865, 865, 865, 865, 865, 865, 865, 865,
  4226. 865, 865, 865, 865, 1, 1, 1, 1,
  4227. 1, 1, 1, 1, 1, 1, 1, 1,
  4228. 1, 1, 1, 1, 1, 1, 1, 1,
  4229. 1, 1, 1, 1, 1, 1, 1, 1,
  4230. 1, 1, 1, 1, 1, 1, 1, 1,
  4231. 1, 1, 1, 1, 1, 1, 1, 1,
  4232. 1, 1, 1, 1, 1, 1, 1, 1,
  4233. 1, 1, 1, 1, 1, 1, 1, 1,
  4234. 1, 1, 1, 1, 1, 1, 954, 954,
  4235. 954, 954, 954, 954, 954, 954, 954, 954,
  4236. 954, 954, 954, 954, 954, 954, 954, 954,
  4237. 954, 954, 954, 954, 954, 954, 954, 954,
  4238. 954, 954, 954, 954, 955, 956, 956, 956,
  4239. 956, 956, 956, 956, 956, 956, 956, 956,
  4240. 956, 957, 956, 956, 958, 959, 959, 959,
  4241. 960, 1, 865, 865, 865, 865, 865, 865,
  4242. 865, 865, 865, 865, 865, 865, 865, 865,
  4243. 865, 865, 865, 865, 865, 865, 865, 865,
  4244. 865, 865, 865, 865, 865, 865, 865, 865,
  4245. 865, 865, 865, 865, 865, 865, 865, 865,
  4246. 865, 865, 865, 865, 865, 865, 865, 865,
  4247. 865, 865, 865, 865, 865, 865, 865, 865,
  4248. 865, 865, 865, 865, 865, 865, 865, 865,
  4249. 865, 865, 1, 954, 954, 954, 954, 954,
  4250. 954, 954, 954, 954, 954, 954, 954, 954,
  4251. 954, 954, 954, 954, 954, 954, 954, 954,
  4252. 954, 954, 954, 954, 954, 954, 954, 954,
  4253. 954, 954, 954, 1, 954, 954, 954, 954,
  4254. 954, 954, 954, 954, 954, 954, 954, 954,
  4255. 954, 954, 954, 954, 954, 954, 954, 954,
  4256. 954, 954, 954, 954, 954, 954, 954, 954,
  4257. 954, 954, 954, 954, 954, 954, 954, 954,
  4258. 954, 954, 954, 954, 954, 954, 954, 954,
  4259. 954, 954, 954, 954, 954, 954, 954, 954,
  4260. 954, 954, 954, 954, 954, 954, 954, 954,
  4261. 954, 954, 954, 954, 1, 954, 954, 954,
  4262. 954, 954, 954, 954, 954, 954, 954, 954,
  4263. 954, 954, 954, 954, 954, 954, 954, 954,
  4264. 954, 954, 954, 954, 954, 954, 954, 954,
  4265. 954, 954, 954, 954, 954, 1, 956, 956,
  4266. 956, 956, 956, 956, 956, 956, 956, 956,
  4267. 956, 956, 956, 956, 956, 956, 956, 956,
  4268. 956, 956, 956, 956, 956, 956, 956, 956,
  4269. 956, 956, 956, 956, 956, 956, 956, 956,
  4270. 956, 956, 956, 956, 956, 956, 956, 956,
  4271. 956, 956, 956, 956, 956, 956, 1, 956,
  4272. 956, 956, 956, 956, 956, 956, 956, 956,
  4273. 956, 956, 956, 956, 956, 956, 956, 956,
  4274. 956, 956, 956, 956, 956, 956, 956, 956,
  4275. 956, 956, 956, 956, 956, 956, 956, 956,
  4276. 956, 956, 956, 956, 956, 956, 956, 956,
  4277. 956, 956, 956, 956, 956, 956, 956, 956,
  4278. 956, 956, 956, 956, 956, 956, 956, 956,
  4279. 956, 956, 956, 956, 956, 956, 956, 1,
  4280. 956, 956, 956, 956, 956, 956, 956, 956,
  4281. 956, 956, 956, 956, 956, 956, 956, 956,
  4282. 1, 962, 1, 1, 1, 963, 1, 1,
  4283. 1, 1, 1, 1, 1, 1, 1, 1,
  4284. 1, 1, 1, 1, 1, 1, 1, 1,
  4285. 962, 964, 941, 964, 964, 964, 964, 964,
  4286. 965, 1, 964, 964, 1, 964, 966, 964,
  4287. 964, 964, 964, 964, 964, 964, 964, 964,
  4288. 964, 964, 1, 880, 881, 964, 1, 964,
  4289. 1, 964, 964, 964, 964, 964, 964, 964,
  4290. 964, 964, 964, 964, 964, 964, 964, 964,
  4291. 964, 964, 964, 964, 964, 964, 964, 964,
  4292. 964, 964, 964, 882, 1, 1, 964, 964,
  4293. 964, 964, 964, 964, 964, 964, 964, 964,
  4294. 964, 964, 964, 964, 964, 964, 964, 964,
  4295. 964, 964, 964, 964, 964, 964, 964, 964,
  4296. 964, 964, 964, 964, 964, 964, 964, 1,
  4297. 1, 1, 1, 1, 1, 1, 1, 1,
  4298. 1, 1, 1, 1, 1, 1, 1, 1,
  4299. 1, 1, 1, 1, 1, 1, 1, 1,
  4300. 1, 1, 1, 1, 1, 1, 1, 1,
  4301. 1, 1, 1, 1, 1, 1, 1, 1,
  4302. 1, 1, 1, 1, 1, 1, 1, 1,
  4303. 1, 1, 1, 1, 1, 1, 1, 1,
  4304. 1, 1, 1, 1, 1, 1, 1, 1,
  4305. 1, 1, 967, 967, 967, 967, 967, 967,
  4306. 967, 967, 967, 967, 967, 967, 967, 967,
  4307. 967, 967, 967, 967, 967, 967, 967, 967,
  4308. 967, 967, 967, 967, 967, 967, 967, 967,
  4309. 968, 969, 969, 969, 969, 969, 969, 969,
  4310. 969, 969, 969, 969, 969, 970, 969, 969,
  4311. 971, 972, 972, 972, 973, 1, 962, 1,
  4312. 1, 1, 963, 1, 1, 1, 1, 1,
  4313. 1, 1, 1, 1, 1, 1, 1, 1,
  4314. 1, 1, 1, 1, 1, 962, 890, 891,
  4315. 890, 890, 890, 890, 890, 965, 1, 890,
  4316. 890, 1, 890, 974, 890, 890, 890, 890,
  4317. 890, 890, 890, 890, 890, 890, 890, 1,
  4318. 880, 893, 890, 1, 890, 1, 890, 890,
  4319. 890, 890, 890, 890, 890, 890, 890, 890,
  4320. 890, 890, 890, 890, 890, 890, 890, 890,
  4321. 890, 890, 890, 890, 890, 890, 890, 890,
  4322. 882, 1, 1, 890, 890, 890, 890, 890,
  4323. 890, 890, 890, 890, 890, 890, 890, 890,
  4324. 890, 890, 890, 890, 890, 890, 890, 890,
  4325. 890, 890, 890, 890, 890, 890, 890, 890,
  4326. 890, 890, 890, 890, 1, 1, 1, 1,
  4327. 1, 1, 1, 1, 1, 1, 1, 1,
  4328. 1, 1, 1, 1, 1, 1, 1, 1,
  4329. 1, 1, 1, 1, 1, 1, 1, 1,
  4330. 1, 1, 1, 1, 1, 1, 1, 1,
  4331. 1, 1, 1, 1, 1, 1, 1, 1,
  4332. 1, 1, 1, 1, 1, 1, 1, 1,
  4333. 1, 1, 1, 1, 1, 1, 1, 1,
  4334. 1, 1, 1, 1, 1, 1, 1, 894,
  4335. 894, 894, 894, 894, 894, 894, 894, 894,
  4336. 894, 894, 894, 894, 894, 894, 894, 894,
  4337. 894, 894, 894, 894, 894, 894, 894, 894,
  4338. 894, 894, 894, 894, 894, 895, 896, 896,
  4339. 896, 896, 896, 896, 896, 896, 896, 896,
  4340. 896, 896, 897, 896, 896, 898, 899, 899,
  4341. 899, 900, 1, 975, 1, 976, 1, 1,
  4342. 1, 1, 1, 1, 1, 1, 1, 1,
  4343. 1, 1, 1, 1, 1, 1, 1, 1,
  4344. 1, 1, 1, 1, 976, 1, 977, 1,
  4345. 1, 1, 978, 1, 1, 1, 1, 1,
  4346. 1, 1, 1, 1, 1, 1, 1, 1,
  4347. 1, 1, 1, 1, 1, 977, 905, 906,
  4348. 905, 905, 905, 905, 905, 979, 1, 905,
  4349. 905, 1, 905, 980, 905, 905, 905, 905,
  4350. 905, 905, 905, 905, 905, 905, 905, 1,
  4351. 909, 910, 905, 1, 905, 1, 905, 905,
  4352. 905, 905, 905, 905, 905, 905, 905, 905,
  4353. 905, 905, 905, 905, 905, 905, 905, 905,
  4354. 905, 905, 905, 905, 905, 905, 905, 905,
  4355. 911, 1, 1, 905, 905, 905, 905, 905,
  4356. 905, 905, 905, 905, 905, 905, 905, 905,
  4357. 905, 905, 905, 905, 905, 905, 905, 905,
  4358. 905, 905, 905, 905, 905, 905, 905, 905,
  4359. 905, 905, 905, 905, 1, 1, 1, 1,
  4360. 1, 1, 1, 1, 1, 1, 1, 1,
  4361. 1, 1, 1, 1, 1, 1, 1, 1,
  4362. 1, 1, 1, 1, 1, 1, 1, 1,
  4363. 1, 1, 1, 1, 1, 1, 1, 1,
  4364. 1, 1, 1, 1, 1, 1, 1, 1,
  4365. 1, 1, 1, 1, 1, 1, 1, 1,
  4366. 1, 1, 1, 1, 1, 1, 1, 1,
  4367. 1, 1, 1, 1, 1, 1, 1, 912,
  4368. 912, 912, 912, 912, 912, 912, 912, 912,
  4369. 912, 912, 912, 912, 912, 912, 912, 912,
  4370. 912, 912, 912, 912, 912, 912, 912, 912,
  4371. 912, 912, 912, 912, 912, 913, 914, 914,
  4372. 914, 914, 914, 914, 914, 914, 914, 914,
  4373. 914, 914, 915, 914, 914, 916, 917, 917,
  4374. 917, 918, 1, 981, 922, 981, 981, 981,
  4375. 981, 981, 1, 1, 981, 981, 1, 981,
  4376. 153, 981, 981, 981, 981, 981, 981, 981,
  4377. 981, 981, 981, 981, 1, 1, 1, 981,
  4378. 1, 981, 1, 981, 981, 981, 981, 981,
  4379. 981, 981, 981, 981, 981, 981, 981, 981,
  4380. 981, 981, 981, 981, 981, 981, 981, 981,
  4381. 981, 981, 981, 981, 981, 1, 1, 1,
  4382. 981, 981, 981, 981, 981, 981, 981, 981,
  4383. 981, 981, 981, 981, 981, 981, 981, 981,
  4384. 981, 981, 981, 981, 981, 981, 981, 981,
  4385. 981, 981, 981, 981, 981, 981, 981, 981,
  4386. 981, 1, 1, 1, 1, 1, 1, 1,
  4387. 1, 1, 1, 1, 1, 1, 1, 1,
  4388. 1, 1, 1, 1, 1, 1, 1, 1,
  4389. 1, 1, 1, 1, 1, 1, 1, 1,
  4390. 1, 1, 1, 1, 1, 1, 1, 1,
  4391. 1, 1, 1, 1, 1, 1, 1, 1,
  4392. 1, 1, 1, 1, 1, 1, 1, 1,
  4393. 1, 1, 1, 1, 1, 1, 1, 1,
  4394. 1, 1, 1, 1, 982, 982, 982, 982,
  4395. 982, 982, 982, 982, 982, 982, 982, 982,
  4396. 982, 982, 982, 982, 982, 982, 982, 982,
  4397. 982, 982, 982, 982, 982, 982, 982, 982,
  4398. 982, 982, 983, 984, 984, 984, 984, 984,
  4399. 984, 984, 984, 984, 984, 984, 984, 985,
  4400. 984, 984, 986, 987, 987, 987, 988, 1,
  4401. 989, 1, 1, 1, 990, 1, 1, 1,
  4402. 1, 1, 1, 1, 1, 1, 1, 1,
  4403. 1, 1, 1, 1, 1, 1, 1, 989,
  4404. 37, 38, 37, 37, 37, 37, 37, 991,
  4405. 1, 37, 37, 1, 37, 40, 37, 37,
  4406. 37, 37, 37, 37, 37, 37, 37, 37,
  4407. 37, 1, 41, 42, 37, 1, 37, 43,
  4408. 37, 37, 37, 37, 37, 37, 37, 37,
  4409. 37, 37, 37, 37, 37, 37, 37, 37,
  4410. 37, 37, 37, 37, 37, 37, 37, 37,
  4411. 37, 37, 44, 1, 1, 37, 37, 37,
  4412. 37, 37, 37, 37, 37, 37, 37, 37,
  4413. 37, 37, 37, 37, 37, 37, 37, 37,
  4414. 37, 37, 37, 37, 37, 37, 37, 37,
  4415. 37, 37, 37, 37, 37, 37, 1, 1,
  4416. 1, 1, 1, 1, 1, 1, 1, 1,
  4417. 1, 1, 1, 1, 1, 1, 1, 1,
  4418. 1, 1, 1, 1, 1, 1, 1, 1,
  4419. 1, 1, 1, 1, 1, 1, 1, 1,
  4420. 1, 1, 1, 1, 1, 1, 1, 1,
  4421. 1, 1, 1, 1, 1, 1, 1, 1,
  4422. 1, 1, 1, 1, 1, 1, 1, 1,
  4423. 1, 1, 1, 1, 1, 1, 1, 1,
  4424. 1, 45, 45, 45, 45, 45, 45, 45,
  4425. 45, 45, 45, 45, 45, 45, 45, 45,
  4426. 45, 45, 45, 45, 45, 45, 45, 45,
  4427. 45, 45, 45, 45, 45, 45, 45, 46,
  4428. 47, 47, 47, 47, 47, 47, 47, 47,
  4429. 47, 47, 47, 47, 48, 47, 47, 49,
  4430. 50, 50, 50, 51, 1, 992, 1, 1,
  4431. 1, 993, 1, 1, 1, 1, 1, 1,
  4432. 1, 1, 1, 1, 1, 1, 1, 1,
  4433. 1, 1, 1, 1, 992, 54, 55, 54,
  4434. 54, 54, 54, 54, 994, 1, 54, 54,
  4435. 1, 54, 995, 54, 54, 54, 54, 54,
  4436. 54, 54, 54, 54, 54, 54, 1, 58,
  4437. 59, 54, 1, 54, 60, 54, 54, 54,
  4438. 54, 54, 54, 54, 54, 54, 54, 54,
  4439. 54, 54, 54, 54, 54, 54, 54, 54,
  4440. 54, 54, 54, 54, 54, 54, 54, 61,
  4441. 1, 1, 54, 54, 54, 54, 54, 54,
  4442. 54, 54, 54, 54, 54, 54, 54, 54,
  4443. 54, 54, 54, 54, 54, 54, 54, 54,
  4444. 54, 54, 54, 54, 54, 54, 54, 54,
  4445. 54, 54, 54, 1, 1, 1, 1, 1,
  4446. 1, 1, 1, 1, 1, 1, 1, 1,
  4447. 1, 1, 1, 1, 1, 1, 1, 1,
  4448. 1, 1, 1, 1, 1, 1, 1, 1,
  4449. 1, 1, 1, 1, 1, 1, 1, 1,
  4450. 1, 1, 1, 1, 1, 1, 1, 1,
  4451. 1, 1, 1, 1, 1, 1, 1, 1,
  4452. 1, 1, 1, 1, 1, 1, 1, 1,
  4453. 1, 1, 1, 1, 1, 1, 62, 62,
  4454. 62, 62, 62, 62, 62, 62, 62, 62,
  4455. 62, 62, 62, 62, 62, 62, 62, 62,
  4456. 62, 62, 62, 62, 62, 62, 62, 62,
  4457. 62, 62, 62, 62, 63, 64, 64, 64,
  4458. 64, 64, 64, 64, 64, 64, 64, 64,
  4459. 64, 65, 64, 64, 66, 67, 67, 67,
  4460. 68, 1, 996, 1, 997, 1, 1, 1,
  4461. 1, 1, 1, 1, 1, 1, 1, 1,
  4462. 1, 1, 1, 1, 1, 1, 1, 1,
  4463. 1, 1, 1, 997, 1, 998, 1, 1,
  4464. 1, 999, 1, 1, 1, 1, 1, 1,
  4465. 1, 1, 1, 1, 1, 1, 1, 1,
  4466. 1, 1, 1, 1, 998, 1000, 1001, 1000,
  4467. 1000, 1000, 1000, 1000, 1002, 1, 1000, 1000,
  4468. 1, 1000, 1003, 1000, 1000, 1000, 1000, 1000,
  4469. 1000, 1000, 1000, 1000, 1000, 1000, 1, 1004,
  4470. 1005, 1000, 1, 1000, 1006, 1000, 1000, 1000,
  4471. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  4472. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  4473. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1007,
  4474. 1, 1, 1000, 1000, 1000, 1000, 1000, 1000,
  4475. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  4476. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  4477. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  4478. 1000, 1000, 1000, 1, 1, 1, 1, 1,
  4479. 1, 1, 1, 1, 1, 1, 1, 1,
  4480. 1, 1, 1, 1, 1, 1, 1, 1,
  4481. 1, 1, 1, 1, 1, 1, 1, 1,
  4482. 1, 1, 1, 1, 1, 1, 1, 1,
  4483. 1, 1, 1, 1, 1, 1, 1, 1,
  4484. 1, 1, 1, 1, 1, 1, 1, 1,
  4485. 1, 1, 1, 1, 1, 1, 1, 1,
  4486. 1, 1, 1, 1, 1, 1, 1008, 1008,
  4487. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  4488. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  4489. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  4490. 1008, 1008, 1008, 1008, 1009, 1010, 1010, 1010,
  4491. 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010,
  4492. 1010, 1011, 1010, 1010, 1012, 1013, 1013, 1013,
  4493. 1014, 1, 1015, 1015, 1015, 1015, 1015, 1015,
  4494. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4495. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4496. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4497. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4498. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4499. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4500. 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
  4501. 1015, 1015, 1, 1016, 1016, 1016, 1016, 1016,
  4502. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4503. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4504. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4505. 1016, 1016, 1016, 1, 1016, 1016, 1016, 1016,
  4506. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4507. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4508. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4509. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4510. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4511. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4512. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4513. 1016, 1016, 1016, 1016, 1, 1016, 1016, 1016,
  4514. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4515. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4516. 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
  4517. 1016, 1016, 1016, 1016, 1016, 1, 1017, 1017,
  4518. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4519. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4520. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4521. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4522. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4523. 1017, 1017, 1017, 1017, 1017, 1017, 1, 1017,
  4524. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4525. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4526. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4527. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4528. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4529. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4530. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4531. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1,
  4532. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4533. 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
  4534. 1, 1018, 1, 1, 1, 1019, 1, 1,
  4535. 1, 1, 1, 1, 1, 1, 1, 1,
  4536. 1, 1, 1, 1, 1, 1, 1, 1,
  4537. 1018, 1020, 1021, 1020, 1020, 1020, 1020, 1020,
  4538. 1022, 1, 1020, 1020, 1, 1020, 1023, 1020,
  4539. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4540. 1020, 1020, 1, 1024, 1025, 1020, 1, 1020,
  4541. 43, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4542. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4543. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4544. 1020, 1020, 1020, 1026, 1, 1, 1020, 1020,
  4545. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4546. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4547. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
  4548. 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1,
  4549. 1, 1, 1, 1, 1, 1, 1, 1,
  4550. 1, 1, 1, 1, 1, 1, 1, 1,
  4551. 1, 1, 1, 1, 1, 1, 1, 1,
  4552. 1, 1, 1, 1, 1, 1, 1, 1,
  4553. 1, 1, 1, 1, 1, 1, 1, 1,
  4554. 1, 1, 1, 1, 1, 1, 1, 1,
  4555. 1, 1, 1, 1, 1, 1, 1, 1,
  4556. 1, 1, 1, 1, 1, 1, 1, 1,
  4557. 1, 1, 1027, 1027, 1027, 1027, 1027, 1027,
  4558. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  4559. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  4560. 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
  4561. 1028, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
  4562. 1029, 1029, 1029, 1029, 1029, 1030, 1029, 1029,
  4563. 1031, 1032, 1032, 1032, 1033, 1, 1034, 1,
  4564. 1, 1, 1035, 1, 1, 1, 1, 1,
  4565. 1, 1, 1, 1, 1, 1, 1, 1,
  4566. 1, 1, 1, 1, 1, 1034, 1036, 1037,
  4567. 1036, 1036, 1036, 1036, 1036, 1038, 1, 1036,
  4568. 1036, 1, 1036, 1039, 1036, 1036, 1036, 1036,
  4569. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1,
  4570. 1040, 1041, 1036, 1, 1036, 60, 1036, 1036,
  4571. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4572. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4573. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4574. 1042, 1, 1, 1036, 1036, 1036, 1036, 1036,
  4575. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4576. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4577. 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
  4578. 1036, 1036, 1036, 1036, 1, 1, 1, 1,
  4579. 1, 1, 1, 1, 1, 1, 1, 1,
  4580. 1, 1, 1, 1, 1, 1, 1, 1,
  4581. 1, 1, 1, 1, 1, 1, 1, 1,
  4582. 1, 1, 1, 1, 1, 1, 1, 1,
  4583. 1, 1, 1, 1, 1, 1, 1, 1,
  4584. 1, 1, 1, 1, 1, 1, 1, 1,
  4585. 1, 1, 1, 1, 1, 1, 1, 1,
  4586. 1, 1, 1, 1, 1, 1, 1, 1043,
  4587. 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
  4588. 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
  4589. 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
  4590. 1043, 1043, 1043, 1043, 1043, 1044, 1045, 1045,
  4591. 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045,
  4592. 1045, 1045, 1046, 1045, 1045, 1047, 1048, 1048,
  4593. 1048, 1049, 1, 1050, 1, 1051, 1, 1,
  4594. 1, 1, 1, 1, 1, 1, 1, 1,
  4595. 1, 1, 1, 1, 1, 1, 1, 1,
  4596. 1, 1, 1, 1, 1051, 1, 1052, 1,
  4597. 1, 1, 1053, 1, 1, 1, 1, 1,
  4598. 1, 1, 1, 1, 1, 1, 1, 1,
  4599. 1, 1, 1, 1, 1, 1052, 1054, 1055,
  4600. 1054, 1054, 1054, 1054, 1054, 1056, 1, 1054,
  4601. 1054, 1, 1054, 1057, 1054, 1054, 1054, 1054,
  4602. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1,
  4603. 1058, 1059, 1054, 1, 1054, 1006, 1054, 1054,
  4604. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4605. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4606. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4607. 1060, 1, 1, 1054, 1054, 1054, 1054, 1054,
  4608. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4609. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4610. 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054,
  4611. 1054, 1054, 1054, 1054, 1, 1, 1, 1,
  4612. 1, 1, 1, 1, 1, 1, 1, 1,
  4613. 1, 1, 1, 1, 1, 1, 1, 1,
  4614. 1, 1, 1, 1, 1, 1, 1, 1,
  4615. 1, 1, 1, 1, 1, 1, 1, 1,
  4616. 1, 1, 1, 1, 1, 1, 1, 1,
  4617. 1, 1, 1, 1, 1, 1, 1, 1,
  4618. 1, 1, 1, 1, 1, 1, 1, 1,
  4619. 1, 1, 1, 1, 1, 1, 1, 1061,
  4620. 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
  4621. 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
  4622. 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
  4623. 1061, 1061, 1061, 1061, 1061, 1062, 1063, 1063,
  4624. 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
  4625. 1063, 1063, 1064, 1063, 1063, 1065, 1066, 1066,
  4626. 1066, 1067, 1, 1068, 1068, 1068, 1068, 1068,
  4627. 1068, 1068, 1068, 922, 1, 1068, 1068, 1069,
  4628. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4629. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4630. 1068, 1068, 922, 1068, 1, 1068, 1068, 1068,
  4631. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4632. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4633. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4634. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4635. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4636. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4637. 1068, 1068, 1068, 1068, 1068, 1068, 1070, 1068,
  4638. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4639. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4640. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4641. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4642. 1068, 1068, 1, 1, 1, 1, 1, 1,
  4643. 1, 1, 1, 1, 1, 1, 1, 1,
  4644. 1, 1, 1, 1, 1, 1, 1, 1,
  4645. 1, 1, 1, 1, 1, 1, 1, 1,
  4646. 1, 1, 1, 1, 1, 1, 1, 1,
  4647. 1, 1, 1, 1, 1, 1, 1, 1,
  4648. 1, 1, 1, 1, 1, 1, 1, 1,
  4649. 1, 1, 1, 1, 1, 1, 1, 1,
  4650. 1, 1, 1, 1, 1071, 1071, 1071, 1071,
  4651. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4652. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4653. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4654. 1071, 1071, 1072, 1073, 1073, 1073, 1073, 1073,
  4655. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1074,
  4656. 1073, 1073, 1075, 1076, 1076, 1076, 1077, 1,
  4657. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4658. 1068, 1, 1068, 1068, 1078, 1068, 1068, 1068,
  4659. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4660. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4661. 1068, 981, 1068, 1068, 1068, 1068, 1068, 1068,
  4662. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4663. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4664. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4665. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4666. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4667. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4668. 1068, 1068, 1068, 1070, 1068, 1068, 1068, 1068,
  4669. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4670. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4671. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4672. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1,
  4673. 1, 1, 1, 1, 1, 1, 1, 1,
  4674. 1, 1, 1, 1, 1, 1, 1, 1,
  4675. 1, 1, 1, 1, 1, 1, 1, 1,
  4676. 1, 1, 1, 1, 1, 1, 1, 1,
  4677. 1, 1, 1, 1, 1, 1, 1, 1,
  4678. 1, 1, 1, 1, 1, 1, 1, 1,
  4679. 1, 1, 1, 1, 1, 1, 1, 1,
  4680. 1, 1, 1, 1, 1, 1, 1, 1,
  4681. 1, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4682. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4683. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4684. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1072,
  4685. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4686. 1073, 1073, 1073, 1073, 1074, 1073, 1073, 1075,
  4687. 1076, 1076, 1076, 1077, 1, 1079, 1, 1068,
  4688. 1, 1, 1, 1, 1, 1, 1, 1,
  4689. 1, 1, 1, 1, 1, 1, 1, 1,
  4690. 1, 1, 1, 1, 1, 1, 1068, 1,
  4691. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4692. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4693. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4694. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4695. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4696. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4697. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4698. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4699. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4700. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4701. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4702. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4703. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4704. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4705. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4706. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4707. 1, 1, 1, 1, 1, 1, 1, 1,
  4708. 1, 1, 1, 1, 1, 1, 1, 1,
  4709. 1, 1, 1, 1, 1, 1, 1, 1,
  4710. 1, 1, 1, 1, 1, 1, 1, 1,
  4711. 1, 1, 1, 1, 1, 1, 1, 1,
  4712. 1, 1, 1, 1, 1, 1, 1, 1,
  4713. 1, 1, 1, 1, 1, 1, 1, 1,
  4714. 1, 1, 1, 1, 1, 1, 1, 1,
  4715. 1, 1, 1071, 1071, 1071, 1071, 1071, 1071,
  4716. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4717. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4718. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4719. 1072, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4720. 1073, 1073, 1073, 1073, 1073, 1074, 1073, 1073,
  4721. 1075, 1076, 1076, 1076, 1077, 1, 1068, 1068,
  4722. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4723. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4724. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4725. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4726. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4727. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4728. 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
  4729. 1068, 1068, 1068, 1068, 1068, 1068, 1, 1071,
  4730. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4731. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4732. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4733. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1,
  4734. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4735. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4736. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4737. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4738. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4739. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4740. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4741. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4742. 1, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4743. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4744. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4745. 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
  4746. 1071, 1, 1073, 1073, 1073, 1073, 1073, 1073,
  4747. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4748. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4749. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4750. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4751. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4752. 1073, 1073, 1, 1073, 1073, 1073, 1073, 1073,
  4753. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4754. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4755. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4756. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4757. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4758. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4759. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4760. 1073, 1073, 1073, 1, 1073, 1073, 1073, 1073,
  4761. 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
  4762. 1073, 1073, 1073, 1073, 1, 1080, 1, 922,
  4763. 1, 1, 1, 1, 1, 1, 1, 1,
  4764. 1, 1, 1, 1, 1, 1, 1, 1,
  4765. 1, 1, 1, 1, 1, 1, 922, 1,
  4766. 981, 981, 981, 981, 981, 981, 981, 981,
  4767. 981, 981, 981, 981, 981, 981, 981, 981,
  4768. 981, 981, 981, 981, 981, 981, 981, 981,
  4769. 981, 981, 981, 981, 981, 981, 981, 981,
  4770. 981, 981, 981, 981, 981, 981, 981, 981,
  4771. 981, 981, 981, 981, 981, 981, 981, 981,
  4772. 981, 981, 981, 981, 981, 981, 981, 981,
  4773. 981, 981, 981, 981, 981, 981, 981, 981,
  4774. 1, 982, 982, 982, 982, 982, 982, 982,
  4775. 982, 982, 982, 982, 982, 982, 982, 982,
  4776. 982, 982, 982, 982, 982, 982, 982, 982,
  4777. 982, 982, 982, 982, 982, 982, 982, 982,
  4778. 982, 1, 982, 982, 982, 982, 982, 982,
  4779. 982, 982, 982, 982, 982, 982, 982, 982,
  4780. 982, 982, 982, 982, 982, 982, 982, 982,
  4781. 982, 982, 982, 982, 982, 982, 982, 982,
  4782. 982, 982, 982, 982, 982, 982, 982, 982,
  4783. 982, 982, 982, 982, 982, 982, 982, 982,
  4784. 982, 982, 982, 982, 982, 982, 982, 982,
  4785. 982, 982, 982, 982, 982, 982, 982, 982,
  4786. 982, 982, 1, 982, 982, 982, 982, 982,
  4787. 982, 982, 982, 982, 982, 982, 982, 982,
  4788. 982, 982, 982, 982, 982, 982, 982, 982,
  4789. 982, 982, 982, 982, 982, 982, 982, 982,
  4790. 982, 982, 982, 1, 984, 984, 984, 984,
  4791. 984, 984, 984, 984, 984, 984, 984, 984,
  4792. 984, 984, 984, 984, 984, 984, 984, 984,
  4793. 984, 984, 984, 984, 984, 984, 984, 984,
  4794. 984, 984, 984, 984, 984, 984, 984, 984,
  4795. 984, 984, 984, 984, 984, 984, 984, 984,
  4796. 984, 984, 984, 984, 1, 984, 984, 984,
  4797. 984, 984, 984, 984, 984, 984, 984, 984,
  4798. 984, 984, 984, 984, 984, 984, 984, 984,
  4799. 984, 984, 984, 984, 984, 984, 984, 984,
  4800. 984, 984, 984, 984, 984, 984, 984, 984,
  4801. 984, 984, 984, 984, 984, 984, 984, 984,
  4802. 984, 984, 984, 984, 984, 984, 984, 984,
  4803. 984, 984, 984, 984, 984, 984, 984, 984,
  4804. 984, 984, 984, 984, 984, 1, 984, 984,
  4805. 984, 984, 984, 984, 984, 984, 984, 984,
  4806. 984, 984, 984, 984, 984, 984, 1, 921,
  4807. 921, 921, 921, 921, 921, 921, 921, 921,
  4808. 921, 921, 921, 921, 921, 921, 921, 921,
  4809. 921, 921, 921, 921, 921, 921, 921, 921,
  4810. 921, 921, 921, 921, 921, 921, 921, 921,
  4811. 921, 921, 921, 921, 921, 921, 921, 921,
  4812. 921, 921, 921, 921, 921, 921, 921, 921,
  4813. 921, 921, 921, 921, 921, 921, 921, 921,
  4814. 921, 921, 921, 921, 921, 921, 921, 1,
  4815. 924, 924, 924, 924, 924, 924, 924, 924,
  4816. 924, 924, 924, 924, 924, 924, 924, 924,
  4817. 924, 924, 924, 924, 924, 924, 924, 924,
  4818. 924, 924, 924, 924, 924, 924, 924, 924,
  4819. 1, 924, 924, 924, 924, 924, 924, 924,
  4820. 924, 924, 924, 924, 924, 924, 924, 924,
  4821. 924, 924, 924, 924, 924, 924, 924, 924,
  4822. 924, 924, 924, 924, 924, 924, 924, 924,
  4823. 924, 924, 924, 924, 924, 924, 924, 924,
  4824. 924, 924, 924, 924, 924, 924, 924, 924,
  4825. 924, 924, 924, 924, 924, 924, 924, 924,
  4826. 924, 924, 924, 924, 924, 924, 924, 924,
  4827. 924, 1, 924, 924, 924, 924, 924, 924,
  4828. 924, 924, 924, 924, 924, 924, 924, 924,
  4829. 924, 924, 924, 924, 924, 924, 924, 924,
  4830. 924, 924, 924, 924, 924, 924, 924, 924,
  4831. 924, 924, 1, 926, 926, 926, 926, 926,
  4832. 926, 926, 926, 926, 926, 926, 926, 926,
  4833. 926, 926, 926, 926, 926, 926, 926, 926,
  4834. 926, 926, 926, 926, 926, 926, 926, 926,
  4835. 926, 926, 926, 926, 926, 926, 926, 926,
  4836. 926, 926, 926, 926, 926, 926, 926, 926,
  4837. 926, 926, 926, 1, 926, 926, 926, 926,
  4838. 926, 926, 926, 926, 926, 926, 926, 926,
  4839. 926, 926, 926, 926, 926, 926, 926, 926,
  4840. 926, 926, 926, 926, 926, 926, 926, 926,
  4841. 926, 926, 926, 926, 926, 926, 926, 926,
  4842. 926, 926, 926, 926, 926, 926, 926, 926,
  4843. 926, 926, 926, 926, 926, 926, 926, 926,
  4844. 926, 926, 926, 926, 926, 926, 926, 926,
  4845. 926, 926, 926, 926, 1, 926, 926, 926,
  4846. 926, 926, 926, 926, 926, 926, 926, 926,
  4847. 926, 926, 926, 926, 926, 1, 1081, 1,
  4848. 1, 1, 1082, 1, 1, 1, 1, 1,
  4849. 1, 1, 1, 1, 1, 1, 1, 1,
  4850. 1, 1, 1, 1, 1, 1081, 1083, 1,
  4851. 1083, 1083, 1083, 1083, 1083, 1084, 1, 1083,
  4852. 1083, 1, 1083, 1, 1083, 1083, 1083, 1083,
  4853. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1,
  4854. 1, 1, 1083, 1, 1083, 1, 1083, 1083,
  4855. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4856. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4857. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4858. 1, 1, 1, 1083, 1083, 1083, 1083, 1083,
  4859. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4860. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4861. 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
  4862. 1083, 1083, 1083, 1083, 1, 1, 1, 1,
  4863. 1, 1, 1, 1, 1, 1, 1, 1,
  4864. 1, 1, 1, 1, 1, 1, 1, 1,
  4865. 1, 1, 1, 1, 1, 1, 1, 1,
  4866. 1, 1, 1, 1, 1, 1, 1, 1,
  4867. 1, 1, 1, 1, 1, 1, 1, 1,
  4868. 1, 1, 1, 1, 1, 1, 1, 1,
  4869. 1, 1, 1, 1, 1, 1, 1, 1,
  4870. 1, 1, 1, 1, 1, 1, 1, 1085,
  4871. 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
  4872. 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
  4873. 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
  4874. 1085, 1085, 1085, 1085, 1085, 1086, 1087, 1087,
  4875. 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
  4876. 1087, 1087, 1088, 1087, 1087, 1089, 1090, 1090,
  4877. 1090, 1091, 1, 931, 931, 931, 931, 931,
  4878. 931, 931, 931, 931, 931, 931, 931, 931,
  4879. 931, 931, 931, 931, 931, 931, 931, 931,
  4880. 931, 931, 931, 931, 931, 931, 931, 931,
  4881. 931, 931, 931, 931, 931, 931, 931, 931,
  4882. 931, 931, 931, 931, 931, 931, 931, 931,
  4883. 931, 931, 931, 931, 931, 931, 931, 931,
  4884. 931, 931, 931, 931, 931, 931, 931, 931,
  4885. 931, 931, 931, 1, 932, 932, 932, 932,
  4886. 932, 932, 932, 932, 932, 932, 932, 932,
  4887. 932, 932, 932, 932, 932, 932, 932, 932,
  4888. 932, 932, 932, 932, 932, 932, 932, 932,
  4889. 932, 932, 932, 932, 1, 932, 932, 932,
  4890. 932, 932, 932, 932, 932, 932, 932, 932,
  4891. 932, 932, 932, 932, 932, 932, 932, 932,
  4892. 932, 932, 932, 932, 932, 932, 932, 932,
  4893. 932, 932, 932, 932, 932, 932, 932, 932,
  4894. 932, 932, 932, 932, 932, 932, 932, 932,
  4895. 932, 932, 932, 932, 932, 932, 932, 932,
  4896. 932, 932, 932, 932, 932, 932, 932, 932,
  4897. 932, 932, 932, 932, 932, 1, 932, 932,
  4898. 932, 932, 932, 932, 932, 932, 932, 932,
  4899. 932, 932, 932, 932, 932, 932, 932, 932,
  4900. 932, 932, 932, 932, 932, 932, 932, 932,
  4901. 932, 932, 932, 932, 932, 932, 1, 934,
  4902. 934, 934, 934, 934, 934, 934, 934, 934,
  4903. 934, 934, 934, 934, 934, 934, 934, 934,
  4904. 934, 934, 934, 934, 934, 934, 934, 934,
  4905. 934, 934, 934, 934, 934, 934, 934, 934,
  4906. 934, 934, 934, 934, 934, 934, 934, 934,
  4907. 934, 934, 934, 934, 934, 934, 934, 1,
  4908. 934, 934, 934, 934, 934, 934, 934, 934,
  4909. 934, 934, 934, 934, 934, 934, 934, 934,
  4910. 934, 934, 934, 934, 934, 934, 934, 934,
  4911. 934, 934, 934, 934, 934, 934, 934, 934,
  4912. 934, 934, 934, 934, 934, 934, 934, 934,
  4913. 934, 934, 934, 934, 934, 934, 934, 934,
  4914. 934, 934, 934, 934, 934, 934, 934, 934,
  4915. 934, 934, 934, 934, 934, 934, 934, 934,
  4916. 1, 934, 934, 934, 934, 934, 934, 934,
  4917. 934, 934, 934, 934, 934, 934, 934, 934,
  4918. 934, 1, 874, 1, 1, 1, 875, 1,
  4919. 1, 1, 1, 1, 1, 1, 1, 1,
  4920. 1, 1, 1, 1, 1, 1, 1, 1,
  4921. 1, 874, 876, 877, 876, 876, 876, 876,
  4922. 876, 878, 1, 876, 876, 1, 876, 879,
  4923. 876, 876, 876, 876, 876, 876, 876, 876,
  4924. 876, 876, 876, 1, 950, 881, 876, 1,
  4925. 876, 43, 876, 876, 876, 876, 876, 876,
  4926. 876, 876, 876, 876, 876, 876, 876, 876,
  4927. 876, 876, 876, 876, 876, 876, 876, 876,
  4928. 876, 876, 876, 876, 882, 1, 1, 876,
  4929. 876, 876, 876, 876, 876, 876, 876, 876,
  4930. 876, 876, 876, 876, 876, 876, 876, 876,
  4931. 876, 876, 876, 876, 876, 876, 876, 876,
  4932. 876, 876, 876, 876, 876, 876, 876, 876,
  4933. 1, 1, 1, 1, 1, 1, 1, 1,
  4934. 1, 1, 1, 1, 1, 1, 1, 1,
  4935. 1, 1, 1, 1, 1, 1, 1, 1,
  4936. 1, 1, 1, 1, 1, 1, 1, 1,
  4937. 1, 1, 1, 1, 1, 1, 1, 1,
  4938. 1, 1, 1, 1, 1, 1, 1, 1,
  4939. 1, 1, 1, 1, 1, 1, 1, 1,
  4940. 1, 1, 1, 1, 1, 1, 1, 1,
  4941. 1, 1, 1, 883, 883, 883, 883, 883,
  4942. 883, 883, 883, 883, 883, 883, 883, 883,
  4943. 883, 883, 883, 883, 883, 883, 883, 883,
  4944. 883, 883, 883, 883, 883, 883, 883, 883,
  4945. 883, 884, 885, 885, 885, 885, 885, 885,
  4946. 885, 885, 885, 885, 885, 885, 886, 885,
  4947. 885, 887, 888, 888, 888, 889, 1, 1092,
  4948. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1093,
  4949. 1, 1092, 1092, 1094, 1092, 1092, 1092, 1092,
  4950. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4951. 1092, 1092, 1092, 1092, 1092, 1092, 1093, 1092,
  4952. 74, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4953. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4954. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4955. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4956. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4957. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4958. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4959. 1092, 1092, 1095, 1092, 1092, 1092, 1092, 1092,
  4960. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4961. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4962. 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092,
  4963. 1092, 1092, 1092, 1092, 1092, 1092, 1, 1,
  4964. 1, 1, 1, 1, 1, 1, 1, 1,
  4965. 1, 1, 1, 1, 1, 1, 1, 1,
  4966. 1, 1, 1, 1, 1, 1, 1, 1,
  4967. 1, 1, 1, 1, 1, 1, 1, 1,
  4968. 1, 1, 1, 1, 1, 1, 1, 1,
  4969. 1, 1, 1, 1, 1, 1, 1, 1,
  4970. 1, 1, 1, 1, 1, 1, 1, 1,
  4971. 1, 1, 1, 1, 1, 1, 1, 1,
  4972. 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
  4973. 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
  4974. 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
  4975. 1096, 1096, 1096, 1096, 1096, 1096, 1097, 1098,
  4976. 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
  4977. 1098, 1098, 1098, 1099, 1098, 1098, 1100, 1101,
  4978. 1101, 1101, 1102, 1, 1103, 1103, 1103, 1103,
  4979. 1103, 1103, 1103, 1103, 1103, 1, 1103, 1103,
  4980. 1104, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4981. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4982. 1103, 1103, 1103, 1103, 1103, 1105, 1103, 1103,
  4983. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4984. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4985. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4986. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4987. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4988. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4989. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1106,
  4990. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4991. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4992. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4993. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  4994. 1103, 1103, 1103, 1, 1, 1, 1, 1,
  4995. 1, 1, 1, 1, 1, 1, 1, 1,
  4996. 1, 1, 1, 1, 1, 1, 1, 1,
  4997. 1, 1, 1, 1, 1, 1, 1, 1,
  4998. 1, 1, 1, 1, 1, 1, 1, 1,
  4999. 1, 1, 1, 1, 1, 1, 1, 1,
  5000. 1, 1, 1, 1, 1, 1, 1, 1,
  5001. 1, 1, 1, 1, 1, 1, 1, 1,
  5002. 1, 1, 1, 1, 1, 1107, 1107, 1107,
  5003. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5004. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5005. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5006. 1107, 1107, 1107, 1108, 1109, 1109, 1109, 1109,
  5007. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5008. 1110, 1109, 1109, 1111, 1112, 1112, 1112, 1113,
  5009. 1, 1114, 1, 1103, 1, 1, 1, 1,
  5010. 1, 1, 1, 1, 1, 1, 1, 1,
  5011. 1, 1, 1, 1, 1, 1, 1, 1,
  5012. 1, 1, 1103, 1, 962, 1, 1, 1,
  5013. 963, 1, 1, 1, 1, 1, 1, 1,
  5014. 1, 1, 1, 1, 1, 1, 1, 1,
  5015. 1, 1, 1, 962, 1115, 877, 1115, 1115,
  5016. 1115, 1115, 1115, 965, 1, 1115, 1115, 1,
  5017. 1115, 1116, 1115, 1115, 1115, 1115, 1115, 1115,
  5018. 1115, 1115, 1115, 1115, 1115, 1, 1117, 881,
  5019. 1115, 1, 1115, 103, 1115, 1115, 1115, 1115,
  5020. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5021. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5022. 1115, 1115, 1115, 1115, 1115, 1115, 882, 1,
  5023. 1, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5024. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5025. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5026. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5027. 1115, 1115, 1, 1, 1, 1, 1, 1,
  5028. 1, 1, 1, 1, 1, 1, 1, 1,
  5029. 1, 1, 1, 1, 1, 1, 1, 1,
  5030. 1, 1, 1, 1, 1, 1, 1, 1,
  5031. 1, 1, 1, 1, 1, 1, 1, 1,
  5032. 1, 1, 1, 1, 1, 1, 1, 1,
  5033. 1, 1, 1, 1, 1, 1, 1, 1,
  5034. 1, 1, 1, 1, 1, 1, 1, 1,
  5035. 1, 1, 1, 1, 1, 1118, 1118, 1118,
  5036. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5037. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5038. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5039. 1118, 1118, 1118, 1119, 1120, 1120, 1120, 1120,
  5040. 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
  5041. 1121, 1120, 1120, 1122, 1123, 1123, 1123, 1124,
  5042. 1, 962, 1, 1, 1, 963, 1, 1,
  5043. 1, 1, 1, 1, 1, 1, 1, 1,
  5044. 1, 1, 1, 1, 1, 1, 1, 1,
  5045. 962, 1115, 877, 1115, 1115, 1115, 1115, 1115,
  5046. 965, 1, 1115, 1115, 1, 1115, 1116, 1115,
  5047. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5048. 1115, 1115, 1, 950, 881, 1115, 1, 1115,
  5049. 43, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5050. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5051. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5052. 1115, 1115, 1115, 882, 1, 1, 1115, 1115,
  5053. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5054. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5055. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5056. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1,
  5057. 1, 1, 1, 1, 1, 1, 1, 1,
  5058. 1, 1, 1, 1, 1, 1, 1, 1,
  5059. 1, 1, 1, 1, 1, 1, 1, 1,
  5060. 1, 1, 1, 1, 1, 1, 1, 1,
  5061. 1, 1, 1, 1, 1, 1, 1, 1,
  5062. 1, 1, 1, 1, 1, 1, 1, 1,
  5063. 1, 1, 1, 1, 1, 1, 1, 1,
  5064. 1, 1, 1, 1, 1, 1, 1, 1,
  5065. 1, 1, 1118, 1118, 1118, 1118, 1118, 1118,
  5066. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5067. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5068. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5069. 1119, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
  5070. 1120, 1120, 1120, 1120, 1120, 1121, 1120, 1120,
  5071. 1122, 1123, 1123, 1123, 1124, 1, 1125, 1126,
  5072. 1125, 1125, 1125, 1125, 1125, 1, 1, 1125,
  5073. 1125, 1, 1125, 1127, 1125, 1125, 1125, 1125,
  5074. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1,
  5075. 1, 1, 1125, 1, 1125, 1, 1125, 1125,
  5076. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5077. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5078. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5079. 1, 1, 1, 1125, 1125, 1125, 1125, 1125,
  5080. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5081. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5082. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5083. 1125, 1125, 1125, 1125, 1, 1, 1, 1,
  5084. 1, 1, 1, 1, 1, 1, 1, 1,
  5085. 1, 1, 1, 1, 1, 1, 1, 1,
  5086. 1, 1, 1, 1, 1, 1, 1, 1,
  5087. 1, 1, 1, 1, 1, 1, 1, 1,
  5088. 1, 1, 1, 1, 1, 1, 1, 1,
  5089. 1, 1, 1, 1, 1, 1, 1, 1,
  5090. 1, 1, 1, 1, 1, 1, 1, 1,
  5091. 1, 1, 1, 1, 1, 1, 1, 1128,
  5092. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5093. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5094. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5095. 1128, 1128, 1128, 1128, 1128, 1129, 1130, 1130,
  5096. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5097. 1130, 1130, 1131, 1130, 1130, 1132, 1133, 1133,
  5098. 1133, 1134, 1, 1135, 1135, 1135, 1135, 1135,
  5099. 1135, 1135, 1135, 1126, 1, 1135, 1135, 1136,
  5100. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5101. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5102. 1135, 1135, 1126, 1135, 1, 1135, 1135, 1135,
  5103. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5104. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5105. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5106. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5107. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5108. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5109. 1135, 1135, 1135, 1135, 1135, 1135, 1137, 1135,
  5110. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5111. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5112. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5113. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5114. 1135, 1135, 1, 1, 1, 1, 1, 1,
  5115. 1, 1, 1, 1, 1, 1, 1, 1,
  5116. 1, 1, 1, 1, 1, 1, 1, 1,
  5117. 1, 1, 1, 1, 1, 1, 1, 1,
  5118. 1, 1, 1, 1, 1, 1, 1, 1,
  5119. 1, 1, 1, 1, 1, 1, 1, 1,
  5120. 1, 1, 1, 1, 1, 1, 1, 1,
  5121. 1, 1, 1, 1, 1, 1, 1, 1,
  5122. 1, 1, 1, 1, 1138, 1138, 1138, 1138,
  5123. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5124. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5125. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5126. 1138, 1138, 1139, 1140, 1140, 1140, 1140, 1140,
  5127. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
  5128. 1140, 1140, 1142, 1143, 1143, 1143, 1144, 1,
  5129. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5130. 1135, 1, 1135, 1135, 1145, 1135, 1135, 1135,
  5131. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5132. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5133. 1135, 1125, 1135, 1135, 1135, 1135, 1135, 1135,
  5134. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5135. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5136. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5137. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5138. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5139. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5140. 1135, 1135, 1135, 1137, 1135, 1135, 1135, 1135,
  5141. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5142. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5143. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5144. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1,
  5145. 1, 1, 1, 1, 1, 1, 1, 1,
  5146. 1, 1, 1, 1, 1, 1, 1, 1,
  5147. 1, 1, 1, 1, 1, 1, 1, 1,
  5148. 1, 1, 1, 1, 1, 1, 1, 1,
  5149. 1, 1, 1, 1, 1, 1, 1, 1,
  5150. 1, 1, 1, 1, 1, 1, 1, 1,
  5151. 1, 1, 1, 1, 1, 1, 1, 1,
  5152. 1, 1, 1, 1, 1, 1, 1, 1,
  5153. 1, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5154. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5155. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5156. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1139,
  5157. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5158. 1140, 1140, 1140, 1140, 1141, 1140, 1140, 1142,
  5159. 1143, 1143, 1143, 1144, 1, 1146, 1, 1135,
  5160. 1, 1, 1, 1, 1, 1, 1, 1,
  5161. 1, 1, 1, 1, 1, 1, 1, 1,
  5162. 1, 1, 1, 1, 1, 1, 1135, 1,
  5163. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5164. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5165. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5166. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5167. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5168. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5169. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5170. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5171. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5172. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5173. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5174. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5175. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5176. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5177. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5178. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5179. 1, 1, 1, 1, 1, 1, 1, 1,
  5180. 1, 1, 1, 1, 1, 1, 1, 1,
  5181. 1, 1, 1, 1, 1, 1, 1, 1,
  5182. 1, 1, 1, 1, 1, 1, 1, 1,
  5183. 1, 1, 1, 1, 1, 1, 1, 1,
  5184. 1, 1, 1, 1, 1, 1, 1, 1,
  5185. 1, 1, 1, 1, 1, 1, 1, 1,
  5186. 1, 1, 1, 1, 1, 1, 1, 1,
  5187. 1, 1, 1138, 1138, 1138, 1138, 1138, 1138,
  5188. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5189. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5190. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5191. 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5192. 1140, 1140, 1140, 1140, 1140, 1141, 1140, 1140,
  5193. 1142, 1143, 1143, 1143, 1144, 1, 1135, 1135,
  5194. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5195. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5196. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5197. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5198. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5199. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5200. 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
  5201. 1135, 1135, 1135, 1135, 1135, 1135, 1, 1138,
  5202. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5203. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5204. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5205. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1,
  5206. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5207. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5208. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5209. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5210. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5211. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5212. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5213. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5214. 1, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5215. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5216. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5217. 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
  5218. 1138, 1, 1140, 1140, 1140, 1140, 1140, 1140,
  5219. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5220. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5221. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5222. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5223. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5224. 1140, 1140, 1, 1140, 1140, 1140, 1140, 1140,
  5225. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5226. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5227. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5228. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5229. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5230. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5231. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5232. 1140, 1140, 1140, 1, 1140, 1140, 1140, 1140,
  5233. 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
  5234. 1140, 1140, 1140, 1140, 1, 1147, 1, 1126,
  5235. 1, 1, 1, 1, 1, 1, 1, 1,
  5236. 1, 1, 1, 1, 1, 1, 1, 1,
  5237. 1, 1, 1, 1, 1, 1, 1126, 1,
  5238. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5239. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5240. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5241. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5242. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5243. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5244. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5245. 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125,
  5246. 1, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5247. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5248. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5249. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5250. 1128, 1, 1128, 1128, 1128, 1128, 1128, 1128,
  5251. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5252. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5253. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5254. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5255. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5256. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5257. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5258. 1128, 1128, 1, 1128, 1128, 1128, 1128, 1128,
  5259. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5260. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5261. 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,
  5262. 1128, 1128, 1128, 1, 1130, 1130, 1130, 1130,
  5263. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5264. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5265. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5266. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5267. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5268. 1130, 1130, 1130, 1130, 1, 1130, 1130, 1130,
  5269. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5270. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5271. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5272. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5273. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5274. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5275. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5276. 1130, 1130, 1130, 1130, 1130, 1, 1130, 1130,
  5277. 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
  5278. 1130, 1130, 1130, 1130, 1130, 1130, 1, 1103,
  5279. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5280. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5281. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5282. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5283. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5284. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5285. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5286. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5287. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5288. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5289. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5290. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5291. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5292. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5293. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5294. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1,
  5295. 1, 1, 1, 1, 1, 1, 1, 1,
  5296. 1, 1, 1, 1, 1, 1, 1, 1,
  5297. 1, 1, 1, 1, 1, 1, 1, 1,
  5298. 1, 1, 1, 1, 1, 1, 1, 1,
  5299. 1, 1, 1, 1, 1, 1, 1, 1,
  5300. 1, 1, 1, 1, 1, 1, 1, 1,
  5301. 1, 1, 1, 1, 1, 1, 1, 1,
  5302. 1, 1, 1, 1, 1, 1, 1, 1,
  5303. 1, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5304. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5305. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5306. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1108,
  5307. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5308. 1109, 1109, 1109, 1109, 1110, 1109, 1109, 1111,
  5309. 1112, 1112, 1112, 1113, 1, 1103, 1103, 1103,
  5310. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5311. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5312. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5313. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5314. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5315. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5316. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5317. 1103, 1103, 1103, 1103, 1103, 1, 1107, 1107,
  5318. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5319. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5320. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5321. 1107, 1107, 1107, 1107, 1107, 1107, 1, 1107,
  5322. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5323. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5324. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5325. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5326. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5327. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5328. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5329. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1,
  5330. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5331. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5332. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5333. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5334. 1, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5335. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5336. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5337. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5338. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5339. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5340. 1109, 1, 1109, 1109, 1109, 1109, 1109, 1109,
  5341. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5342. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5343. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5344. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5345. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5346. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5347. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5348. 1109, 1109, 1, 1109, 1109, 1109, 1109, 1109,
  5349. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5350. 1109, 1109, 1109, 1, 1103, 1103, 1103, 1103,
  5351. 1103, 1103, 1103, 1103, 1148, 1, 1103, 1103,
  5352. 1149, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5353. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5354. 1103, 1103, 1103, 1148, 1103, 1150, 1103, 1103,
  5355. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5356. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5357. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5358. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5359. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5360. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5361. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1106,
  5362. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5363. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5364. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5365. 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
  5366. 1103, 1103, 1103, 1, 1, 1, 1, 1,
  5367. 1, 1, 1, 1, 1, 1, 1, 1,
  5368. 1, 1, 1, 1, 1, 1, 1, 1,
  5369. 1, 1, 1, 1, 1, 1, 1, 1,
  5370. 1, 1, 1, 1, 1, 1, 1, 1,
  5371. 1, 1, 1, 1, 1, 1, 1, 1,
  5372. 1, 1, 1, 1, 1, 1, 1, 1,
  5373. 1, 1, 1, 1, 1, 1, 1, 1,
  5374. 1, 1, 1, 1, 1, 1107, 1107, 1107,
  5375. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5376. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5377. 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
  5378. 1107, 1107, 1107, 1108, 1109, 1109, 1109, 1109,
  5379. 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
  5380. 1110, 1109, 1109, 1111, 1112, 1112, 1112, 1113,
  5381. 1, 1151, 1, 1148, 1, 1, 1, 1,
  5382. 1, 1, 1, 1, 1, 1, 1, 1,
  5383. 1, 1, 1, 1, 1, 1, 1, 1,
  5384. 1, 1, 1148, 1, 1152, 1, 1, 1,
  5385. 1153, 1, 1, 1, 1, 1, 1, 1,
  5386. 1, 1, 1, 1, 1, 1, 1, 1,
  5387. 1, 1, 1, 1152, 1154, 1155, 1154, 1154,
  5388. 1154, 1154, 1154, 1156, 1, 1154, 1154, 1,
  5389. 1154, 1157, 1154, 1154, 1154, 1154, 1154, 1154,
  5390. 1154, 1154, 1154, 1154, 1154, 1, 1158, 1159,
  5391. 1154, 1, 1154, 1160, 1154, 1154, 1154, 1154,
  5392. 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5393. 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5394. 1154, 1154, 1154, 1154, 1154, 1154, 1161, 1,
  5395. 1, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5396. 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5397. 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5398. 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
  5399. 1154, 1154, 1, 1, 1, 1, 1, 1,
  5400. 1, 1, 1, 1, 1, 1, 1, 1,
  5401. 1, 1, 1, 1, 1, 1, 1, 1,
  5402. 1, 1, 1, 1, 1, 1, 1, 1,
  5403. 1, 1, 1, 1, 1, 1, 1, 1,
  5404. 1, 1, 1, 1, 1, 1, 1, 1,
  5405. 1, 1, 1, 1, 1, 1, 1, 1,
  5406. 1, 1, 1, 1, 1, 1, 1, 1,
  5407. 1, 1, 1, 1, 1, 1162, 1162, 1162,
  5408. 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
  5409. 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
  5410. 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
  5411. 1162, 1162, 1162, 1163, 1164, 1164, 1164, 1164,
  5412. 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
  5413. 1165, 1164, 1164, 1166, 1167, 1167, 1167, 1168,
  5414. 1, 1152, 1, 1, 1, 1153, 1, 1,
  5415. 1, 1, 1, 1, 1, 1, 1, 1,
  5416. 1, 1, 1, 1, 1, 1, 1, 1,
  5417. 1152, 1169, 1170, 1169, 1169, 1169, 1169, 1169,
  5418. 1156, 1, 1169, 1169, 1, 1169, 1171, 1169,
  5419. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5420. 1169, 1169, 1, 1158, 1172, 1169, 1, 1169,
  5421. 1160, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5422. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5423. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5424. 1169, 1169, 1169, 1161, 1, 1, 1169, 1169,
  5425. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5426. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5427. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
  5428. 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1,
  5429. 1, 1, 1, 1, 1, 1, 1, 1,
  5430. 1, 1, 1, 1, 1, 1, 1, 1,
  5431. 1, 1, 1, 1, 1, 1, 1, 1,
  5432. 1, 1, 1, 1, 1, 1, 1, 1,
  5433. 1, 1, 1, 1, 1, 1, 1, 1,
  5434. 1, 1, 1, 1, 1, 1, 1, 1,
  5435. 1, 1, 1, 1, 1, 1, 1, 1,
  5436. 1, 1, 1, 1, 1, 1, 1, 1,
  5437. 1, 1, 1173, 1173, 1173, 1173, 1173, 1173,
  5438. 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
  5439. 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
  5440. 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
  5441. 1174, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
  5442. 1175, 1175, 1175, 1175, 1175, 1176, 1175, 1175,
  5443. 1177, 1178, 1178, 1178, 1179, 1, 1180, 1,
  5444. 1181, 1, 1, 1, 1, 1, 1, 1,
  5445. 1, 1, 1, 1, 1, 1, 1, 1,
  5446. 1, 1, 1, 1, 1, 1, 1, 1181,
  5447. 1, 1182, 1, 1, 1, 1183, 1, 1,
  5448. 1, 1, 1, 1, 1, 1, 1, 1,
  5449. 1, 1, 1, 1, 1, 1, 1, 1,
  5450. 1182, 1184, 1185, 1184, 1184, 1184, 1184, 1184,
  5451. 1186, 1, 1184, 1184, 1, 1184, 1187, 1184,
  5452. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5453. 1184, 1184, 1, 1188, 1189, 1184, 1, 1184,
  5454. 1190, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5455. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5456. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5457. 1184, 1184, 1184, 1191, 1, 1, 1184, 1184,
  5458. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5459. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5460. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
  5461. 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1,
  5462. 1, 1, 1, 1, 1, 1, 1, 1,
  5463. 1, 1, 1, 1, 1, 1, 1, 1,
  5464. 1, 1, 1, 1, 1, 1, 1, 1,
  5465. 1, 1, 1, 1, 1, 1, 1, 1,
  5466. 1, 1, 1, 1, 1, 1, 1, 1,
  5467. 1, 1, 1, 1, 1, 1, 1, 1,
  5468. 1, 1, 1, 1, 1, 1, 1, 1,
  5469. 1, 1, 1, 1, 1, 1, 1, 1,
  5470. 1, 1, 1192, 1192, 1192, 1192, 1192, 1192,
  5471. 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
  5472. 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
  5473. 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
  5474. 1193, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
  5475. 1194, 1194, 1194, 1194, 1194, 1195, 1194, 1194,
  5476. 1196, 1197, 1197, 1197, 1198, 1, 919, 1,
  5477. 1, 1, 920, 1, 1, 1, 1, 1,
  5478. 1, 1, 1, 1, 1, 1, 1, 1,
  5479. 1, 1, 1, 1, 1, 919, 1199, 1126,
  5480. 1199, 1199, 1199, 1199, 1199, 923, 1, 1199,
  5481. 1199, 1, 1199, 1127, 1199, 1199, 1199, 1199,
  5482. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1,
  5483. 1, 1, 1199, 1, 1199, 1, 1199, 1199,
  5484. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5485. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5486. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5487. 1, 1, 1, 1199, 1199, 1199, 1199, 1199,
  5488. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5489. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5490. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5491. 1199, 1199, 1199, 1199, 1, 1, 1, 1,
  5492. 1, 1, 1, 1, 1, 1, 1, 1,
  5493. 1, 1, 1, 1, 1, 1, 1, 1,
  5494. 1, 1, 1, 1, 1, 1, 1, 1,
  5495. 1, 1, 1, 1, 1, 1, 1, 1,
  5496. 1, 1, 1, 1, 1, 1, 1, 1,
  5497. 1, 1, 1, 1, 1, 1, 1, 1,
  5498. 1, 1, 1, 1, 1, 1, 1, 1,
  5499. 1, 1, 1, 1, 1, 1, 1, 1200,
  5500. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5501. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5502. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5503. 1200, 1200, 1200, 1200, 1200, 1201, 1202, 1202,
  5504. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5505. 1202, 1202, 1203, 1202, 1202, 1204, 1205, 1205,
  5506. 1205, 1206, 1, 1199, 1199, 1199, 1199, 1199,
  5507. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5508. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5509. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5510. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5511. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5512. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5513. 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
  5514. 1199, 1199, 1199, 1, 1200, 1200, 1200, 1200,
  5515. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5516. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5517. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5518. 1200, 1200, 1200, 1200, 1, 1200, 1200, 1200,
  5519. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5520. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5521. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5522. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5523. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5524. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5525. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5526. 1200, 1200, 1200, 1200, 1200, 1, 1200, 1200,
  5527. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5528. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5529. 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
  5530. 1200, 1200, 1200, 1200, 1200, 1200, 1, 1202,
  5531. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5532. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5533. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5534. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5535. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5536. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1,
  5537. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5538. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5539. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5540. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5541. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5542. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5543. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5544. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5545. 1, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5546. 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
  5547. 1202, 1, 1207, 1207, 1207, 1207, 1207, 1207,
  5548. 1207, 1207, 862, 1, 1207, 1207, 1208, 1207,
  5549. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5550. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5551. 1207, 862, 1207, 1, 1207, 1207, 1207, 1207,
  5552. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5553. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5554. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5555. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5556. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5557. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5558. 1207, 1207, 1207, 1207, 1207, 1209, 1207, 1207,
  5559. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5560. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5561. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5562. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5563. 1207, 1, 1, 1, 1, 1, 1, 1,
  5564. 1, 1, 1, 1, 1, 1, 1, 1,
  5565. 1, 1, 1, 1, 1, 1, 1, 1,
  5566. 1, 1, 1, 1, 1, 1, 1, 1,
  5567. 1, 1, 1, 1, 1, 1, 1, 1,
  5568. 1, 1, 1, 1, 1, 1, 1, 1,
  5569. 1, 1, 1, 1, 1, 1, 1, 1,
  5570. 1, 1, 1, 1, 1, 1, 1, 1,
  5571. 1, 1, 1, 1210, 1210, 1210, 1210, 1210,
  5572. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5573. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5574. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5575. 1210, 1211, 1212, 1212, 1212, 1212, 1212, 1212,
  5576. 1212, 1212, 1212, 1212, 1212, 1212, 1213, 1212,
  5577. 1212, 1214, 1215, 1215, 1215, 1216, 1, 1207,
  5578. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5579. 1, 1207, 1207, 1217, 1207, 1207, 1207, 1207,
  5580. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5581. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5582. 1218, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5583. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5584. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5585. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5586. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5587. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5588. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5589. 1207, 1207, 1209, 1207, 1207, 1207, 1207, 1207,
  5590. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5591. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5592. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5593. 1207, 1207, 1207, 1207, 1207, 1207, 1, 1,
  5594. 1, 1, 1, 1, 1, 1, 1, 1,
  5595. 1, 1, 1, 1, 1, 1, 1, 1,
  5596. 1, 1, 1, 1, 1, 1, 1, 1,
  5597. 1, 1, 1, 1, 1, 1, 1, 1,
  5598. 1, 1, 1, 1, 1, 1, 1, 1,
  5599. 1, 1, 1, 1, 1, 1, 1, 1,
  5600. 1, 1, 1, 1, 1, 1, 1, 1,
  5601. 1, 1, 1, 1, 1, 1, 1, 1,
  5602. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5603. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5604. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5605. 1210, 1210, 1210, 1210, 1210, 1210, 1211, 1212,
  5606. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5607. 1212, 1212, 1212, 1213, 1212, 1212, 1214, 1215,
  5608. 1215, 1215, 1216, 1, 1219, 1, 1207, 1,
  5609. 1, 1, 1, 1, 1, 1, 1, 1,
  5610. 1, 1, 1, 1, 1, 1, 1, 1,
  5611. 1, 1, 1, 1, 1, 1207, 1, 962,
  5612. 1, 1, 1, 963, 1, 1, 1, 1,
  5613. 1, 1, 1, 1, 1, 1, 1, 1,
  5614. 1, 1, 1, 1, 1, 1, 962, 1115,
  5615. 877, 1115, 1115, 1115, 1115, 1115, 965, 1,
  5616. 1115, 1115, 1, 1115, 1116, 1115, 1115, 1115,
  5617. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5618. 1, 880, 881, 1115, 1, 1115, 1, 1115,
  5619. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5620. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5621. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5622. 1115, 882, 1, 1, 1115, 1115, 1115, 1115,
  5623. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5624. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5625. 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
  5626. 1115, 1115, 1115, 1115, 1115, 1, 1, 1,
  5627. 1, 1, 1, 1, 1, 1, 1, 1,
  5628. 1, 1, 1, 1, 1, 1, 1, 1,
  5629. 1, 1, 1, 1, 1, 1, 1, 1,
  5630. 1, 1, 1, 1, 1, 1, 1, 1,
  5631. 1, 1, 1, 1, 1, 1, 1, 1,
  5632. 1, 1, 1, 1, 1, 1, 1, 1,
  5633. 1, 1, 1, 1, 1, 1, 1, 1,
  5634. 1, 1, 1, 1, 1, 1, 1, 1,
  5635. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5636. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5637. 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,
  5638. 1118, 1118, 1118, 1118, 1118, 1118, 1119, 1120,
  5639. 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
  5640. 1120, 1120, 1120, 1121, 1120, 1120, 1122, 1123,
  5641. 1123, 1123, 1124, 1, 1207, 1207, 1207, 1207,
  5642. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5643. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5644. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5645. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5646. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5647. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5648. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5649. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5650. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5651. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5652. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5653. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5654. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5655. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5656. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5657. 1207, 1207, 1207, 1207, 1, 1, 1, 1,
  5658. 1, 1, 1, 1, 1, 1, 1, 1,
  5659. 1, 1, 1, 1, 1, 1, 1, 1,
  5660. 1, 1, 1, 1, 1, 1, 1, 1,
  5661. 1, 1, 1, 1, 1, 1, 1, 1,
  5662. 1, 1, 1, 1, 1, 1, 1, 1,
  5663. 1, 1, 1, 1, 1, 1, 1, 1,
  5664. 1, 1, 1, 1, 1, 1, 1, 1,
  5665. 1, 1, 1, 1, 1, 1, 1210, 1210,
  5666. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5667. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5668. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5669. 1210, 1210, 1210, 1210, 1211, 1212, 1212, 1212,
  5670. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5671. 1212, 1213, 1212, 1212, 1214, 1215, 1215, 1215,
  5672. 1216, 1, 1207, 1207, 1207, 1207, 1207, 1207,
  5673. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5674. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5675. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5676. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5677. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5678. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5679. 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
  5680. 1207, 1207, 1, 1210, 1210, 1210, 1210, 1210,
  5681. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5682. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5683. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5684. 1210, 1210, 1210, 1, 1210, 1210, 1210, 1210,
  5685. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5686. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5687. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5688. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5689. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5690. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5691. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5692. 1210, 1210, 1210, 1210, 1, 1210, 1210, 1210,
  5693. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5694. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5695. 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
  5696. 1210, 1210, 1210, 1210, 1210, 1, 1212, 1212,
  5697. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5698. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5699. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5700. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5701. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5702. 1212, 1212, 1212, 1212, 1212, 1212, 1, 1212,
  5703. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5704. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5705. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5706. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5707. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5708. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5709. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5710. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1,
  5711. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5712. 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
  5713. 1, 1220, 1, 862, 1, 1, 1, 1,
  5714. 1, 1, 1, 1, 1, 1, 1, 1,
  5715. 1, 1, 1, 1, 1, 1, 1, 1,
  5716. 1, 1, 862, 1, 1221, 1, 1, 1,
  5717. 1222, 1, 1, 1, 1, 1, 1, 1,
  5718. 1, 1, 1, 1, 1, 1, 1, 1,
  5719. 1, 1, 1, 1221, 1223, 1224, 1223, 1223,
  5720. 1223, 1223, 1223, 1225, 1, 1223, 1223, 1,
  5721. 1223, 1226, 1223, 1223, 1223, 1223, 1223, 1223,
  5722. 1223, 1223, 1223, 1223, 1223, 1, 1, 1,
  5723. 1223, 1, 1223, 1, 1223, 1223, 1223, 1223,
  5724. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5725. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5726. 1223, 1223, 1223, 1223, 1223, 1223, 1227, 1,
  5727. 1, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5728. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5729. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5730. 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
  5731. 1223, 1223, 1, 1, 1, 1, 1, 1,
  5732. 1, 1, 1, 1, 1, 1, 1, 1,
  5733. 1, 1, 1, 1, 1, 1, 1, 1,
  5734. 1, 1, 1, 1, 1, 1, 1, 1,
  5735. 1, 1, 1, 1, 1, 1, 1, 1,
  5736. 1, 1, 1, 1, 1, 1, 1, 1,
  5737. 1, 1, 1, 1, 1, 1, 1, 1,
  5738. 1, 1, 1, 1, 1, 1, 1, 1,
  5739. 1, 1, 1, 1, 1, 1228, 1228, 1228,
  5740. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  5741. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  5742. 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
  5743. 1228, 1228, 1228, 1229, 1230, 1230, 1230, 1230,
  5744. 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
  5745. 1231, 1230, 1230, 1232, 1233, 1233, 1233, 1234,
  5746. 1, 1218, 862, 1218, 1218, 1218, 1218, 1218,
  5747. 1, 1, 1218, 1218, 1, 1218, 864, 1218,
  5748. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5749. 1218, 1218, 1, 1, 1, 1218, 1, 1218,
  5750. 1, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5751. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5752. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5753. 1218, 1218, 1218, 1, 1, 1, 1218, 1218,
  5754. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5755. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5756. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5757. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1,
  5758. 1, 1, 1, 1, 1, 1, 1, 1,
  5759. 1, 1, 1, 1, 1, 1, 1, 1,
  5760. 1, 1, 1, 1, 1, 1, 1, 1,
  5761. 1, 1, 1, 1, 1, 1, 1, 1,
  5762. 1, 1, 1, 1, 1, 1, 1, 1,
  5763. 1, 1, 1, 1, 1, 1, 1, 1,
  5764. 1, 1, 1, 1, 1, 1, 1, 1,
  5765. 1, 1, 1, 1, 1, 1, 1, 1,
  5766. 1, 1, 1235, 1235, 1235, 1235, 1235, 1235,
  5767. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5768. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5769. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5770. 1236, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5771. 1237, 1237, 1237, 1237, 1237, 1238, 1237, 1237,
  5772. 1239, 1240, 1240, 1240, 1241, 1, 1218, 1218,
  5773. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5774. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5775. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5776. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5777. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5778. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5779. 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
  5780. 1218, 1218, 1218, 1218, 1218, 1218, 1, 1235,
  5781. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5782. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5783. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5784. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1,
  5785. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5786. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5787. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5788. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5789. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5790. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5791. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5792. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5793. 1, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5794. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5795. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5796. 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,
  5797. 1235, 1, 1237, 1237, 1237, 1237, 1237, 1237,
  5798. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5799. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5800. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5801. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5802. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5803. 1237, 1237, 1, 1237, 1237, 1237, 1237, 1237,
  5804. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5805. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5806. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5807. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5808. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5809. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5810. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5811. 1237, 1237, 1237, 1, 1237, 1237, 1237, 1237,
  5812. 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
  5813. 1237, 1237, 1237, 1237, 1, 861, 861, 861,
  5814. 861, 861, 861, 861, 861, 861, 861, 861,
  5815. 861, 861, 861, 861, 861, 861, 861, 861,
  5816. 861, 861, 861, 861, 861, 861, 861, 861,
  5817. 861, 861, 861, 861, 861, 861, 861, 861,
  5818. 861, 861, 861, 861, 861, 861, 861, 861,
  5819. 861, 861, 861, 861, 861, 861, 861, 861,
  5820. 861, 861, 861, 861, 861, 861, 861, 861,
  5821. 861, 861, 861, 861, 861, 1, 866, 866,
  5822. 866, 866, 866, 866, 866, 866, 866, 866,
  5823. 866, 866, 866, 866, 866, 866, 866, 866,
  5824. 866, 866, 866, 866, 866, 866, 866, 866,
  5825. 866, 866, 866, 866, 866, 866, 1, 866,
  5826. 866, 866, 866, 866, 866, 866, 866, 866,
  5827. 866, 866, 866, 866, 866, 866, 866, 866,
  5828. 866, 866, 866, 866, 866, 866, 866, 866,
  5829. 866, 866, 866, 866, 866, 866, 866, 866,
  5830. 866, 866, 866, 866, 866, 866, 866, 866,
  5831. 866, 866, 866, 866, 866, 866, 866, 866,
  5832. 866, 866, 866, 866, 866, 866, 866, 866,
  5833. 866, 866, 866, 866, 866, 866, 866, 1,
  5834. 866, 866, 866, 866, 866, 866, 866, 866,
  5835. 866, 866, 866, 866, 866, 866, 866, 866,
  5836. 866, 866, 866, 866, 866, 866, 866, 866,
  5837. 866, 866, 866, 866, 866, 866, 866, 866,
  5838. 1, 868, 868, 868, 868, 868, 868, 868,
  5839. 868, 868, 868, 868, 868, 868, 868, 868,
  5840. 868, 868, 868, 868, 868, 868, 868, 868,
  5841. 868, 868, 868, 868, 868, 868, 868, 868,
  5842. 868, 868, 868, 868, 868, 868, 868, 868,
  5843. 868, 868, 868, 868, 868, 868, 868, 868,
  5844. 868, 1, 868, 868, 868, 868, 868, 868,
  5845. 868, 868, 868, 868, 868, 868, 868, 868,
  5846. 868, 868, 868, 868, 868, 868, 868, 868,
  5847. 868, 868, 868, 868, 868, 868, 868, 868,
  5848. 868, 868, 868, 868, 868, 868, 868, 868,
  5849. 868, 868, 868, 868, 868, 868, 868, 868,
  5850. 868, 868, 868, 868, 868, 868, 868, 868,
  5851. 868, 868, 868, 868, 868, 868, 868, 868,
  5852. 868, 868, 1, 868, 868, 868, 868, 868,
  5853. 868, 868, 868, 868, 868, 868, 868, 868,
  5854. 868, 868, 868, 1, 1242, 1242, 1242, 1242,
  5855. 1242, 1242, 1242, 1242, 1242, 1, 1242, 1242,
  5856. 1243, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5857. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5858. 1242, 1242, 1242, 1242, 1242, 1244, 1242, 1242,
  5859. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5860. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5861. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5862. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5863. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5864. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5865. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1245,
  5866. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5867. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5868. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5869. 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
  5870. 1242, 1242, 1242, 1, 1, 1, 1, 1,
  5871. 1, 1, 1, 1, 1, 1, 1, 1,
  5872. 1, 1, 1, 1, 1, 1, 1, 1,
  5873. 1, 1, 1, 1, 1, 1, 1, 1,
  5874. 1, 1, 1, 1, 1, 1, 1, 1,
  5875. 1, 1, 1, 1, 1, 1, 1, 1,
  5876. 1, 1, 1, 1, 1, 1, 1, 1,
  5877. 1, 1, 1, 1, 1, 1, 1, 1,
  5878. 1, 1, 1, 1, 1, 1246, 1246, 1246,
  5879. 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
  5880. 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
  5881. 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
  5882. 1246, 1246, 1246, 1247, 1248, 1248, 1248, 1248,
  5883. 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
  5884. 1249, 1248, 1248, 1250, 1251, 1251, 1251, 1252,
  5885. 1, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5886. 1253, 1253, 1, 1253, 1253, 1254, 1253, 1253,
  5887. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5888. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5889. 1253, 1253, 1255, 1253, 1253, 1253, 1253, 1253,
  5890. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5891. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5892. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5893. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5894. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5895. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5896. 1253, 1253, 1253, 1253, 1256, 1253, 1253, 1253,
  5897. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5898. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5899. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5900. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5901. 1, 1, 1, 1, 1, 1, 1, 1,
  5902. 1, 1, 1, 1, 1, 1, 1, 1,
  5903. 1, 1, 1, 1, 1, 1, 1, 1,
  5904. 1, 1, 1, 1, 1, 1, 1, 1,
  5905. 1, 1, 1, 1, 1, 1, 1, 1,
  5906. 1, 1, 1, 1, 1, 1, 1, 1,
  5907. 1, 1, 1, 1, 1, 1, 1, 1,
  5908. 1, 1, 1, 1, 1, 1, 1, 1,
  5909. 1, 1, 1257, 1257, 1257, 1257, 1257, 1257,
  5910. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5911. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5912. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5913. 1258, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5914. 1259, 1259, 1259, 1259, 1259, 1260, 1259, 1259,
  5915. 1261, 1262, 1262, 1262, 1263, 1, 1264, 1,
  5916. 1253, 1, 1, 1, 1, 1, 1, 1,
  5917. 1, 1, 1, 1, 1, 1, 1, 1,
  5918. 1, 1, 1, 1, 1, 1, 1, 1253,
  5919. 1, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5920. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5921. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5922. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5923. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5924. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5925. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5926. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5927. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5928. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5929. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5930. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5931. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5932. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5933. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5934. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5935. 1253, 1, 1, 1, 1, 1, 1, 1,
  5936. 1, 1, 1, 1, 1, 1, 1, 1,
  5937. 1, 1, 1, 1, 1, 1, 1, 1,
  5938. 1, 1, 1, 1, 1, 1, 1, 1,
  5939. 1, 1, 1, 1, 1, 1, 1, 1,
  5940. 1, 1, 1, 1, 1, 1, 1, 1,
  5941. 1, 1, 1, 1, 1, 1, 1, 1,
  5942. 1, 1, 1, 1, 1, 1, 1, 1,
  5943. 1, 1, 1, 1257, 1257, 1257, 1257, 1257,
  5944. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5945. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5946. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5947. 1257, 1258, 1259, 1259, 1259, 1259, 1259, 1259,
  5948. 1259, 1259, 1259, 1259, 1259, 1259, 1260, 1259,
  5949. 1259, 1261, 1262, 1262, 1262, 1263, 1, 1253,
  5950. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5951. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5952. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5953. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5954. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5955. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5956. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
  5957. 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1,
  5958. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5959. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5960. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5961. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5962. 1, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5963. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5964. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5965. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5966. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5967. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5968. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5969. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5970. 1257, 1, 1257, 1257, 1257, 1257, 1257, 1257,
  5971. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5972. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5973. 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
  5974. 1257, 1257, 1, 1259, 1259, 1259, 1259, 1259,
  5975. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5976. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5977. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5978. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5979. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5980. 1259, 1259, 1259, 1, 1259, 1259, 1259, 1259,
  5981. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5982. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5983. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5984. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5985. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5986. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5987. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5988. 1259, 1259, 1259, 1259, 1, 1259, 1259, 1259,
  5989. 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
  5990. 1259, 1259, 1259, 1259, 1259, 1, 1265, 1,
  5991. 1, 1, 1266, 1, 1, 1, 1, 1,
  5992. 1, 1, 1, 1, 1, 1, 1, 1,
  5993. 1, 1, 1, 1, 1, 1265, 1267, 1268,
  5994. 1267, 1267, 1267, 1267, 1267, 1269, 1, 1267,
  5995. 1267, 1, 1267, 1, 1267, 1267, 1267, 1267,
  5996. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1,
  5997. 1, 1, 1267, 1, 1267, 1, 1267, 1267,
  5998. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  5999. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  6000. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  6001. 1, 1, 1, 1267, 1267, 1267, 1267, 1267,
  6002. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  6003. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  6004. 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
  6005. 1267, 1267, 1267, 1267, 1, 1, 1, 1,
  6006. 1, 1, 1, 1, 1, 1, 1, 1,
  6007. 1, 1, 1, 1, 1, 1, 1, 1,
  6008. 1, 1, 1, 1, 1, 1, 1, 1,
  6009. 1, 1, 1, 1, 1, 1, 1, 1,
  6010. 1, 1, 1, 1, 1, 1, 1, 1,
  6011. 1, 1, 1, 1, 1, 1, 1, 1,
  6012. 1, 1, 1, 1, 1, 1, 1, 1,
  6013. 1, 1, 1, 1, 1, 1, 1, 1270,
  6014. 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270,
  6015. 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270,
  6016. 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270,
  6017. 1270, 1270, 1270, 1270, 1270, 1271, 1272, 1272,
  6018. 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272,
  6019. 1272, 1272, 1273, 1272, 1272, 1274, 1275, 1275,
  6020. 1275, 1276, 1, 161, 161, 161, 161, 161,
  6021. 161, 161, 161, 161, 161, 161, 161, 161,
  6022. 161, 161, 161, 161, 161, 161, 161, 161,
  6023. 161, 161, 161, 161, 161, 161, 161, 161,
  6024. 161, 161, 161, 161, 161, 161, 161, 161,
  6025. 161, 161, 161, 161, 161, 161, 161, 161,
  6026. 161, 161, 161, 161, 161, 161, 161, 161,
  6027. 161, 161, 161, 161, 161, 161, 161, 161,
  6028. 161, 161, 161, 1, 163, 163, 163, 163,
  6029. 163, 163, 163, 163, 163, 163, 163, 163,
  6030. 163, 163, 163, 163, 163, 163, 163, 163,
  6031. 163, 163, 163, 163, 163, 163, 163, 163,
  6032. 163, 163, 163, 163, 1, 163, 163, 163,
  6033. 163, 163, 163, 163, 163, 163, 163, 163,
  6034. 163, 163, 163, 163, 163, 163, 163, 163,
  6035. 163, 163, 163, 163, 163, 163, 163, 163,
  6036. 163, 163, 163, 163, 163, 163, 163, 163,
  6037. 163, 163, 163, 163, 163, 163, 163, 163,
  6038. 163, 163, 163, 163, 163, 163, 163, 163,
  6039. 163, 163, 163, 163, 163, 163, 163, 163,
  6040. 163, 163, 163, 163, 163, 1, 163, 163,
  6041. 163, 163, 163, 163, 163, 163, 163, 163,
  6042. 163, 163, 163, 163, 163, 163, 163, 163,
  6043. 163, 163, 163, 163, 163, 163, 163, 163,
  6044. 163, 163, 163, 163, 163, 163, 1, 165,
  6045. 165, 165, 165, 165, 165, 165, 165, 165,
  6046. 165, 165, 165, 165, 165, 165, 165, 165,
  6047. 165, 165, 165, 165, 165, 165, 165, 165,
  6048. 165, 165, 165, 165, 165, 165, 165, 165,
  6049. 165, 165, 165, 165, 165, 165, 165, 165,
  6050. 165, 165, 165, 165, 165, 165, 165, 1,
  6051. 165, 165, 165, 165, 165, 165, 165, 165,
  6052. 165, 165, 165, 165, 165, 165, 165, 165,
  6053. 165, 165, 165, 165, 165, 165, 165, 165,
  6054. 165, 165, 165, 165, 165, 165, 165, 165,
  6055. 165, 165, 165, 165, 165, 165, 165, 165,
  6056. 165, 165, 165, 165, 165, 165, 165, 165,
  6057. 165, 165, 165, 165, 165, 165, 165, 165,
  6058. 165, 165, 165, 165, 165, 165, 165, 165,
  6059. 1, 165, 165, 165, 165, 165, 165, 165,
  6060. 165, 165, 165, 165, 165, 165, 165, 165,
  6061. 165, 1, 1277, 1, 1, 1, 1278, 1,
  6062. 1, 1, 1, 1, 1, 1, 1, 1,
  6063. 1, 1, 1, 1, 1, 1, 1, 1,
  6064. 1, 1277, 37, 38, 37, 37, 37, 37,
  6065. 37, 1279, 1, 37, 37, 1, 37, 40,
  6066. 37, 37, 37, 37, 37, 37, 37, 37,
  6067. 37, 37, 37, 1, 41, 42, 37, 1,
  6068. 37, 43, 37, 37, 37, 37, 37, 37,
  6069. 37, 37, 37, 37, 37, 37, 37, 37,
  6070. 37, 37, 37, 37, 37, 37, 37, 37,
  6071. 37, 37, 37, 37, 44, 1, 1, 37,
  6072. 37, 37, 37, 37, 37, 37, 37, 37,
  6073. 37, 37, 37, 37, 37, 37, 37, 37,
  6074. 37, 37, 37, 37, 37, 37, 37, 37,
  6075. 37, 37, 37, 37, 37, 37, 37, 37,
  6076. 1, 1, 1, 1, 1, 1, 1, 1,
  6077. 1, 1, 1, 1, 1, 1, 1, 1,
  6078. 1, 1, 1, 1, 1, 1, 1, 1,
  6079. 1, 1, 1, 1, 1, 1, 1, 1,
  6080. 1, 1, 1, 1, 1, 1, 1, 1,
  6081. 1, 1, 1, 1, 1, 1, 1, 1,
  6082. 1, 1, 1, 1, 1, 1, 1, 1,
  6083. 1, 1, 1, 1, 1, 1, 1, 1,
  6084. 1, 1, 1, 45, 45, 45, 45, 45,
  6085. 45, 45, 45, 45, 45, 45, 45, 45,
  6086. 45, 45, 45, 45, 45, 45, 45, 45,
  6087. 45, 45, 45, 45, 45, 45, 45, 45,
  6088. 45, 46, 47, 47, 47, 47, 47, 47,
  6089. 47, 47, 47, 47, 47, 47, 48, 47,
  6090. 47, 49, 50, 50, 50, 51, 1, 1280,
  6091. 1, 1, 1, 1281, 1, 1, 1, 1,
  6092. 1, 1, 1, 1, 1, 1, 1, 1,
  6093. 1, 1, 1, 1, 1, 1, 1280, 54,
  6094. 55, 54, 54, 54, 54, 54, 1282, 1,
  6095. 54, 54, 1, 54, 1283, 54, 54, 54,
  6096. 54, 54, 54, 54, 54, 54, 54, 54,
  6097. 1, 58, 59, 54, 1, 54, 60, 54,
  6098. 54, 54, 54, 54, 54, 54, 54, 54,
  6099. 54, 54, 54, 54, 54, 54, 54, 54,
  6100. 54, 54, 54, 54, 54, 54, 54, 54,
  6101. 54, 61, 1, 1, 54, 54, 54, 54,
  6102. 54, 54, 54, 54, 54, 54, 54, 54,
  6103. 54, 54, 54, 54, 54, 54, 54, 54,
  6104. 54, 54, 54, 54, 54, 54, 54, 54,
  6105. 54, 54, 54, 54, 54, 1, 1, 1,
  6106. 1, 1, 1, 1, 1, 1, 1, 1,
  6107. 1, 1, 1, 1, 1, 1, 1, 1,
  6108. 1, 1, 1, 1, 1, 1, 1, 1,
  6109. 1, 1, 1, 1, 1, 1, 1, 1,
  6110. 1, 1, 1, 1, 1, 1, 1, 1,
  6111. 1, 1, 1, 1, 1, 1, 1, 1,
  6112. 1, 1, 1, 1, 1, 1, 1, 1,
  6113. 1, 1, 1, 1, 1, 1, 1, 1,
  6114. 62, 62, 62, 62, 62, 62, 62, 62,
  6115. 62, 62, 62, 62, 62, 62, 62, 62,
  6116. 62, 62, 62, 62, 62, 62, 62, 62,
  6117. 62, 62, 62, 62, 62, 62, 63, 64,
  6118. 64, 64, 64, 64, 64, 64, 64, 64,
  6119. 64, 64, 64, 65, 64, 64, 66, 67,
  6120. 67, 67, 68, 1, 1284, 1, 1285, 1,
  6121. 1, 1, 1, 1, 1, 1, 1, 1,
  6122. 1, 1, 1, 1, 1, 1, 1, 1,
  6123. 1, 1, 1, 1, 1, 1285, 1, 1286,
  6124. 1, 1, 1, 1287, 1, 1, 1, 1,
  6125. 1, 1, 1, 1, 1, 1, 1, 1,
  6126. 1, 1, 1, 1, 1, 1, 1286, 1000,
  6127. 1001, 1000, 1000, 1000, 1000, 1000, 1288, 1,
  6128. 1000, 1000, 1, 1000, 1289, 1000, 1000, 1000,
  6129. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6130. 1, 1004, 1005, 1000, 1, 1000, 1006, 1000,
  6131. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6132. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6133. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6134. 1000, 1007, 1, 1, 1000, 1000, 1000, 1000,
  6135. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6136. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6137. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6138. 1000, 1000, 1000, 1000, 1000, 1, 1, 1,
  6139. 1, 1, 1, 1, 1, 1, 1, 1,
  6140. 1, 1, 1, 1, 1, 1, 1, 1,
  6141. 1, 1, 1, 1, 1, 1, 1, 1,
  6142. 1, 1, 1, 1, 1, 1, 1, 1,
  6143. 1, 1, 1, 1, 1, 1, 1, 1,
  6144. 1, 1, 1, 1, 1, 1, 1, 1,
  6145. 1, 1, 1, 1, 1, 1, 1, 1,
  6146. 1, 1, 1, 1, 1, 1, 1, 1,
  6147. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6148. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6149. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6150. 1008, 1008, 1008, 1008, 1008, 1008, 1009, 1010,
  6151. 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010,
  6152. 1010, 1010, 1010, 1011, 1010, 1010, 1012, 1013,
  6153. 1013, 1013, 1014, 1, 1290, 1290, 1290, 1290,
  6154. 1290, 1290, 1290, 1290, 1291, 1, 1290, 1290,
  6155. 1292, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6156. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6157. 1290, 1290, 1290, 1291, 1290, 1244, 1290, 1290,
  6158. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6159. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6160. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6161. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6162. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6163. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6164. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1293,
  6165. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6166. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6167. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6168. 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
  6169. 1290, 1290, 1290, 1, 1, 1, 1, 1,
  6170. 1, 1, 1, 1, 1, 1, 1, 1,
  6171. 1, 1, 1, 1, 1, 1, 1, 1,
  6172. 1, 1, 1, 1, 1, 1, 1, 1,
  6173. 1, 1, 1, 1, 1, 1, 1, 1,
  6174. 1, 1, 1, 1, 1, 1, 1, 1,
  6175. 1, 1, 1, 1, 1, 1, 1, 1,
  6176. 1, 1, 1, 1, 1, 1, 1, 1,
  6177. 1, 1, 1, 1, 1, 1294, 1294, 1294,
  6178. 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
  6179. 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
  6180. 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
  6181. 1294, 1294, 1294, 1295, 1296, 1296, 1296, 1296,
  6182. 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
  6183. 1297, 1296, 1296, 1298, 1299, 1299, 1299, 1300,
  6184. 1, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6185. 1301, 1301, 1, 1301, 1301, 1302, 1301, 1301,
  6186. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6187. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6188. 1301, 1301, 1303, 1301, 1301, 1301, 1301, 1301,
  6189. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6190. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6191. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6192. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6193. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6194. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6195. 1301, 1301, 1301, 1301, 1304, 1301, 1301, 1301,
  6196. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6197. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6198. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6199. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6200. 1, 1, 1, 1, 1, 1, 1, 1,
  6201. 1, 1, 1, 1, 1, 1, 1, 1,
  6202. 1, 1, 1, 1, 1, 1, 1, 1,
  6203. 1, 1, 1, 1, 1, 1, 1, 1,
  6204. 1, 1, 1, 1, 1, 1, 1, 1,
  6205. 1, 1, 1, 1, 1, 1, 1, 1,
  6206. 1, 1, 1, 1, 1, 1, 1, 1,
  6207. 1, 1, 1, 1, 1, 1, 1, 1,
  6208. 1, 1, 1305, 1305, 1305, 1305, 1305, 1305,
  6209. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6210. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6211. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6212. 1306, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6213. 1307, 1307, 1307, 1307, 1307, 1308, 1307, 1307,
  6214. 1309, 1310, 1310, 1310, 1311, 1, 1312, 1,
  6215. 1301, 1, 1, 1, 1, 1, 1, 1,
  6216. 1, 1, 1, 1, 1, 1, 1, 1,
  6217. 1, 1, 1, 1, 1, 1, 1, 1301,
  6218. 1, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6219. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6220. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6221. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6222. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6223. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6224. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6225. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6226. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6227. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6228. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6229. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6230. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6231. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6232. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6233. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6234. 1301, 1, 1, 1, 1, 1, 1, 1,
  6235. 1, 1, 1, 1, 1, 1, 1, 1,
  6236. 1, 1, 1, 1, 1, 1, 1, 1,
  6237. 1, 1, 1, 1, 1, 1, 1, 1,
  6238. 1, 1, 1, 1, 1, 1, 1, 1,
  6239. 1, 1, 1, 1, 1, 1, 1, 1,
  6240. 1, 1, 1, 1, 1, 1, 1, 1,
  6241. 1, 1, 1, 1, 1, 1, 1, 1,
  6242. 1, 1, 1, 1305, 1305, 1305, 1305, 1305,
  6243. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6244. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6245. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6246. 1305, 1306, 1307, 1307, 1307, 1307, 1307, 1307,
  6247. 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1307,
  6248. 1307, 1309, 1310, 1310, 1310, 1311, 1, 1301,
  6249. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6250. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6251. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6252. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6253. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6254. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6255. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6256. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1,
  6257. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6258. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6259. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6260. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6261. 1, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6262. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6263. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6264. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6265. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6266. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6267. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6268. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6269. 1305, 1, 1305, 1305, 1305, 1305, 1305, 1305,
  6270. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6271. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6272. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6273. 1305, 1305, 1, 1307, 1307, 1307, 1307, 1307,
  6274. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6275. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6276. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6277. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6278. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6279. 1307, 1307, 1307, 1, 1307, 1307, 1307, 1307,
  6280. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6281. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6282. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6283. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6284. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6285. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6286. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6287. 1307, 1307, 1307, 1307, 1, 1307, 1307, 1307,
  6288. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6289. 1307, 1307, 1307, 1307, 1307, 1, 1301, 1301,
  6290. 1301, 1301, 1301, 1301, 1301, 1301, 1313, 1,
  6291. 1301, 1301, 1314, 1301, 1301, 1301, 1301, 1301,
  6292. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6293. 1301, 1301, 1301, 1301, 1301, 1313, 1301, 1255,
  6294. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6295. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6296. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6297. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6298. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6299. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6300. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6301. 1301, 1304, 1301, 1301, 1301, 1301, 1301, 1301,
  6302. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6303. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6304. 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
  6305. 1301, 1301, 1301, 1301, 1301, 1, 1, 1,
  6306. 1, 1, 1, 1, 1, 1, 1, 1,
  6307. 1, 1, 1, 1, 1, 1, 1, 1,
  6308. 1, 1, 1, 1, 1, 1, 1, 1,
  6309. 1, 1, 1, 1, 1, 1, 1, 1,
  6310. 1, 1, 1, 1, 1, 1, 1, 1,
  6311. 1, 1, 1, 1, 1, 1, 1, 1,
  6312. 1, 1, 1, 1, 1, 1, 1, 1,
  6313. 1, 1, 1, 1, 1, 1, 1, 1305,
  6314. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6315. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6316. 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
  6317. 1305, 1305, 1305, 1305, 1305, 1306, 1307, 1307,
  6318. 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
  6319. 1307, 1307, 1308, 1307, 1307, 1309, 1310, 1310,
  6320. 1310, 1311, 1, 1315, 1, 1313, 1, 1,
  6321. 1, 1, 1, 1, 1, 1, 1, 1,
  6322. 1, 1, 1, 1, 1, 1, 1, 1,
  6323. 1, 1, 1, 1, 1313, 1, 150, 150,
  6324. 150, 150, 150, 150, 150, 150, 150, 150,
  6325. 150, 150, 150, 150, 150, 150, 150, 150,
  6326. 150, 150, 150, 150, 150, 150, 150, 150,
  6327. 150, 150, 150, 150, 150, 150, 150, 150,
  6328. 150, 150, 150, 150, 150, 150, 150, 150,
  6329. 150, 150, 150, 150, 150, 150, 150, 150,
  6330. 150, 150, 150, 150, 150, 150, 150, 150,
  6331. 150, 150, 150, 150, 150, 150, 1, 154,
  6332. 154, 154, 154, 154, 154, 154, 154, 154,
  6333. 154, 154, 154, 154, 154, 154, 154, 154,
  6334. 154, 154, 154, 154, 154, 154, 154, 154,
  6335. 154, 154, 154, 154, 154, 154, 154, 1,
  6336. 154, 154, 154, 154, 154, 154, 154, 154,
  6337. 154, 154, 154, 154, 154, 154, 154, 154,
  6338. 154, 154, 154, 154, 154, 154, 154, 154,
  6339. 154, 154, 154, 154, 154, 154, 154, 154,
  6340. 154, 154, 154, 154, 154, 154, 154, 154,
  6341. 154, 154, 154, 154, 154, 154, 154, 154,
  6342. 154, 154, 154, 154, 154, 154, 154, 154,
  6343. 154, 154, 154, 154, 154, 154, 154, 154,
  6344. 1, 154, 154, 154, 154, 154, 154, 154,
  6345. 154, 154, 154, 154, 154, 154, 154, 154,
  6346. 154, 154, 154, 154, 154, 154, 154, 154,
  6347. 154, 154, 154, 154, 154, 154, 154, 154,
  6348. 154, 1, 156, 156, 156, 156, 156, 156,
  6349. 156, 156, 156, 156, 156, 156, 156, 156,
  6350. 156, 156, 156, 156, 156, 156, 156, 156,
  6351. 156, 156, 156, 156, 156, 156, 156, 156,
  6352. 156, 156, 156, 156, 156, 156, 156, 156,
  6353. 156, 156, 156, 156, 156, 156, 156, 156,
  6354. 156, 156, 1, 156, 156, 156, 156, 156,
  6355. 156, 156, 156, 156, 156, 156, 156, 156,
  6356. 156, 156, 156, 156, 156, 156, 156, 156,
  6357. 156, 156, 156, 156, 156, 156, 156, 156,
  6358. 156, 156, 156, 156, 156, 156, 156, 156,
  6359. 156, 156, 156, 156, 156, 156, 156, 156,
  6360. 156, 156, 156, 156, 156, 156, 156, 156,
  6361. 156, 156, 156, 156, 156, 156, 156, 156,
  6362. 156, 156, 156, 1, 156, 156, 156, 156,
  6363. 156, 156, 156, 156, 156, 156, 156, 156,
  6364. 156, 156, 156, 156, 1, 83, 83, 83,
  6365. 83, 83, 83, 83, 83, 83, 83, 83,
  6366. 83, 83, 83, 83, 83, 83, 83, 83,
  6367. 83, 83, 83, 83, 83, 83, 83, 83,
  6368. 83, 83, 83, 83, 83, 83, 83, 83,
  6369. 83, 83, 83, 83, 83, 83, 83, 83,
  6370. 83, 83, 83, 83, 83, 83, 83, 83,
  6371. 83, 83, 83, 83, 83, 83, 83, 83,
  6372. 83, 83, 83, 83, 83, 83, 83, 83,
  6373. 83, 83, 83, 83, 83, 83, 83, 83,
  6374. 83, 83, 83, 83, 83, 83, 83, 83,
  6375. 83, 83, 83, 83, 83, 83, 83, 83,
  6376. 83, 83, 83, 83, 83, 83, 83, 83,
  6377. 83, 83, 83, 83, 83, 83, 83, 83,
  6378. 83, 83, 83, 83, 83, 83, 83, 83,
  6379. 83, 83, 83, 83, 83, 83, 83, 83,
  6380. 83, 83, 83, 83, 83, 1, 1, 1,
  6381. 1, 1, 1, 1, 1, 1, 1, 1,
  6382. 1, 1, 1, 1, 1, 1, 1, 1,
  6383. 1, 1, 1, 1, 1, 1, 1, 1,
  6384. 1, 1, 1, 1, 1, 1, 1, 1,
  6385. 1, 1, 1, 1, 1, 1, 1, 1,
  6386. 1, 1, 1, 1, 1, 1, 1, 1,
  6387. 1, 1, 1, 1, 1, 1, 1, 1,
  6388. 1, 1, 1, 1, 1, 1, 1, 87,
  6389. 87, 87, 87, 87, 87, 87, 87, 87,
  6390. 87, 87, 87, 87, 87, 87, 87, 87,
  6391. 87, 87, 87, 87, 87, 87, 87, 87,
  6392. 87, 87, 87, 87, 87, 88, 89, 89,
  6393. 89, 89, 89, 89, 89, 89, 89, 89,
  6394. 89, 89, 90, 89, 89, 91, 92, 92,
  6395. 92, 93, 1, 83, 83, 83, 83, 83,
  6396. 83, 83, 83, 83, 83, 83, 83, 83,
  6397. 83, 83, 83, 83, 83, 83, 83, 83,
  6398. 83, 83, 83, 83, 83, 83, 83, 83,
  6399. 83, 83, 83, 83, 83, 83, 83, 83,
  6400. 83, 83, 83, 83, 83, 83, 83, 83,
  6401. 83, 83, 83, 83, 83, 83, 83, 83,
  6402. 83, 83, 83, 83, 83, 83, 83, 83,
  6403. 83, 83, 83, 1, 87, 87, 87, 87,
  6404. 87, 87, 87, 87, 87, 87, 87, 87,
  6405. 87, 87, 87, 87, 87, 87, 87, 87,
  6406. 87, 87, 87, 87, 87, 87, 87, 87,
  6407. 87, 87, 87, 87, 1, 87, 87, 87,
  6408. 87, 87, 87, 87, 87, 87, 87, 87,
  6409. 87, 87, 87, 87, 87, 87, 87, 87,
  6410. 87, 87, 87, 87, 87, 87, 87, 87,
  6411. 87, 87, 87, 87, 87, 87, 87, 87,
  6412. 87, 87, 87, 87, 87, 87, 87, 87,
  6413. 87, 87, 87, 87, 87, 87, 87, 87,
  6414. 87, 87, 87, 87, 87, 87, 87, 87,
  6415. 87, 87, 87, 87, 87, 1, 87, 87,
  6416. 87, 87, 87, 87, 87, 87, 87, 87,
  6417. 87, 87, 87, 87, 87, 87, 87, 87,
  6418. 87, 87, 87, 87, 87, 87, 87, 87,
  6419. 87, 87, 87, 87, 87, 87, 1, 89,
  6420. 89, 89, 89, 89, 89, 89, 89, 89,
  6421. 89, 89, 89, 89, 89, 89, 89, 89,
  6422. 89, 89, 89, 89, 89, 89, 89, 89,
  6423. 89, 89, 89, 89, 89, 89, 89, 89,
  6424. 89, 89, 89, 89, 89, 89, 89, 89,
  6425. 89, 89, 89, 89, 89, 89, 89, 1,
  6426. 89, 89, 89, 89, 89, 89, 89, 89,
  6427. 89, 89, 89, 89, 89, 89, 89, 89,
  6428. 89, 89, 89, 89, 89, 89, 89, 89,
  6429. 89, 89, 89, 89, 89, 89, 89, 89,
  6430. 89, 89, 89, 89, 89, 89, 89, 89,
  6431. 89, 89, 89, 89, 89, 89, 89, 89,
  6432. 89, 89, 89, 89, 89, 89, 89, 89,
  6433. 89, 89, 89, 89, 89, 89, 89, 89,
  6434. 1, 89, 89, 89, 89, 89, 89, 89,
  6435. 89, 89, 89, 89, 89, 89, 89, 89,
  6436. 89, 1, 83, 83, 83, 83, 83, 83,
  6437. 83, 83, 1316, 1, 83, 83, 1317, 83,
  6438. 83, 83, 83, 83, 83, 83, 83, 83,
  6439. 83, 83, 83, 83, 83, 83, 83, 83,
  6440. 83, 1316, 83, 1150, 83, 83, 83, 83,
  6441. 83, 83, 83, 83, 83, 83, 83, 83,
  6442. 83, 83, 83, 83, 83, 83, 83, 83,
  6443. 83, 83, 83, 83, 83, 83, 83, 83,
  6444. 83, 83, 83, 83, 83, 83, 83, 83,
  6445. 83, 83, 83, 83, 83, 83, 83, 83,
  6446. 83, 83, 83, 83, 83, 83, 83, 83,
  6447. 83, 83, 83, 83, 83, 86, 83, 83,
  6448. 83, 83, 83, 83, 83, 83, 83, 83,
  6449. 83, 83, 83, 83, 83, 83, 83, 83,
  6450. 83, 83, 83, 83, 83, 83, 83, 83,
  6451. 83, 83, 83, 83, 83, 83, 83, 83,
  6452. 83, 1, 1, 1, 1, 1, 1, 1,
  6453. 1, 1, 1, 1, 1, 1, 1, 1,
  6454. 1, 1, 1, 1, 1, 1, 1, 1,
  6455. 1, 1, 1, 1, 1, 1, 1, 1,
  6456. 1, 1, 1, 1, 1, 1, 1, 1,
  6457. 1, 1, 1, 1, 1, 1, 1, 1,
  6458. 1, 1, 1, 1, 1, 1, 1, 1,
  6459. 1, 1, 1, 1, 1, 1, 1, 1,
  6460. 1, 1, 1, 87, 87, 87, 87, 87,
  6461. 87, 87, 87, 87, 87, 87, 87, 87,
  6462. 87, 87, 87, 87, 87, 87, 87, 87,
  6463. 87, 87, 87, 87, 87, 87, 87, 87,
  6464. 87, 88, 89, 89, 89, 89, 89, 89,
  6465. 89, 89, 89, 89, 89, 89, 90, 89,
  6466. 89, 91, 92, 92, 92, 93, 1, 1318,
  6467. 1, 1316, 1, 1, 1, 1, 1, 1,
  6468. 1, 1, 1, 1, 1, 1, 1, 1,
  6469. 1, 1, 1, 1, 1, 1, 1, 1,
  6470. 1316, 1, 1319, 1, 1, 1, 1320, 1,
  6471. 1, 1, 1, 1, 1, 1, 1, 1,
  6472. 1, 1, 1, 1, 1, 1, 1, 1,
  6473. 1, 1319, 1000, 1001, 1000, 1000, 1000, 1000,
  6474. 1000, 1321, 1, 1000, 1000, 1, 1000, 1322,
  6475. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6476. 1000, 1000, 1000, 1, 1004, 1005, 1000, 1,
  6477. 1000, 1006, 1000, 1000, 1000, 1000, 1000, 1000,
  6478. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6479. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6480. 1000, 1000, 1000, 1000, 1007, 1, 1, 1000,
  6481. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6482. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6483. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6484. 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
  6485. 1, 1, 1, 1, 1, 1, 1, 1,
  6486. 1, 1, 1, 1, 1, 1, 1, 1,
  6487. 1, 1, 1, 1, 1, 1, 1, 1,
  6488. 1, 1, 1, 1, 1, 1, 1, 1,
  6489. 1, 1, 1, 1, 1, 1, 1, 1,
  6490. 1, 1, 1, 1, 1, 1, 1, 1,
  6491. 1, 1, 1, 1, 1, 1, 1, 1,
  6492. 1, 1, 1, 1, 1, 1, 1, 1,
  6493. 1, 1, 1, 1008, 1008, 1008, 1008, 1008,
  6494. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6495. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6496. 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
  6497. 1008, 1009, 1010, 1010, 1010, 1010, 1010, 1010,
  6498. 1010, 1010, 1010, 1010, 1010, 1010, 1011, 1010,
  6499. 1010, 1012, 1013, 1013, 1013, 1014, 1, 1323,
  6500. 1, 1, 1, 1324, 1, 1, 1, 1,
  6501. 1, 1, 1, 1, 1, 1, 1, 1,
  6502. 1, 1, 1, 1, 1, 1, 1323, 1325,
  6503. 151, 1325, 1325, 1325, 1325, 1325, 1326, 1,
  6504. 1325, 1325, 1, 1325, 153, 1325, 1325, 1325,
  6505. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6506. 1, 1, 1, 1325, 1, 1325, 1, 1325,
  6507. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6508. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6509. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6510. 1325, 1, 1, 1, 1325, 1325, 1325, 1325,
  6511. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6512. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6513. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6514. 1325, 1325, 1325, 1325, 1325, 1, 1, 1,
  6515. 1, 1, 1, 1, 1, 1, 1, 1,
  6516. 1, 1, 1, 1, 1, 1, 1, 1,
  6517. 1, 1, 1, 1, 1, 1, 1, 1,
  6518. 1, 1, 1, 1, 1, 1, 1, 1,
  6519. 1, 1, 1, 1, 1, 1, 1, 1,
  6520. 1, 1, 1, 1, 1, 1, 1, 1,
  6521. 1, 1, 1, 1, 1, 1, 1, 1,
  6522. 1, 1, 1, 1, 1, 1, 1, 1,
  6523. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6524. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6525. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6526. 1327, 1327, 1327, 1327, 1327, 1327, 1328, 1329,
  6527. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6528. 1329, 1329, 1329, 1330, 1329, 1329, 1331, 1332,
  6529. 1332, 1332, 1333, 1, 1323, 1, 1, 1,
  6530. 1324, 1, 1, 1, 1, 1, 1, 1,
  6531. 1, 1, 1, 1, 1, 1, 1, 1,
  6532. 1, 1, 1, 1323, 1334, 162, 1334, 1334,
  6533. 1334, 1334, 1334, 1326, 1, 1334, 1334, 1,
  6534. 1334, 1, 1334, 1334, 1334, 1334, 1334, 1334,
  6535. 1334, 1334, 1334, 1334, 1334, 1, 1, 1,
  6536. 1334, 1, 1334, 1, 1334, 1334, 1334, 1334,
  6537. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6538. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6539. 1334, 1334, 1334, 1334, 1334, 1334, 1, 1,
  6540. 1, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6541. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6542. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6543. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6544. 1334, 1334, 1, 1, 1, 1, 1, 1,
  6545. 1, 1, 1, 1, 1, 1, 1, 1,
  6546. 1, 1, 1, 1, 1, 1, 1, 1,
  6547. 1, 1, 1, 1, 1, 1, 1, 1,
  6548. 1, 1, 1, 1, 1, 1, 1, 1,
  6549. 1, 1, 1, 1, 1, 1, 1, 1,
  6550. 1, 1, 1, 1, 1, 1, 1, 1,
  6551. 1, 1, 1, 1, 1, 1, 1, 1,
  6552. 1, 1, 1, 1, 1, 1335, 1335, 1335,
  6553. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6554. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6555. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6556. 1335, 1335, 1335, 1336, 1337, 1337, 1337, 1337,
  6557. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6558. 1338, 1337, 1337, 1339, 1340, 1340, 1340, 1341,
  6559. 1, 1342, 1, 1323, 1, 1, 1, 1,
  6560. 1, 1, 1, 1, 1, 1, 1, 1,
  6561. 1, 1, 1, 1, 1, 1, 1, 1,
  6562. 1, 1, 1323, 1, 1343, 1, 1, 1,
  6563. 1344, 1, 1, 1, 1, 1, 1, 1,
  6564. 1, 1, 1, 1, 1, 1, 1, 1,
  6565. 1, 1, 1, 1343, 964, 941, 964, 964,
  6566. 964, 964, 964, 1345, 1, 964, 964, 1,
  6567. 964, 1346, 964, 964, 964, 964, 964, 964,
  6568. 964, 964, 964, 964, 964, 1, 880, 881,
  6569. 964, 1, 964, 175, 964, 964, 964, 964,
  6570. 964, 964, 964, 964, 964, 964, 964, 964,
  6571. 964, 964, 964, 964, 964, 964, 964, 964,
  6572. 964, 964, 964, 964, 964, 964, 882, 1,
  6573. 1, 964, 964, 964, 964, 964, 964, 964,
  6574. 964, 964, 964, 964, 964, 964, 964, 964,
  6575. 964, 964, 964, 964, 964, 964, 964, 964,
  6576. 964, 964, 964, 964, 964, 964, 964, 964,
  6577. 964, 964, 1, 1, 1, 1, 1, 1,
  6578. 1, 1, 1, 1, 1, 1, 1, 1,
  6579. 1, 1, 1, 1, 1, 1, 1, 1,
  6580. 1, 1, 1, 1, 1, 1, 1, 1,
  6581. 1, 1, 1, 1, 1, 1, 1, 1,
  6582. 1, 1, 1, 1, 1, 1, 1, 1,
  6583. 1, 1, 1, 1, 1, 1, 1, 1,
  6584. 1, 1, 1, 1, 1, 1, 1, 1,
  6585. 1, 1, 1, 1, 1, 967, 967, 967,
  6586. 967, 967, 967, 967, 967, 967, 967, 967,
  6587. 967, 967, 967, 967, 967, 967, 967, 967,
  6588. 967, 967, 967, 967, 967, 967, 967, 967,
  6589. 967, 967, 967, 968, 969, 969, 969, 969,
  6590. 969, 969, 969, 969, 969, 969, 969, 969,
  6591. 970, 969, 969, 971, 972, 972, 972, 973,
  6592. 1, 1343, 1, 1, 1, 1344, 1, 1,
  6593. 1, 1, 1, 1, 1, 1, 1, 1,
  6594. 1, 1, 1, 1, 1, 1, 1, 1,
  6595. 1343, 890, 891, 890, 890, 890, 890, 890,
  6596. 1345, 1, 890, 890, 1, 890, 1347, 890,
  6597. 890, 890, 890, 890, 890, 890, 890, 890,
  6598. 890, 890, 1, 880, 893, 890, 1, 890,
  6599. 175, 890, 890, 890, 890, 890, 890, 890,
  6600. 890, 890, 890, 890, 890, 890, 890, 890,
  6601. 890, 890, 890, 890, 890, 890, 890, 890,
  6602. 890, 890, 890, 882, 1, 1, 890, 890,
  6603. 890, 890, 890, 890, 890, 890, 890, 890,
  6604. 890, 890, 890, 890, 890, 890, 890, 890,
  6605. 890, 890, 890, 890, 890, 890, 890, 890,
  6606. 890, 890, 890, 890, 890, 890, 890, 1,
  6607. 1, 1, 1, 1, 1, 1, 1, 1,
  6608. 1, 1, 1, 1, 1, 1, 1, 1,
  6609. 1, 1, 1, 1, 1, 1, 1, 1,
  6610. 1, 1, 1, 1, 1, 1, 1, 1,
  6611. 1, 1, 1, 1, 1, 1, 1, 1,
  6612. 1, 1, 1, 1, 1, 1, 1, 1,
  6613. 1, 1, 1, 1, 1, 1, 1, 1,
  6614. 1, 1, 1, 1, 1, 1, 1, 1,
  6615. 1, 1, 894, 894, 894, 894, 894, 894,
  6616. 894, 894, 894, 894, 894, 894, 894, 894,
  6617. 894, 894, 894, 894, 894, 894, 894, 894,
  6618. 894, 894, 894, 894, 894, 894, 894, 894,
  6619. 895, 896, 896, 896, 896, 896, 896, 896,
  6620. 896, 896, 896, 896, 896, 897, 896, 896,
  6621. 898, 899, 899, 899, 900, 1, 1348, 1,
  6622. 1349, 1, 1, 1, 1, 1, 1, 1,
  6623. 1, 1, 1, 1, 1, 1, 1, 1,
  6624. 1, 1, 1, 1, 1, 1, 1, 1349,
  6625. 1, 1350, 1, 1, 1, 1351, 1, 1,
  6626. 1, 1, 1, 1, 1, 1, 1, 1,
  6627. 1, 1, 1, 1, 1, 1, 1, 1,
  6628. 1350, 905, 906, 905, 905, 905, 905, 905,
  6629. 1352, 1, 905, 905, 1, 905, 1353, 905,
  6630. 905, 905, 905, 905, 905, 905, 905, 905,
  6631. 905, 905, 1, 909, 910, 905, 1, 905,
  6632. 185, 905, 905, 905, 905, 905, 905, 905,
  6633. 905, 905, 905, 905, 905, 905, 905, 905,
  6634. 905, 905, 905, 905, 905, 905, 905, 905,
  6635. 905, 905, 905, 911, 1, 1, 905, 905,
  6636. 905, 905, 905, 905, 905, 905, 905, 905,
  6637. 905, 905, 905, 905, 905, 905, 905, 905,
  6638. 905, 905, 905, 905, 905, 905, 905, 905,
  6639. 905, 905, 905, 905, 905, 905, 905, 1,
  6640. 1, 1, 1, 1, 1, 1, 1, 1,
  6641. 1, 1, 1, 1, 1, 1, 1, 1,
  6642. 1, 1, 1, 1, 1, 1, 1, 1,
  6643. 1, 1, 1, 1, 1, 1, 1, 1,
  6644. 1, 1, 1, 1, 1, 1, 1, 1,
  6645. 1, 1, 1, 1, 1, 1, 1, 1,
  6646. 1, 1, 1, 1, 1, 1, 1, 1,
  6647. 1, 1, 1, 1, 1, 1, 1, 1,
  6648. 1, 1, 912, 912, 912, 912, 912, 912,
  6649. 912, 912, 912, 912, 912, 912, 912, 912,
  6650. 912, 912, 912, 912, 912, 912, 912, 912,
  6651. 912, 912, 912, 912, 912, 912, 912, 912,
  6652. 913, 914, 914, 914, 914, 914, 914, 914,
  6653. 914, 914, 914, 914, 914, 915, 914, 914,
  6654. 916, 917, 917, 917, 918, 1, 1354, 1,
  6655. 1, 1, 1355, 1, 1, 1, 1, 1,
  6656. 1, 1, 1, 1, 1, 1, 1, 1,
  6657. 1, 1, 1, 1, 1, 1354, 1356, 1268,
  6658. 1356, 1356, 1356, 1356, 1356, 1357, 1, 1356,
  6659. 1356, 1, 1356, 1, 1356, 1356, 1356, 1356,
  6660. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1,
  6661. 1, 1, 1356, 1, 1356, 1, 1356, 1356,
  6662. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6663. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6664. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6665. 1, 1, 1, 1356, 1356, 1356, 1356, 1356,
  6666. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6667. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6668. 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
  6669. 1356, 1356, 1356, 1356, 1, 1, 1, 1,
  6670. 1, 1, 1, 1, 1, 1, 1, 1,
  6671. 1, 1, 1, 1, 1, 1, 1, 1,
  6672. 1, 1, 1, 1, 1, 1, 1, 1,
  6673. 1, 1, 1, 1, 1, 1, 1, 1,
  6674. 1, 1, 1, 1, 1, 1, 1, 1,
  6675. 1, 1, 1, 1, 1, 1, 1, 1,
  6676. 1, 1, 1, 1, 1, 1, 1, 1,
  6677. 1, 1, 1, 1, 1, 1, 1, 1358,
  6678. 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,
  6679. 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,
  6680. 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,
  6681. 1358, 1358, 1358, 1358, 1358, 1359, 1360, 1360,
  6682. 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
  6683. 1360, 1360, 1361, 1360, 1360, 1362, 1363, 1363,
  6684. 1363, 1364, 1, 1334, 1334, 1334, 1334, 1334,
  6685. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6686. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6687. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6688. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6689. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6690. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6691. 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
  6692. 1334, 1334, 1334, 1, 1335, 1335, 1335, 1335,
  6693. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6694. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6695. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6696. 1335, 1335, 1335, 1335, 1, 1335, 1335, 1335,
  6697. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6698. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6699. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6700. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6701. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6702. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6703. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6704. 1335, 1335, 1335, 1335, 1335, 1, 1335, 1335,
  6705. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6706. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6707. 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
  6708. 1335, 1335, 1335, 1335, 1335, 1335, 1, 1337,
  6709. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6710. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6711. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6712. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6713. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6714. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1,
  6715. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6716. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6717. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6718. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6719. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6720. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6721. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6722. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6723. 1, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6724. 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337,
  6725. 1337, 1, 35, 1, 1, 1, 36, 1,
  6726. 1, 1, 1, 1, 1, 1, 1, 1,
  6727. 1, 1, 1, 1, 1, 1, 1, 1,
  6728. 1, 35, 37, 38, 37, 37, 37, 37,
  6729. 37, 1365, 1, 37, 37, 1, 37, 40,
  6730. 37, 37, 37, 37, 37, 37, 37, 37,
  6731. 37, 37, 37, 1, 41, 42, 37, 1,
  6732. 37, 43, 37, 37, 37, 37, 37, 37,
  6733. 37, 37, 37, 37, 37, 37, 37, 37,
  6734. 37, 37, 37, 37, 37, 37, 37, 37,
  6735. 37, 37, 37, 37, 44, 1, 1, 37,
  6736. 37, 37, 37, 37, 37, 37, 37, 37,
  6737. 37, 37, 37, 37, 37, 37, 37, 37,
  6738. 37, 37, 37, 37, 37, 37, 37, 37,
  6739. 37, 37, 37, 37, 37, 37, 37, 37,
  6740. 1, 1, 1, 1, 1, 1, 1, 1,
  6741. 1, 1, 1, 1, 1, 1, 1, 1,
  6742. 1, 1, 1, 1, 1, 1, 1, 1,
  6743. 1, 1, 1, 1, 1, 1, 1, 1,
  6744. 1, 1, 1, 1, 1, 1, 1, 1,
  6745. 1, 1, 1, 1, 1, 1, 1, 1,
  6746. 1, 1, 1, 1, 1, 1, 1, 1,
  6747. 1, 1, 1, 1, 1, 1, 1, 1,
  6748. 1, 1, 1, 45, 45, 45, 45, 45,
  6749. 45, 45, 45, 45, 45, 45, 45, 45,
  6750. 45, 45, 45, 45, 45, 45, 45, 45,
  6751. 45, 45, 45, 45, 45, 45, 45, 45,
  6752. 45, 46, 47, 47, 47, 47, 47, 47,
  6753. 47, 47, 47, 47, 47, 47, 48, 47,
  6754. 47, 49, 50, 50, 50, 51, 1, 1325,
  6755. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6756. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6757. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6758. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6759. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6760. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6761. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
  6762. 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1,
  6763. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6764. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6765. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6766. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6767. 1, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6768. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6769. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6770. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6771. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6772. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6773. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6774. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6775. 1327, 1, 1327, 1327, 1327, 1327, 1327, 1327,
  6776. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6777. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6778. 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
  6779. 1327, 1327, 1, 1329, 1329, 1329, 1329, 1329,
  6780. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6781. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6782. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6783. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6784. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6785. 1329, 1329, 1329, 1, 1329, 1329, 1329, 1329,
  6786. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6787. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6788. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6789. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6790. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6791. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6792. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6793. 1329, 1329, 1329, 1329, 1, 1329, 1329, 1329,
  6794. 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
  6795. 1329, 1329, 1329, 1329, 1329, 1, 1366, 1,
  6796. 1, 1, 1367, 1, 1, 1, 1, 1,
  6797. 1, 1, 1, 1, 1, 1, 1, 1,
  6798. 1, 1, 1, 1, 1, 1366, 179, 180,
  6799. 179, 179, 179, 179, 179, 1368, 1, 179,
  6800. 179, 1, 179, 1369, 179, 179, 179, 179,
  6801. 179, 179, 179, 179, 179, 179, 179, 1,
  6802. 183, 184, 179, 1, 179, 1, 179, 179,
  6803. 179, 179, 179, 179, 179, 179, 179, 179,
  6804. 179, 179, 179, 179, 179, 179, 179, 179,
  6805. 179, 179, 179, 179, 179, 179, 179, 179,
  6806. 186, 1, 1, 179, 179, 179, 179, 179,
  6807. 179, 179, 179, 179, 179, 179, 179, 179,
  6808. 179, 179, 179, 179, 179, 179, 179, 179,
  6809. 179, 179, 179, 179, 179, 179, 179, 179,
  6810. 179, 179, 179, 179, 1, 1, 1, 1,
  6811. 1, 1, 1, 1, 1, 1, 1, 1,
  6812. 1, 1, 1, 1, 1, 1, 1, 1,
  6813. 1, 1, 1, 1, 1, 1, 1, 1,
  6814. 1, 1, 1, 1, 1, 1, 1, 1,
  6815. 1, 1, 1, 1, 1, 1, 1, 1,
  6816. 1, 1, 1, 1, 1, 1, 1, 1,
  6817. 1, 1, 1, 1, 1, 1, 1, 1,
  6818. 1, 1, 1, 1, 1, 1, 1, 187,
  6819. 187, 187, 187, 187, 187, 187, 187, 187,
  6820. 187, 187, 187, 187, 187, 187, 187, 187,
  6821. 187, 187, 187, 187, 187, 187, 187, 187,
  6822. 187, 187, 187, 187, 187, 188, 189, 189,
  6823. 189, 189, 189, 189, 189, 189, 189, 189,
  6824. 189, 189, 190, 189, 189, 191, 192, 192,
  6825. 192, 193, 1, 1370, 1370, 1370, 1370, 1370,
  6826. 1370, 1370, 1370, 1370, 1, 1370, 1370, 1371,
  6827. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6828. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6829. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6830. 1370, 1370, 1372, 1373, 1370, 1370, 1370, 1370,
  6831. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6832. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6833. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6834. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6835. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6836. 1370, 1370, 1370, 1370, 1370, 1370, 1374, 1370,
  6837. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6838. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6839. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6840. 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370,
  6841. 1370, 1370, 1, 1, 1, 1, 1, 1,
  6842. 1, 1, 1, 1, 1, 1, 1, 1,
  6843. 1, 1, 1, 1, 1, 1, 1, 1,
  6844. 1, 1, 1, 1, 1, 1, 1, 1,
  6845. 1, 1, 1, 1, 1, 1, 1, 1,
  6846. 1, 1, 1, 1, 1, 1, 1, 1,
  6847. 1, 1, 1, 1, 1, 1, 1, 1,
  6848. 1, 1, 1, 1, 1, 1, 1, 1,
  6849. 1, 1, 1, 1, 1375, 1375, 1375, 1375,
  6850. 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
  6851. 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
  6852. 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375,
  6853. 1375, 1375, 1376, 1377, 1377, 1377, 1377, 1377,
  6854. 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1378,
  6855. 1377, 1377, 1379, 1380, 1380, 1380, 1381, 1,
  6856. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6857. 1382, 1, 1382, 1382, 1383, 1382, 1382, 1382,
  6858. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6859. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6860. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1384,
  6861. 1385, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6862. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6863. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6864. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6865. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6866. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6867. 1382, 1382, 1382, 1386, 1382, 1382, 1382, 1382,
  6868. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6869. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6870. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6871. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1,
  6872. 1, 1, 1, 1, 1, 1, 1, 1,
  6873. 1, 1, 1, 1, 1, 1, 1, 1,
  6874. 1, 1, 1, 1, 1, 1, 1, 1,
  6875. 1, 1, 1, 1, 1, 1, 1, 1,
  6876. 1, 1, 1, 1, 1, 1, 1, 1,
  6877. 1, 1, 1, 1, 1, 1, 1, 1,
  6878. 1, 1, 1, 1, 1, 1, 1, 1,
  6879. 1, 1, 1, 1, 1, 1, 1, 1,
  6880. 1, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6881. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6882. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6883. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1388,
  6884. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6885. 1389, 1389, 1389, 1389, 1390, 1389, 1389, 1391,
  6886. 1392, 1392, 1392, 1393, 1, 1394, 1, 1382,
  6887. 1, 1, 1, 1, 1, 1, 1, 1,
  6888. 1, 1, 1, 1, 1, 1, 1, 1,
  6889. 1, 1, 1, 1, 1, 1, 1382, 1,
  6890. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6891. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6892. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6893. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6894. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6895. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6896. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6897. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6898. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6899. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6900. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6901. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6902. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6903. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6904. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6905. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6906. 1, 1, 1, 1, 1, 1, 1, 1,
  6907. 1, 1, 1, 1, 1, 1, 1, 1,
  6908. 1, 1, 1, 1, 1, 1, 1, 1,
  6909. 1, 1, 1, 1, 1, 1, 1, 1,
  6910. 1, 1, 1, 1, 1, 1, 1, 1,
  6911. 1, 1, 1, 1, 1, 1, 1, 1,
  6912. 1, 1, 1, 1, 1, 1, 1, 1,
  6913. 1, 1, 1, 1, 1, 1, 1, 1,
  6914. 1, 1, 1387, 1387, 1387, 1387, 1387, 1387,
  6915. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6916. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6917. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6918. 1388, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6919. 1389, 1389, 1389, 1389, 1389, 1390, 1389, 1389,
  6920. 1391, 1392, 1392, 1392, 1393, 1, 1382, 1382,
  6921. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6922. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6923. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6924. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6925. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6926. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6927. 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
  6928. 1382, 1382, 1382, 1382, 1382, 1382, 1, 1387,
  6929. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6930. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6931. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6932. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1,
  6933. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6934. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6935. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6936. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6937. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6938. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6939. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6940. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6941. 1, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6942. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6943. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6944. 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
  6945. 1387, 1, 1389, 1389, 1389, 1389, 1389, 1389,
  6946. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6947. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6948. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6949. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6950. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6951. 1389, 1389, 1, 1389, 1389, 1389, 1389, 1389,
  6952. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6953. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6954. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6955. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6956. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6957. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6958. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6959. 1389, 1389, 1389, 1, 1389, 1389, 1389, 1389,
  6960. 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
  6961. 1389, 1389, 1389, 1389, 1, 1395, 1, 1,
  6962. 1, 1396, 1, 1, 1, 1, 1, 1,
  6963. 1, 1, 1, 1, 1, 1, 1, 1,
  6964. 1, 1, 1, 1, 1395, 1, 1, 1,
  6965. 1, 1, 1, 1, 1397, 1, 311, 1,
  6966. 1, 1, 1398, 1, 1, 1, 1, 1,
  6967. 1, 1, 1, 1, 1, 1, 1, 1,
  6968. 1, 1, 1, 1, 1, 311, 1, 1,
  6969. 1, 1, 1, 1, 1, 1399, 1, 1400,
  6970. 1, 1, 1, 1401, 1, 1, 1, 1,
  6971. 1, 1, 1, 1, 1, 1, 1, 1,
  6972. 1, 1, 1, 1, 1, 1, 1400, 1,
  6973. 1, 1, 1, 1, 1, 1, 1402, 1,
  6974. 1395, 1, 1, 1, 1396, 1, 1, 1,
  6975. 1, 1, 1, 1, 1, 1, 1, 1,
  6976. 1, 1, 1, 1, 1, 1, 1, 1395,
  6977. 1, 1, 1, 1, 1, 1, 1, 1397,
  6978. 1, 1, 1, 1, 1, 1, 1, 1,
  6979. 1, 1, 1, 1, 1, 1, 1, 1,
  6980. 1, 1, 1, 1, 1, 1, 1, 1,
  6981. 1, 1, 1, 1403, 1, 1, 1, 1,
  6982. 1, 1, 1, 1, 1, 1, 1, 1,
  6983. 1, 1, 1403, 1, 1395, 1, 1, 1,
  6984. 1396, 1, 1, 1, 1, 1, 1, 1,
  6985. 1, 1, 1, 1, 1, 1, 1, 1,
  6986. 1, 1, 1, 1395, 1, 1, 1, 1,
  6987. 1, 1, 1, 1397, 1, 1, 1, 1,
  6988. 1, 1, 1, 1, 1, 1, 1, 1,
  6989. 1, 1, 1, 1, 1, 1, 1, 1,
  6990. 1, 1, 1, 1, 1, 1, 1, 1,
  6991. 1, 1, 1, 1, 1, 1, 1, 1,
  6992. 1403, 1, 1395, 1, 1, 1, 1396, 1,
  6993. 1, 1, 1, 1, 1, 1, 1, 1,
  6994. 1, 1, 1, 1, 1, 1, 1, 1,
  6995. 1, 1395, 1, 1, 1, 1, 1, 1,
  6996. 1, 1397, 1, 1, 1, 1, 1, 1,
  6997. 1, 1, 1, 1, 1, 1, 1, 1,
  6998. 1, 1, 1, 1, 1, 1, 1, 1,
  6999. 1, 1, 1, 1, 1, 1, 1, 1,
  7000. 1, 1, 1, 1, 1, 1, 1, 1,
  7001. 1, 1, 1, 1, 1, 283, 1, 1,
  7002. 0,
  7003. ]
  7004. 1 class << self
  7005. 1 attr_accessor :_trans_targs
  7006. 1 private :_trans_targs, :_trans_targs=
  7007. end
  7008. 1 self._trans_targs = [
  7009. 2, 0, 3, 5, 9, 635, 413, 26,
  7010. 116, 397, 419, 420, 421, 422, 423, 424,
  7011. 425, 2, 3, 5, 9, 635, 413, 26,
  7012. 116, 397, 419, 420, 421, 422, 423, 424,
  7013. 425, 4, 2, 6, 7, 5, 9, 609,
  7014. 426, 26, 116, 382, 397, 419, 420, 421,
  7015. 422, 423, 424, 425, 6, 7, 5, 9,
  7016. 609, 610, 26, 116, 382, 397, 419, 420,
  7017. 421, 422, 423, 424, 425, 8, 6, 10,
  7018. 606, 607, 507, 598, 599, 600, 601, 602,
  7019. 603, 604, 605, 10, 11, 13, 598, 599,
  7020. 600, 601, 602, 603, 604, 605, 12, 14,
  7021. 15, 5, 9, 17, 426, 26, 116, 382,
  7022. 397, 419, 420, 421, 422, 423, 424, 425,
  7023. 14, 15, 5, 9, 17, 18, 26, 116,
  7024. 382, 397, 419, 420, 421, 422, 423, 424,
  7025. 425, 16, 14, 14, 15, 5, 9, 17,
  7026. 18, 26, 116, 382, 397, 419, 420, 421,
  7027. 422, 423, 424, 425, 19, 20, 571, 576,
  7028. 563, 413, 591, 592, 593, 594, 595, 596,
  7029. 597, 22, 551, 564, 565, 566, 567, 568,
  7030. 569, 570, 21, 22, 23, 25, 18, 382,
  7031. 24, 22, 23, 5, 9, 25, 18, 26,
  7032. 116, 382, 397, 419, 420, 421, 422, 423,
  7033. 424, 425, 27, 28, 30, 31, 96, 107,
  7034. 109, 111, 114, 27, 28, 30, 31, 29,
  7035. 27, 28, 30, 31, 96, 107, 109, 111,
  7036. 114, 32, 33, 35, 36, 81, 83, 85,
  7037. 88, 90, 92, 94, 34, 32, 33, 35,
  7038. 36, 81, 83, 85, 88, 90, 92, 94,
  7039. 37, 80, 38, 39, 41, 42, 40, 38,
  7040. 39, 41, 42, 43, 44, 45, 47, 48,
  7041. 46, 44, 45, 47, 48, 49, 50, 52,
  7042. 53, 51, 49, 50, 52, 53, 54, 56,
  7043. 57, 55, 54, 56, 57, 58, 59, 60,
  7044. 62, 63, 73, 648, 651, 652, 653, 61,
  7045. 59, 60, 62, 63, 64, 66, 67, 65,
  7046. 64, 66, 67, 68, 69, 70, 72, 71,
  7047. 69, 70, 72, 74, 75, 76, 78, 649,
  7048. 82, 84, 86, 87, 89, 91, 93, 95,
  7049. 97, 98, 99, 101, 102, 100, 98, 99,
  7050. 101, 102, 103, 104, 106, 103, 104, 106,
  7051. 105, 103, 104, 106, 108, 110, 112, 113,
  7052. 115, 117, 118, 120, 275, 299, 300, 322,
  7053. 304, 268, 269, 270, 271, 272, 273, 274,
  7054. 117, 118, 299, 300, 304, 119, 121, 122,
  7055. 120, 221, 124, 247, 2, 133, 268, 269,
  7056. 270, 271, 272, 273, 274, 121, 122, 124,
  7057. 125, 133, 123, 121, 122, 124, 125, 2,
  7058. 133, 126, 128, 208, 220, 201, 202, 203,
  7059. 204, 205, 206, 207, 127, 129, 130, 132,
  7060. 133, 131, 129, 130, 132, 133, 134, 135,
  7061. 137, 154, 189, 163, 190, 182, 183, 184,
  7062. 185, 186, 187, 188, 134, 135, 137, 154,
  7063. 189, 163, 190, 182, 183, 184, 185, 186,
  7064. 187, 188, 136, 138, 139, 141, 181, 2,
  7065. 142, 140, 138, 139, 141, 142, 2, 143,
  7066. 145, 153, 146, 147, 148, 149, 150, 151,
  7067. 152, 144, 143, 145, 153, 146, 147, 148,
  7068. 149, 150, 151, 152, 155, 179, 171, 172,
  7069. 173, 174, 175, 176, 177, 178, 156, 158,
  7070. 157, 159, 160, 162, 164, 165, 166, 167,
  7071. 168, 169, 170, 161, 159, 160, 162, 180,
  7072. 134, 135, 137, 154, 189, 163, 190, 182,
  7073. 183, 184, 185, 186, 187, 188, 191, 193,
  7074. 194, 195, 196, 197, 198, 199, 200, 192,
  7075. 209, 210, 129, 212, 213, 214, 215, 216,
  7076. 217, 218, 219, 209, 210, 129, 212, 213,
  7077. 214, 215, 216, 217, 218, 219, 211, 126,
  7078. 128, 208, 220, 201, 202, 203, 204, 205,
  7079. 206, 207, 222, 245, 237, 238, 239, 240,
  7080. 241, 242, 243, 244, 223, 225, 224, 226,
  7081. 227, 229, 230, 231, 232, 233, 234, 235,
  7082. 236, 226, 227, 229, 228, 226, 227, 229,
  7083. 246, 248, 249, 252, 251, 248, 249, 251,
  7084. 250, 248, 249, 251, 253, 265, 266, 257,
  7085. 258, 259, 260, 261, 262, 263, 264, 253,
  7086. 254, 256, 257, 258, 259, 260, 261, 262,
  7087. 263, 264, 255, 265, 266, 267, 276, 292,
  7088. 293, 295, 284, 285, 286, 287, 288, 289,
  7089. 290, 291, 276, 277, 279, 284, 285, 286,
  7090. 287, 288, 289, 290, 291, 278, 280, 281,
  7091. 283, 133, 280, 281, 283, 133, 282, 280,
  7092. 281, 283, 133, 292, 293, 295, 294, 295,
  7093. 296, 298, 133, 297, 295, 296, 298, 133,
  7094. 117, 118, 120, 275, 299, 300, 322, 304,
  7095. 268, 269, 270, 271, 272, 273, 274, 301,
  7096. 303, 302, 301, 303, 305, 306, 308, 335,
  7097. 370, 344, 371, 363, 364, 365, 366, 367,
  7098. 368, 369, 305, 306, 308, 335, 370, 344,
  7099. 371, 363, 364, 365, 366, 367, 368, 369,
  7100. 307, 309, 310, 312, 313, 362, 317, 323,
  7101. 311, 309, 310, 312, 313, 323, 317, 313,
  7102. 314, 316, 317, 315, 313, 314, 316, 317,
  7103. 318, 319, 120, 275, 321, 322, 268, 269,
  7104. 270, 271, 272, 273, 274, 318, 319, 321,
  7105. 320, 318, 319, 321, 322, 324, 326, 334,
  7106. 327, 328, 329, 330, 331, 332, 333, 325,
  7107. 324, 326, 334, 327, 328, 329, 330, 331,
  7108. 332, 333, 336, 360, 352, 353, 354, 355,
  7109. 356, 357, 358, 359, 337, 339, 338, 340,
  7110. 341, 343, 345, 346, 347, 348, 349, 350,
  7111. 351, 342, 340, 341, 343, 361, 305, 306,
  7112. 308, 335, 370, 344, 371, 363, 364, 365,
  7113. 366, 367, 368, 369, 372, 374, 375, 376,
  7114. 377, 378, 379, 380, 381, 373, 383, 384,
  7115. 386, 520, 535, 536, 544, 545, 546, 547,
  7116. 548, 549, 550, 383, 384, 386, 520, 535,
  7117. 536, 397, 544, 545, 546, 547, 548, 549,
  7118. 550, 385, 387, 388, 467, 468, 390, 512,
  7119. 26, 116, 397, 513, 514, 515, 516, 517,
  7120. 518, 519, 5, 9, 391, 116, 419, 420,
  7121. 421, 422, 423, 424, 425, 389, 387, 387,
  7122. 388, 5, 9, 390, 391, 26, 116, 397,
  7123. 419, 420, 421, 422, 423, 424, 425, 392,
  7124. 393, 396, 431, 459, 452, 453, 454, 455,
  7125. 456, 457, 458, 395, 460, 461, 462, 463,
  7126. 464, 465, 466, 394, 396, 9, 391, 452,
  7127. 453, 454, 455, 456, 457, 458, 26, 398,
  7128. 400, 408, 401, 402, 403, 404, 405, 406,
  7129. 407, 399, 409, 410, 5, 412, 413, 419,
  7130. 420, 421, 422, 423, 424, 425, 413, 411,
  7131. 409, 409, 410, 412, 413, 414, 445, 446,
  7132. 447, 448, 449, 450, 451, 415, 416, 418,
  7133. 415, 416, 418, 413, 417, 415, 415, 416,
  7134. 5, 9, 418, 413, 26, 116, 382, 397,
  7135. 419, 420, 421, 422, 423, 424, 425, 5,
  7136. 419, 421, 427, 428, 5, 9, 430, 426,
  7137. 26, 116, 397, 419, 420, 421, 422, 423,
  7138. 424, 425, 427, 428, 5, 9, 430, 413,
  7139. 26, 116, 397, 419, 420, 421, 422, 423,
  7140. 424, 425, 429, 427, 427, 428, 5, 9,
  7141. 430, 413, 26, 116, 397, 419, 420, 421,
  7142. 422, 423, 424, 425, 432, 443, 435, 436,
  7143. 437, 438, 439, 440, 441, 442, 433, 434,
  7144. 444, 392, 393, 395, 459, 460, 461, 462,
  7145. 463, 464, 465, 466, 469, 504, 505, 496,
  7146. 497, 498, 499, 500, 501, 502, 503, 469,
  7147. 470, 472, 496, 497, 498, 499, 500, 501,
  7148. 502, 503, 471, 473, 474, 26, 489, 490,
  7149. 491, 492, 493, 494, 495, 473, 475, 474,
  7150. 489, 490, 491, 492, 493, 494, 495, 476,
  7151. 487, 479, 480, 481, 482, 483, 484, 485,
  7152. 486, 477, 478, 488, 504, 505, 507, 506,
  7153. 508, 509, 5, 9, 511, 18, 26, 116,
  7154. 382, 397, 419, 420, 421, 422, 423, 424,
  7155. 425, 5, 9, 18, 116, 419, 420, 421,
  7156. 422, 423, 424, 425, 510, 508, 508, 509,
  7157. 5, 9, 511, 18, 26, 116, 382, 397,
  7158. 419, 420, 421, 422, 423, 424, 425, 467,
  7159. 513, 514, 515, 516, 517, 518, 519, 521,
  7160. 533, 525, 526, 527, 528, 529, 530, 531,
  7161. 532, 522, 524, 523, 534, 383, 384, 386,
  7162. 520, 535, 536, 397, 544, 545, 546, 547,
  7163. 548, 549, 550, 537, 538, 539, 540, 541,
  7164. 542, 543, 552, 553, 22, 555, 556, 557,
  7165. 558, 559, 560, 561, 562, 552, 553, 22,
  7166. 555, 556, 557, 558, 559, 560, 561, 562,
  7167. 554, 19, 20, 22, 551, 563, 564, 565,
  7168. 566, 567, 568, 569, 570, 572, 573, 575,
  7169. 572, 573, 575, 18, 574, 572, 572, 573,
  7170. 575, 18, 577, 588, 589, 580, 581, 582,
  7171. 583, 584, 585, 586, 587, 577, 578, 571,
  7172. 580, 581, 582, 583, 584, 585, 586, 587,
  7173. 579, 588, 589, 590, 606, 607, 608, 6,
  7174. 7, 609, 610, 611, 612, 627, 619, 628,
  7175. 629, 630, 631, 632, 633, 634, 614, 620,
  7176. 621, 622, 623, 624, 625, 626, 613, 615,
  7177. 616, 618, 610, 610, 617, 615, 615, 616,
  7178. 618, 610, 611, 612, 614, 619, 620, 621,
  7179. 622, 623, 624, 625, 626, 609, 2, 3,
  7180. 635, 413, 637, 638, 637, 654, 640, 641,
  7181. 642, 643, 644, 645, 646, 647, 637, 638,
  7182. 637, 654, 640, 641, 642, 643, 644, 645,
  7183. 646, 647, 639, 649, 77, 650, 77, 650,
  7184. 649, 77, 650, 79,
  7185. ]
  7186. 1 class << self
  7187. 1 attr_accessor :_trans_actions
  7188. 1 private :_trans_actions, :_trans_actions=
  7189. end
  7190. 1 self._trans_actions = [
  7191. 1, 0, 1, 1, 1, 2, 1, 3,
  7192. 4, 5, 1, 1, 1, 1, 1, 1,
  7193. 1, 6, 6, 6, 6, 7, 6, 8,
  7194. 9, 10, 6, 6, 6, 6, 6, 6,
  7195. 6, 0, 0, 11, 11, 11, 11, 12,
  7196. 11, 13, 14, 15, 16, 11, 11, 11,
  7197. 11, 11, 11, 11, 17, 17, 18, 18,
  7198. 19, 18, 20, 21, 22, 23, 18, 18,
  7199. 18, 18, 18, 18, 18, 0, 0, 24,
  7200. 24, 24, 25, 24, 24, 24, 24, 24,
  7201. 24, 24, 24, 0, 0, 26, 0, 0,
  7202. 0, 0, 0, 0, 0, 0, 0, 27,
  7203. 27, 27, 27, 28, 27, 29, 30, 31,
  7204. 32, 27, 27, 27, 27, 27, 27, 27,
  7205. 33, 33, 34, 34, 35, 34, 36, 37,
  7206. 38, 39, 34, 34, 34, 34, 34, 34,
  7207. 34, 0, 0, 40, 40, 41, 41, 42,
  7208. 41, 43, 44, 45, 46, 41, 41, 41,
  7209. 41, 41, 41, 41, 0, 0, 0, 0,
  7210. 47, 0, 0, 0, 0, 0, 0, 0,
  7211. 0, 0, 0, 0, 0, 0, 0, 0,
  7212. 0, 0, 0, 6, 6, 7, 6, 0,
  7213. 0, 48, 48, 48, 48, 49, 48, 50,
  7214. 51, 52, 53, 48, 48, 48, 48, 48,
  7215. 48, 48, 54, 54, 55, 54, 0, 0,
  7216. 0, 0, 0, 0, 0, 47, 0, 0,
  7217. 52, 52, 56, 52, 52, 52, 52, 52,
  7218. 52, 0, 0, 47, 0, 0, 0, 0,
  7219. 0, 0, 0, 0, 0, 52, 52, 56,
  7220. 52, 52, 52, 52, 52, 52, 52, 52,
  7221. 0, 0, 0, 0, 47, 0, 0, 52,
  7222. 52, 56, 52, 0, 0, 0, 47, 57,
  7223. 0, 52, 52, 56, 58, 0, 0, 47,
  7224. 0, 0, 52, 52, 56, 52, 0, 47,
  7225. 0, 0, 52, 56, 52, 0, 0, 0,
  7226. 47, 0, 0, 0, 0, 0, 0, 0,
  7227. 52, 52, 56, 52, 0, 47, 0, 0,
  7228. 52, 56, 52, 0, 0, 0, 47, 0,
  7229. 52, 52, 56, 0, 0, 0, 0, 0,
  7230. 0, 0, 0, 0, 0, 0, 0, 0,
  7231. 0, 0, 0, 47, 0, 0, 52, 52,
  7232. 56, 52, 54, 54, 59, 0, 0, 47,
  7233. 0, 52, 52, 56, 0, 0, 0, 0,
  7234. 0, 60, 60, 61, 61, 62, 63, 61,
  7235. 63, 61, 61, 61, 61, 61, 61, 61,
  7236. 0, 0, 47, 0, 0, 0, 64, 64,
  7237. 0, 0, 65, 0, 64, 15, 0, 0,
  7238. 0, 0, 0, 0, 0, 0, 0, 47,
  7239. 0, 22, 0, 52, 52, 56, 52, 52,
  7240. 66, 0, 0, 0, 47, 0, 0, 0,
  7241. 0, 0, 0, 0, 0, 0, 0, 47,
  7242. 0, 0, 52, 52, 56, 52, 10, 10,
  7243. 10, 10, 67, 10, 10, 10, 10, 10,
  7244. 10, 10, 10, 10, 0, 0, 0, 0,
  7245. 47, 0, 0, 0, 0, 0, 0, 0,
  7246. 0, 0, 0, 0, 0, 47, 0, 68,
  7247. 0, 0, 52, 52, 56, 52, 69, 0,
  7248. 0, 47, 0, 0, 0, 0, 0, 0,
  7249. 0, 0, 52, 52, 56, 52, 52, 52,
  7250. 52, 52, 52, 52, 0, 0, 0, 0,
  7251. 0, 0, 0, 0, 0, 0, 0, 0,
  7252. 0, 0, 0, 47, 0, 0, 0, 0,
  7253. 0, 0, 0, 0, 52, 52, 56, 0,
  7254. 52, 52, 52, 52, 56, 52, 52, 52,
  7255. 52, 52, 52, 52, 52, 52, 0, 0,
  7256. 0, 0, 0, 0, 0, 0, 0, 0,
  7257. 24, 24, 25, 24, 24, 24, 24, 24,
  7258. 24, 24, 24, 0, 0, 26, 0, 0,
  7259. 0, 0, 0, 0, 0, 0, 0, 52,
  7260. 52, 52, 56, 52, 52, 52, 52, 52,
  7261. 52, 52, 0, 0, 0, 0, 0, 0,
  7262. 0, 0, 0, 0, 0, 0, 0, 64,
  7263. 64, 65, 0, 0, 0, 0, 0, 0,
  7264. 0, 0, 0, 47, 0, 52, 52, 56,
  7265. 0, 64, 64, 0, 65, 0, 0, 47,
  7266. 0, 52, 52, 56, 24, 24, 24, 24,
  7267. 24, 24, 24, 24, 24, 24, 24, 0,
  7268. 0, 26, 0, 0, 0, 0, 0, 0,
  7269. 0, 0, 0, 0, 0, 0, 24, 24,
  7270. 24, 25, 24, 24, 24, 24, 24, 24,
  7271. 24, 24, 0, 0, 26, 0, 0, 0,
  7272. 0, 0, 0, 0, 0, 0, 64, 64,
  7273. 65, 31, 0, 0, 47, 38, 0, 52,
  7274. 52, 56, 45, 0, 0, 26, 0, 0,
  7275. 0, 47, 70, 0, 52, 52, 56, 71,
  7276. 52, 52, 72, 72, 56, 52, 72, 52,
  7277. 72, 72, 72, 72, 72, 72, 72, 0,
  7278. 47, 0, 52, 56, 10, 10, 10, 10,
  7279. 67, 10, 10, 10, 10, 10, 10, 10,
  7280. 10, 10, 0, 0, 0, 0, 47, 0,
  7281. 0, 0, 0, 0, 0, 0, 0, 0,
  7282. 0, 0, 0, 47, 68, 0, 68, 0,
  7283. 0, 52, 52, 56, 69, 52, 69, 0,
  7284. 0, 47, 0, 0, 52, 52, 56, 52,
  7285. 73, 73, 73, 73, 74, 73, 73, 73,
  7286. 73, 73, 73, 73, 73, 0, 0, 47,
  7287. 0, 52, 52, 56, 0, 0, 0, 47,
  7288. 0, 0, 0, 0, 0, 0, 0, 0,
  7289. 52, 52, 56, 52, 52, 52, 52, 52,
  7290. 52, 52, 0, 0, 0, 0, 0, 0,
  7291. 0, 0, 0, 0, 0, 0, 0, 0,
  7292. 0, 47, 0, 0, 0, 0, 0, 0,
  7293. 0, 0, 52, 52, 56, 0, 52, 52,
  7294. 52, 52, 56, 52, 52, 52, 52, 52,
  7295. 52, 52, 52, 52, 0, 0, 0, 0,
  7296. 0, 0, 0, 0, 0, 0, 10, 10,
  7297. 10, 10, 67, 10, 10, 10, 10, 10,
  7298. 10, 10, 10, 0, 0, 0, 0, 47,
  7299. 0, 0, 0, 0, 0, 0, 0, 0,
  7300. 0, 0, 75, 75, 75, 75, 76, 75,
  7301. 77, 78, 79, 75, 75, 75, 75, 75,
  7302. 75, 75, 80, 80, 80, 81, 80, 80,
  7303. 80, 80, 80, 80, 80, 0, 0, 82,
  7304. 82, 83, 83, 84, 83, 85, 86, 87,
  7305. 83, 83, 83, 83, 83, 83, 83, 0,
  7306. 0, 0, 0, 47, 0, 0, 0, 0,
  7307. 0, 0, 0, 0, 0, 0, 0, 0,
  7308. 0, 0, 0, 0, 75, 75, 75, 75,
  7309. 75, 75, 75, 75, 75, 75, 88, 0,
  7310. 0, 0, 0, 0, 0, 0, 0, 0,
  7311. 0, 0, 75, 75, 75, 76, 75, 75,
  7312. 75, 75, 75, 75, 75, 75, 80, 0,
  7313. 0, 82, 82, 84, 83, 0, 0, 0,
  7314. 0, 0, 0, 0, 0, 11, 11, 89,
  7315. 17, 17, 19, 18, 0, 0, 90, 90,
  7316. 91, 91, 92, 91, 93, 94, 66, 95,
  7317. 91, 91, 91, 91, 91, 91, 91, 0,
  7318. 0, 0, 96, 96, 96, 96, 97, 96,
  7319. 98, 99, 100, 96, 96, 96, 96, 96,
  7320. 96, 96, 101, 101, 102, 102, 103, 102,
  7321. 104, 105, 106, 102, 102, 102, 102, 102,
  7322. 102, 102, 0, 0, 107, 107, 108, 108,
  7323. 109, 108, 110, 111, 112, 108, 108, 108,
  7324. 108, 108, 108, 108, 0, 0, 0, 0,
  7325. 0, 0, 0, 0, 0, 0, 0, 0,
  7326. 0, 52, 52, 52, 56, 52, 52, 52,
  7327. 52, 52, 52, 52, 24, 24, 24, 24,
  7328. 24, 24, 24, 24, 24, 24, 24, 0,
  7329. 0, 26, 0, 0, 0, 0, 0, 0,
  7330. 0, 0, 0, 75, 75, 113, 75, 75,
  7331. 75, 75, 75, 75, 75, 0, 0, 0,
  7332. 0, 0, 0, 0, 0, 0, 0, 0,
  7333. 0, 0, 0, 0, 0, 0, 0, 0,
  7334. 0, 0, 0, 0, 0, 0, 26, 0,
  7335. 114, 114, 114, 114, 115, 114, 116, 117,
  7336. 70, 118, 114, 114, 114, 114, 114, 114,
  7337. 114, 119, 119, 119, 120, 119, 119, 119,
  7338. 119, 119, 119, 119, 0, 0, 121, 121,
  7339. 122, 122, 123, 122, 124, 125, 71, 126,
  7340. 122, 122, 122, 122, 122, 122, 122, 0,
  7341. 0, 0, 0, 0, 0, 0, 0, 0,
  7342. 0, 0, 0, 0, 0, 0, 0, 0,
  7343. 0, 0, 0, 0, 0, 52, 52, 52,
  7344. 52, 56, 52, 52, 52, 52, 52, 52,
  7345. 52, 52, 52, 0, 0, 0, 0, 0,
  7346. 0, 0, 24, 24, 25, 24, 24, 24,
  7347. 24, 24, 24, 24, 24, 0, 0, 26,
  7348. 0, 0, 0, 0, 0, 0, 0, 0,
  7349. 0, 52, 52, 52, 52, 56, 52, 52,
  7350. 52, 52, 52, 52, 52, 11, 11, 89,
  7351. 17, 17, 19, 18, 0, 0, 90, 90,
  7352. 92, 91, 24, 24, 24, 24, 24, 24,
  7353. 24, 24, 24, 24, 24, 0, 0, 26,
  7354. 0, 0, 0, 0, 0, 0, 0, 0,
  7355. 0, 0, 0, 0, 0, 0, 0, 90,
  7356. 90, 92, 91, 0, 0, 0, 47, 0,
  7357. 0, 0, 0, 0, 0, 0, 0, 0,
  7358. 0, 0, 0, 0, 0, 0, 0, 75,
  7359. 75, 76, 75, 80, 0, 0, 82, 82,
  7360. 84, 83, 52, 52, 52, 56, 52, 52,
  7361. 52, 52, 52, 52, 52, 89, 48, 48,
  7362. 49, 48, 127, 127, 128, 129, 127, 127,
  7363. 127, 127, 127, 127, 127, 127, 0, 0,
  7364. 47, 130, 0, 0, 0, 0, 0, 0,
  7365. 0, 0, 0, 131, 131, 132, 0, 47,
  7366. 52, 52, 56, 0,
  7367. ]
  7368. 1 class << self
  7369. 1 attr_accessor :_eof_actions
  7370. 1 private :_eof_actions, :_eof_actions=
  7371. end
  7372. 1 self._eof_actions = [
  7373. 0, 0, 0, 0, 0, 0, 0, 0,
  7374. 0, 0, 0, 0, 0, 0, 0, 0,
  7375. 0, 0, 0, 0, 0, 0, 0, 0,
  7376. 0, 0, 0, 0, 0, 0, 0, 0,
  7377. 0, 0, 0, 0, 0, 0, 0, 0,
  7378. 0, 0, 0, 0, 0, 0, 0, 0,
  7379. 0, 0, 0, 0, 0, 0, 0, 0,
  7380. 0, 0, 0, 0, 0, 0, 0, 0,
  7381. 0, 0, 0, 0, 0, 0, 0, 0,
  7382. 0, 0, 0, 0, 0, 0, 0, 0,
  7383. 0, 0, 0, 0, 0, 0, 0, 0,
  7384. 0, 0, 0, 0, 0, 0, 0, 0,
  7385. 0, 0, 0, 0, 0, 0, 0, 0,
  7386. 0, 0, 0, 0, 0, 0, 0, 0,
  7387. 0, 0, 0, 0, 0, 0, 0, 0,
  7388. 0, 0, 0, 0, 0, 0, 0, 0,
  7389. 0, 0, 0, 0, 0, 0, 0, 0,
  7390. 0, 0, 0, 0, 0, 0, 0, 0,
  7391. 0, 0, 0, 0, 0, 0, 0, 0,
  7392. 0, 0, 0, 0, 0, 0, 0, 0,
  7393. 0, 0, 0, 0, 0, 0, 0, 0,
  7394. 0, 0, 0, 0, 0, 0, 0, 0,
  7395. 0, 0, 0, 0, 0, 0, 0, 0,
  7396. 0, 0, 0, 0, 0, 0, 0, 0,
  7397. 0, 0, 0, 0, 0, 0, 0, 0,
  7398. 0, 0, 0, 0, 0, 0, 0, 0,
  7399. 0, 0, 0, 0, 0, 0, 0, 0,
  7400. 0, 0, 0, 0, 0, 0, 0, 0,
  7401. 0, 0, 0, 0, 0, 0, 0, 0,
  7402. 0, 0, 0, 0, 0, 0, 0, 0,
  7403. 0, 0, 0, 0, 0, 0, 0, 0,
  7404. 0, 0, 0, 0, 0, 0, 0, 0,
  7405. 0, 0, 0, 0, 0, 0, 0, 0,
  7406. 0, 0, 0, 0, 0, 0, 0, 0,
  7407. 0, 0, 0, 0, 0, 0, 0, 0,
  7408. 0, 0, 0, 0, 0, 0, 0, 0,
  7409. 0, 0, 0, 0, 0, 0, 0, 0,
  7410. 0, 0, 0, 0, 0, 0, 0, 0,
  7411. 0, 0, 0, 0, 0, 0, 0, 0,
  7412. 0, 0, 0, 0, 0, 0, 0, 0,
  7413. 0, 0, 0, 0, 0, 0, 0, 0,
  7414. 0, 0, 0, 0, 0, 0, 0, 0,
  7415. 0, 0, 0, 0, 0, 0, 0, 0,
  7416. 0, 0, 0, 0, 0, 0, 0, 0,
  7417. 0, 0, 0, 0, 0, 0, 0, 0,
  7418. 0, 0, 0, 0, 0, 0, 0, 0,
  7419. 0, 0, 0, 0, 0, 0, 0, 0,
  7420. 0, 0, 0, 0, 0, 0, 0, 0,
  7421. 0, 0, 0, 0, 0, 0, 0, 0,
  7422. 0, 0, 0, 0, 0, 0, 0, 0,
  7423. 0, 0, 0, 0, 0, 0, 0, 0,
  7424. 0, 0, 0, 0, 0, 0, 0, 0,
  7425. 0, 0, 0, 0, 0, 0, 0, 0,
  7426. 0, 0, 0, 0, 0, 0, 0, 0,
  7427. 0, 0, 0, 0, 0, 0, 0, 0,
  7428. 0, 0, 0, 0, 0, 0, 0, 0,
  7429. 0, 0, 0, 0, 0, 0, 0, 0,
  7430. 0, 0, 0, 0, 0, 0, 0, 0,
  7431. 0, 0, 0, 0, 0, 0, 0, 0,
  7432. 0, 0, 0, 0, 0, 0, 0, 0,
  7433. 0, 0, 0, 0, 0, 0, 0, 0,
  7434. 0, 0, 0, 0, 0, 0, 0, 0,
  7435. 0, 0, 0, 0, 0, 0, 0, 0,
  7436. 0, 0, 0, 0, 0, 0, 0, 0,
  7437. 0, 0, 0, 0, 0, 0, 0, 0,
  7438. 0, 0, 0, 0, 0, 0, 0, 0,
  7439. 0, 0, 0, 0, 0, 0, 0, 0,
  7440. 0, 0, 0, 0, 0, 0, 0, 0,
  7441. 0, 0, 0, 0, 0, 0, 0, 0,
  7442. 0, 0, 0, 0, 0, 0, 0, 0,
  7443. 0, 0, 0, 0, 0, 0, 0, 0,
  7444. 0, 0, 0, 0, 0, 0, 0, 0,
  7445. 0, 0, 0, 0, 0, 0, 0, 0,
  7446. 0, 0, 0, 0, 0, 0, 0, 0,
  7447. 0, 0, 0, 0, 0, 0, 0, 0,
  7448. 0, 0, 0, 0, 0, 0, 0, 0,
  7449. 0, 0, 0, 0, 0, 0, 0, 0,
  7450. 0, 0, 0, 0, 0, 0, 0, 0,
  7451. 0, 0, 0, 0, 0, 0, 0, 0,
  7452. 0, 0, 0, 0, 0, 0, 0, 0,
  7453. 0, 0, 0, 0, 0, 0, 0, 0,
  7454. 131, 0, 52, 131, 131, 131, 0,
  7455. ]
  7456. 1 class << self
  7457. 1 attr_accessor :start
  7458. end
  7459. 1 self.start = 1
  7460. 1 class << self
  7461. 1 attr_accessor :first_final
  7462. end
  7463. 1 self.first_final = 648
  7464. 1 class << self
  7465. 1 attr_accessor :error
  7466. end
  7467. 1 self.error = 0
  7468. 1 class << self
  7469. 1 attr_accessor :en_comment_tail
  7470. end
  7471. 1 self.en_comment_tail = 636
  7472. 1 class << self
  7473. 1 attr_accessor :en_main
  7474. end
  7475. 1 self.en_main = 1
  7476. 1 def self.parse(data)
  7477. data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
  7478. raise Mail::Field::NilParseError.new(Mail::ReceivedElement) if data.nil?
  7479. # Parser state
  7480. received = ReceivedStruct.new
  7481. received_tokens_s = date_s = time_s = nil
  7482. # 5.1 Variables Used by Ragel
  7483. p = 0
  7484. eof = pe = data.length
  7485. stack = []
  7486. begin
  7487. p ||= 0
  7488. pe ||= data.length
  7489. cs = start
  7490. top = 0
  7491. end
  7492. begin
  7493. testEof = false
  7494. _slen, _trans, _keys, _inds, _acts, _nacts = nil
  7495. _goto_level = 0
  7496. _resume = 10
  7497. _eof_trans = 15
  7498. _again = 20
  7499. _test_eof = 30
  7500. _out = 40
  7501. while true
  7502. if _goto_level <= 0
  7503. if p == pe
  7504. _goto_level = _test_eof
  7505. next
  7506. end
  7507. if cs == 0
  7508. _goto_level = _out
  7509. next
  7510. end
  7511. end
  7512. if _goto_level <= _resume
  7513. _keys = cs << 1
  7514. _inds = _index_offsets[cs]
  7515. _slen = _key_spans[cs]
  7516. _wide = data[p].ord
  7517. _trans = if (_slen > 0 &&
  7518. _trans_keys[_keys] <= _wide &&
  7519. _wide <= _trans_keys[_keys + 1])
  7520. _indicies[_inds + _wide - _trans_keys[_keys]]
  7521. else
  7522. _indicies[_inds + _slen]
  7523. end
  7524. cs = _trans_targs[_trans]
  7525. if _trans_actions[_trans] != 0
  7526. case _trans_actions[_trans]
  7527. when 8
  7528. begin
  7529. received.info = chars(data, received_tokens_s, p - 1)
  7530. end
  7531. when 54
  7532. begin
  7533. date_s = p
  7534. end
  7535. when 131
  7536. begin
  7537. received.time = chars(data, time_s, p - 1)
  7538. end
  7539. when 9
  7540. begin
  7541. end
  7542. when 52
  7543. begin
  7544. end
  7545. when 127
  7546. begin
  7547. end
  7548. when 68
  7549. begin
  7550. end
  7551. when 10
  7552. begin
  7553. end
  7554. when 22
  7555. begin
  7556. end
  7557. when 64
  7558. begin
  7559. end
  7560. when 61
  7561. begin
  7562. end
  7563. when 26
  7564. begin
  7565. end
  7566. when 24
  7567. begin
  7568. end
  7569. when 70
  7570. begin
  7571. end
  7572. when 63
  7573. begin
  7574. end
  7575. when 47
  7576. begin
  7577. begin
  7578. stack[top] = cs
  7579. top += 1
  7580. cs = 636
  7581. _goto_level = _again
  7582. next
  7583. end
  7584. end
  7585. when 130
  7586. begin
  7587. begin
  7588. top -= 1
  7589. cs = stack[top]
  7590. _goto_level = _again
  7591. next
  7592. end
  7593. end
  7594. when 3
  7595. begin
  7596. received_tokens_s = p
  7597. end
  7598. begin
  7599. received.info = chars(data, received_tokens_s, p - 1)
  7600. end
  7601. when 4
  7602. begin
  7603. received_tokens_s = p
  7604. end
  7605. begin
  7606. end
  7607. when 5
  7608. begin
  7609. received_tokens_s = p
  7610. end
  7611. begin
  7612. end
  7613. when 59
  7614. begin
  7615. date_s = p
  7616. end
  7617. begin
  7618. begin
  7619. stack[top] = cs
  7620. top += 1
  7621. cs = 636
  7622. _goto_level = _again
  7623. next
  7624. end
  7625. end
  7626. when 57
  7627. begin
  7628. received.date = chars(data, date_s, p - 1).strip
  7629. end
  7630. begin
  7631. time_s = p
  7632. end
  7633. when 132
  7634. begin
  7635. received.time = chars(data, time_s, p - 1)
  7636. end
  7637. begin
  7638. begin
  7639. stack[top] = cs
  7640. top += 1
  7641. cs = 636
  7642. _goto_level = _again
  7643. next
  7644. end
  7645. end
  7646. when 81
  7647. begin
  7648. end
  7649. begin
  7650. end
  7651. when 105
  7652. begin
  7653. end
  7654. begin
  7655. end
  7656. when 120
  7657. begin
  7658. end
  7659. begin
  7660. end
  7661. when 50
  7662. begin
  7663. end
  7664. begin
  7665. received.info = chars(data, received_tokens_s, p - 1)
  7666. end
  7667. when 51
  7668. begin
  7669. end
  7670. begin
  7671. end
  7672. when 69
  7673. begin
  7674. end
  7675. begin
  7676. end
  7677. when 53
  7678. begin
  7679. end
  7680. begin
  7681. end
  7682. when 66
  7683. begin
  7684. end
  7685. begin
  7686. end
  7687. when 72
  7688. begin
  7689. end
  7690. begin
  7691. end
  7692. when 71
  7693. begin
  7694. end
  7695. begin
  7696. end
  7697. when 56
  7698. begin
  7699. end
  7700. begin
  7701. begin
  7702. stack[top] = cs
  7703. top += 1
  7704. cs = 636
  7705. _goto_level = _again
  7706. next
  7707. end
  7708. end
  7709. when 128
  7710. begin
  7711. end
  7712. begin
  7713. begin
  7714. stack[top] = cs
  7715. top += 1
  7716. cs = 636
  7717. _goto_level = _again
  7718. next
  7719. end
  7720. end
  7721. when 129
  7722. begin
  7723. end
  7724. begin
  7725. begin
  7726. top -= 1
  7727. cs = stack[top]
  7728. _goto_level = _again
  7729. next
  7730. end
  7731. end
  7732. when 77
  7733. begin
  7734. end
  7735. begin
  7736. received.info = chars(data, received_tokens_s, p - 1)
  7737. end
  7738. when 78
  7739. begin
  7740. end
  7741. begin
  7742. end
  7743. when 79
  7744. begin
  7745. end
  7746. begin
  7747. end
  7748. when 67
  7749. begin
  7750. end
  7751. begin
  7752. begin
  7753. stack[top] = cs
  7754. top += 1
  7755. cs = 636
  7756. _goto_level = _again
  7757. next
  7758. end
  7759. end
  7760. when 104
  7761. begin
  7762. end
  7763. begin
  7764. received.info = chars(data, received_tokens_s, p - 1)
  7765. end
  7766. when 106
  7767. begin
  7768. end
  7769. begin
  7770. end
  7771. when 38
  7772. begin
  7773. end
  7774. begin
  7775. end
  7776. when 15
  7777. begin
  7778. end
  7779. begin
  7780. end
  7781. when 65
  7782. begin
  7783. end
  7784. begin
  7785. begin
  7786. stack[top] = cs
  7787. top += 1
  7788. cs = 636
  7789. _goto_level = _again
  7790. next
  7791. end
  7792. end
  7793. when 6
  7794. begin
  7795. end
  7796. begin
  7797. end
  7798. when 60
  7799. begin
  7800. end
  7801. begin
  7802. end
  7803. when 25
  7804. begin
  7805. end
  7806. begin
  7807. end
  7808. when 116
  7809. begin
  7810. end
  7811. begin
  7812. received.info = chars(data, received_tokens_s, p - 1)
  7813. end
  7814. when 117
  7815. begin
  7816. end
  7817. begin
  7818. end
  7819. when 118
  7820. begin
  7821. end
  7822. begin
  7823. end
  7824. when 73
  7825. begin
  7826. end
  7827. begin
  7828. end
  7829. when 55
  7830. begin
  7831. begin
  7832. stack[top] = cs
  7833. top += 1
  7834. cs = 636
  7835. _goto_level = _again
  7836. next
  7837. end
  7838. end
  7839. begin
  7840. date_s = p
  7841. end
  7842. when 1
  7843. begin
  7844. received_tokens_s = p
  7845. end
  7846. begin
  7847. end
  7848. begin
  7849. end
  7850. when 21
  7851. begin
  7852. end
  7853. begin
  7854. end
  7855. begin
  7856. end
  7857. when 58
  7858. begin
  7859. end
  7860. begin
  7861. received.date = chars(data, date_s, p - 1).strip
  7862. end
  7863. begin
  7864. time_s = p
  7865. end
  7866. when 86
  7867. begin
  7868. end
  7869. begin
  7870. end
  7871. begin
  7872. end
  7873. when 111
  7874. begin
  7875. end
  7876. begin
  7877. end
  7878. begin
  7879. end
  7880. when 125
  7881. begin
  7882. end
  7883. begin
  7884. end
  7885. begin
  7886. end
  7887. when 85
  7888. begin
  7889. end
  7890. begin
  7891. end
  7892. begin
  7893. received.info = chars(data, received_tokens_s, p - 1)
  7894. end
  7895. when 87
  7896. begin
  7897. end
  7898. begin
  7899. end
  7900. begin
  7901. end
  7902. when 110
  7903. begin
  7904. end
  7905. begin
  7906. end
  7907. begin
  7908. received.info = chars(data, received_tokens_s, p - 1)
  7909. end
  7910. when 112
  7911. begin
  7912. end
  7913. begin
  7914. end
  7915. begin
  7916. end
  7917. when 45
  7918. begin
  7919. end
  7920. begin
  7921. end
  7922. begin
  7923. end
  7924. when 48
  7925. begin
  7926. end
  7927. begin
  7928. end
  7929. begin
  7930. end
  7931. when 124
  7932. begin
  7933. end
  7934. begin
  7935. end
  7936. begin
  7937. received.info = chars(data, received_tokens_s, p - 1)
  7938. end
  7939. when 126
  7940. begin
  7941. end
  7942. begin
  7943. end
  7944. begin
  7945. end
  7946. when 75
  7947. begin
  7948. end
  7949. begin
  7950. end
  7951. begin
  7952. end
  7953. when 20
  7954. begin
  7955. end
  7956. begin
  7957. end
  7958. begin
  7959. received.info = chars(data, received_tokens_s, p - 1)
  7960. end
  7961. when 23
  7962. begin
  7963. end
  7964. begin
  7965. end
  7966. begin
  7967. end
  7968. when 101
  7969. begin
  7970. end
  7971. begin
  7972. end
  7973. begin
  7974. end
  7975. when 98
  7976. begin
  7977. end
  7978. begin
  7979. end
  7980. begin
  7981. received.info = chars(data, received_tokens_s, p - 1)
  7982. end
  7983. when 99
  7984. begin
  7985. end
  7986. begin
  7987. end
  7988. begin
  7989. end
  7990. when 100
  7991. begin
  7992. end
  7993. begin
  7994. end
  7995. begin
  7996. end
  7997. when 31
  7998. begin
  7999. end
  8000. begin
  8001. end
  8002. begin
  8003. end
  8004. when 80
  8005. begin
  8006. end
  8007. begin
  8008. end
  8009. begin
  8010. end
  8011. when 102
  8012. begin
  8013. end
  8014. begin
  8015. end
  8016. begin
  8017. end
  8018. when 119
  8019. begin
  8020. end
  8021. begin
  8022. end
  8023. begin
  8024. end
  8025. when 62
  8026. begin
  8027. end
  8028. begin
  8029. begin
  8030. stack[top] = cs
  8031. top += 1
  8032. cs = 636
  8033. _goto_level = _again
  8034. next
  8035. end
  8036. end
  8037. begin
  8038. end
  8039. when 114
  8040. begin
  8041. end
  8042. begin
  8043. end
  8044. begin
  8045. end
  8046. when 74
  8047. begin
  8048. end
  8049. begin
  8050. end
  8051. begin
  8052. begin
  8053. stack[top] = cs
  8054. top += 1
  8055. cs = 636
  8056. _goto_level = _again
  8057. next
  8058. end
  8059. end
  8060. when 7
  8061. begin
  8062. begin
  8063. stack[top] = cs
  8064. top += 1
  8065. cs = 636
  8066. _goto_level = _again
  8067. next
  8068. end
  8069. end
  8070. begin
  8071. end
  8072. begin
  8073. end
  8074. when 2
  8075. begin
  8076. received_tokens_s = p
  8077. end
  8078. begin
  8079. begin
  8080. stack[top] = cs
  8081. top += 1
  8082. cs = 636
  8083. _goto_level = _again
  8084. next
  8085. end
  8086. end
  8087. begin
  8088. end
  8089. begin
  8090. end
  8091. when 37
  8092. begin
  8093. end
  8094. begin
  8095. end
  8096. begin
  8097. end
  8098. begin
  8099. end
  8100. when 94
  8101. begin
  8102. end
  8103. begin
  8104. end
  8105. begin
  8106. end
  8107. begin
  8108. end
  8109. when 82
  8110. begin
  8111. end
  8112. begin
  8113. end
  8114. begin
  8115. end
  8116. begin
  8117. end
  8118. when 93
  8119. begin
  8120. end
  8121. begin
  8122. end
  8123. begin
  8124. end
  8125. begin
  8126. received.info = chars(data, received_tokens_s, p - 1)
  8127. end
  8128. when 95
  8129. begin
  8130. end
  8131. begin
  8132. end
  8133. begin
  8134. end
  8135. begin
  8136. end
  8137. when 107
  8138. begin
  8139. end
  8140. begin
  8141. end
  8142. begin
  8143. end
  8144. begin
  8145. end
  8146. when 83
  8147. begin
  8148. end
  8149. begin
  8150. end
  8151. begin
  8152. end
  8153. begin
  8154. end
  8155. when 108
  8156. begin
  8157. end
  8158. begin
  8159. end
  8160. begin
  8161. end
  8162. begin
  8163. end
  8164. when 122
  8165. begin
  8166. end
  8167. begin
  8168. end
  8169. begin
  8170. end
  8171. begin
  8172. end
  8173. when 121
  8174. begin
  8175. end
  8176. begin
  8177. end
  8178. begin
  8179. end
  8180. begin
  8181. end
  8182. when 49
  8183. begin
  8184. end
  8185. begin
  8186. begin
  8187. stack[top] = cs
  8188. top += 1
  8189. cs = 636
  8190. _goto_level = _again
  8191. next
  8192. end
  8193. end
  8194. begin
  8195. end
  8196. begin
  8197. end
  8198. when 88
  8199. begin
  8200. end
  8201. begin
  8202. end
  8203. begin
  8204. end
  8205. begin
  8206. received.info = chars(data, received_tokens_s, p - 1)
  8207. end
  8208. when 17
  8209. begin
  8210. end
  8211. begin
  8212. end
  8213. begin
  8214. end
  8215. begin
  8216. end
  8217. when 36
  8218. begin
  8219. end
  8220. begin
  8221. end
  8222. begin
  8223. end
  8224. begin
  8225. received.info = chars(data, received_tokens_s, p - 1)
  8226. end
  8227. when 39
  8228. begin
  8229. end
  8230. begin
  8231. end
  8232. begin
  8233. end
  8234. begin
  8235. end
  8236. when 13
  8237. begin
  8238. end
  8239. begin
  8240. end
  8241. begin
  8242. end
  8243. begin
  8244. received.info = chars(data, received_tokens_s, p - 1)
  8245. end
  8246. when 14
  8247. begin
  8248. end
  8249. begin
  8250. end
  8251. begin
  8252. end
  8253. begin
  8254. end
  8255. when 16
  8256. begin
  8257. end
  8258. begin
  8259. end
  8260. begin
  8261. end
  8262. begin
  8263. end
  8264. when 96
  8265. begin
  8266. end
  8267. begin
  8268. end
  8269. begin
  8270. end
  8271. begin
  8272. end
  8273. when 18
  8274. begin
  8275. end
  8276. begin
  8277. end
  8278. begin
  8279. end
  8280. begin
  8281. end
  8282. when 76
  8283. begin
  8284. begin
  8285. stack[top] = cs
  8286. top += 1
  8287. cs = 636
  8288. _goto_level = _again
  8289. next
  8290. end
  8291. end
  8292. begin
  8293. end
  8294. begin
  8295. end
  8296. begin
  8297. end
  8298. when 103
  8299. begin
  8300. begin
  8301. stack[top] = cs
  8302. top += 1
  8303. cs = 636
  8304. _goto_level = _again
  8305. next
  8306. end
  8307. end
  8308. begin
  8309. end
  8310. begin
  8311. end
  8312. begin
  8313. end
  8314. when 115
  8315. begin
  8316. begin
  8317. stack[top] = cs
  8318. top += 1
  8319. cs = 636
  8320. _goto_level = _again
  8321. next
  8322. end
  8323. end
  8324. begin
  8325. end
  8326. begin
  8327. end
  8328. begin
  8329. end
  8330. when 44
  8331. begin
  8332. end
  8333. begin
  8334. end
  8335. begin
  8336. end
  8337. begin
  8338. end
  8339. begin
  8340. end
  8341. when 90
  8342. begin
  8343. end
  8344. begin
  8345. end
  8346. begin
  8347. end
  8348. begin
  8349. end
  8350. begin
  8351. end
  8352. when 43
  8353. begin
  8354. end
  8355. begin
  8356. end
  8357. begin
  8358. end
  8359. begin
  8360. end
  8361. begin
  8362. received.info = chars(data, received_tokens_s, p - 1)
  8363. end
  8364. when 46
  8365. begin
  8366. end
  8367. begin
  8368. end
  8369. begin
  8370. end
  8371. begin
  8372. end
  8373. begin
  8374. end
  8375. when 91
  8376. begin
  8377. end
  8378. begin
  8379. end
  8380. begin
  8381. end
  8382. begin
  8383. end
  8384. begin
  8385. end
  8386. when 84
  8387. begin
  8388. end
  8389. begin
  8390. begin
  8391. stack[top] = cs
  8392. top += 1
  8393. cs = 636
  8394. _goto_level = _again
  8395. next
  8396. end
  8397. end
  8398. begin
  8399. end
  8400. begin
  8401. end
  8402. begin
  8403. end
  8404. when 109
  8405. begin
  8406. end
  8407. begin
  8408. begin
  8409. stack[top] = cs
  8410. top += 1
  8411. cs = 636
  8412. _goto_level = _again
  8413. next
  8414. end
  8415. end
  8416. begin
  8417. end
  8418. begin
  8419. end
  8420. begin
  8421. end
  8422. when 123
  8423. begin
  8424. end
  8425. begin
  8426. begin
  8427. stack[top] = cs
  8428. top += 1
  8429. cs = 636
  8430. _goto_level = _again
  8431. next
  8432. end
  8433. end
  8434. begin
  8435. end
  8436. begin
  8437. end
  8438. begin
  8439. end
  8440. when 113
  8441. begin
  8442. end
  8443. begin
  8444. end
  8445. begin
  8446. end
  8447. begin
  8448. end
  8449. begin
  8450. received.info = chars(data, received_tokens_s, p - 1)
  8451. end
  8452. when 33
  8453. begin
  8454. end
  8455. begin
  8456. end
  8457. begin
  8458. end
  8459. begin
  8460. end
  8461. begin
  8462. end
  8463. when 11
  8464. begin
  8465. end
  8466. begin
  8467. end
  8468. begin
  8469. end
  8470. begin
  8471. end
  8472. begin
  8473. end
  8474. when 29
  8475. begin
  8476. end
  8477. begin
  8478. end
  8479. begin
  8480. end
  8481. begin
  8482. end
  8483. begin
  8484. received.info = chars(data, received_tokens_s, p - 1)
  8485. end
  8486. when 30
  8487. begin
  8488. end
  8489. begin
  8490. end
  8491. begin
  8492. end
  8493. begin
  8494. end
  8495. begin
  8496. end
  8497. when 32
  8498. begin
  8499. end
  8500. begin
  8501. end
  8502. begin
  8503. end
  8504. begin
  8505. end
  8506. begin
  8507. end
  8508. when 97
  8509. begin
  8510. end
  8511. begin
  8512. begin
  8513. stack[top] = cs
  8514. top += 1
  8515. cs = 636
  8516. _goto_level = _again
  8517. next
  8518. end
  8519. end
  8520. begin
  8521. end
  8522. begin
  8523. end
  8524. begin
  8525. end
  8526. when 34
  8527. begin
  8528. end
  8529. begin
  8530. end
  8531. begin
  8532. end
  8533. begin
  8534. end
  8535. begin
  8536. end
  8537. when 19
  8538. begin
  8539. begin
  8540. stack[top] = cs
  8541. top += 1
  8542. cs = 636
  8543. _goto_level = _again
  8544. next
  8545. end
  8546. end
  8547. begin
  8548. end
  8549. begin
  8550. end
  8551. begin
  8552. end
  8553. begin
  8554. end
  8555. when 40
  8556. begin
  8557. end
  8558. begin
  8559. end
  8560. begin
  8561. end
  8562. begin
  8563. end
  8564. begin
  8565. end
  8566. begin
  8567. end
  8568. when 41
  8569. begin
  8570. end
  8571. begin
  8572. end
  8573. begin
  8574. end
  8575. begin
  8576. end
  8577. begin
  8578. end
  8579. begin
  8580. end
  8581. when 92
  8582. begin
  8583. end
  8584. begin
  8585. begin
  8586. stack[top] = cs
  8587. top += 1
  8588. cs = 636
  8589. _goto_level = _again
  8590. next
  8591. end
  8592. end
  8593. begin
  8594. end
  8595. begin
  8596. end
  8597. begin
  8598. end
  8599. begin
  8600. end
  8601. when 27
  8602. begin
  8603. end
  8604. begin
  8605. end
  8606. begin
  8607. end
  8608. begin
  8609. end
  8610. begin
  8611. end
  8612. begin
  8613. end
  8614. when 89
  8615. begin
  8616. end
  8617. begin
  8618. begin
  8619. stack[top] = cs
  8620. top += 1
  8621. cs = 636
  8622. _goto_level = _again
  8623. next
  8624. end
  8625. end
  8626. begin
  8627. end
  8628. begin
  8629. end
  8630. begin
  8631. end
  8632. begin
  8633. end
  8634. when 35
  8635. begin
  8636. begin
  8637. stack[top] = cs
  8638. top += 1
  8639. cs = 636
  8640. _goto_level = _again
  8641. next
  8642. end
  8643. end
  8644. begin
  8645. end
  8646. begin
  8647. end
  8648. begin
  8649. end
  8650. begin
  8651. end
  8652. begin
  8653. end
  8654. when 12
  8655. begin
  8656. begin
  8657. stack[top] = cs
  8658. top += 1
  8659. cs = 636
  8660. _goto_level = _again
  8661. next
  8662. end
  8663. end
  8664. begin
  8665. end
  8666. begin
  8667. end
  8668. begin
  8669. end
  8670. begin
  8671. end
  8672. begin
  8673. end
  8674. when 42
  8675. begin
  8676. end
  8677. begin
  8678. begin
  8679. stack[top] = cs
  8680. top += 1
  8681. cs = 636
  8682. _goto_level = _again
  8683. next
  8684. end
  8685. end
  8686. begin
  8687. end
  8688. begin
  8689. end
  8690. begin
  8691. end
  8692. begin
  8693. end
  8694. begin
  8695. end
  8696. when 28
  8697. begin
  8698. begin
  8699. stack[top] = cs
  8700. top += 1
  8701. cs = 636
  8702. _goto_level = _again
  8703. next
  8704. end
  8705. end
  8706. begin
  8707. end
  8708. begin
  8709. end
  8710. begin
  8711. end
  8712. begin
  8713. end
  8714. begin
  8715. end
  8716. begin
  8717. end
  8718. end
  8719. end
  8720. end
  8721. if _goto_level <= _again
  8722. if cs == 0
  8723. _goto_level = _out
  8724. next
  8725. end
  8726. p += 1
  8727. if p != pe
  8728. _goto_level = _resume
  8729. next
  8730. end
  8731. end
  8732. if _goto_level <= _test_eof
  8733. if p == eof
  8734. case _eof_actions[cs]
  8735. when 131
  8736. begin
  8737. received.time = chars(data, time_s, p - 1)
  8738. end
  8739. when 52
  8740. begin
  8741. end
  8742. end
  8743. end
  8744. end
  8745. if _goto_level <= _out
  8746. break
  8747. end
  8748. end
  8749. end
  8750. if p != eof || cs < 648
  8751. raise Mail::Field::IncompleteParseError.new(Mail::ReceivedElement, data, p)
  8752. end
  8753. received
  8754. end
  8755. end
  8756. end

target/rubygems/gems/mail-2.7.1/lib/mail/part.rb

41.82% lines covered

55 relevant lines. 23 lines covered and 32 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 class Part < Message
  5. # Creates a new empty Content-ID field and inserts it in the correct order
  6. # into the Header. The ContentIdField object will automatically generate
  7. # a unique content ID if you try and encode it or output it to_s without
  8. # specifying a content id.
  9. #
  10. # It will preserve the content ID you specify if you do.
  11. 1 def add_content_id(content_id_val = '')
  12. header['content-id'] = content_id_val
  13. end
  14. # Returns true if the part has a content ID field, the field may or may
  15. # not have a value, but the field exists or not.
  16. 1 def has_content_id?
  17. header.has_content_id?
  18. end
  19. 1 def inline_content_id
  20. # TODO: Deprecated in 2.2.2 - Remove in 2.3
  21. warn("Part#inline_content_id is deprecated, please call Part#cid instead")
  22. cid
  23. end
  24. 1 def cid
  25. add_content_id unless has_content_id?
  26. uri_escape(unbracket(content_id))
  27. end
  28. 1 def url
  29. "cid:#{cid}"
  30. end
  31. 1 def inline?
  32. header[:content_disposition].disposition_type == 'inline' if header[:content_disposition].respond_to?(:disposition_type)
  33. end
  34. 1 def add_required_fields
  35. super
  36. add_content_id if !has_content_id? && inline?
  37. end
  38. 1 def add_required_message_fields
  39. # Override so we don't add Date, MIME-Version, or Message-ID.
  40. end
  41. 1 def delivery_status_report_part?
  42. (main_type =~ /message/i && sub_type =~ /delivery-status/i) && body =~ /Status:/
  43. end
  44. 1 def delivery_status_data
  45. delivery_status_report_part? ? parse_delivery_status_report : {}
  46. end
  47. 1 def bounced?
  48. if action.is_a?(Array)
  49. !!(action.first =~ /failed/i)
  50. else
  51. !!(action =~ /failed/i)
  52. end
  53. end
  54. # Either returns the action if the message has just a single report, or an
  55. # array of all the actions, one for each report
  56. 1 def action
  57. get_return_values('action')
  58. end
  59. 1 def final_recipient
  60. get_return_values('final-recipient')
  61. end
  62. 1 def error_status
  63. get_return_values('status')
  64. end
  65. 1 def diagnostic_code
  66. get_return_values('diagnostic-code')
  67. end
  68. 1 def remote_mta
  69. get_return_values('remote-mta')
  70. end
  71. 1 def retryable?
  72. !(error_status =~ /^5/)
  73. end
  74. 1 private
  75. 1 def get_return_values(key)
  76. if delivery_status_data[key].is_a?(Array)
  77. delivery_status_data[key].map { |a| a.value }
  78. elsif !delivery_status_data[key].nil?
  79. delivery_status_data[key].value
  80. else
  81. nil
  82. end
  83. end
  84. # A part may not have a header.... so, just init a body if no header
  85. 1 def parse_message
  86. header_part, body_part = raw_source.split(/#{Constants::CRLF}#{Constants::WSP}*#{Constants::CRLF}/m, 2)
  87. if header_part =~ Constants::HEADER_LINE
  88. self.header = header_part
  89. self.body = body_part
  90. else
  91. self.header = "Content-Type: text/plain\r\n"
  92. self.body = raw_source
  93. end
  94. end
  95. 1 def parse_delivery_status_report
  96. @delivery_status_data ||= Header.new(body.to_s.gsub("\r\n\r\n", "\r\n"))
  97. end
  98. end
  99. end

target/rubygems/gems/mail-2.7.1/lib/mail/parts_list.rb

43.24% lines covered

37 relevant lines. 16 lines covered and 21 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require 'delegate'
  3. 1 module Mail
  4. 1 class PartsList < DelegateClass(Array)
  5. 1 attr_reader :parts
  6. 1 def initialize(*args)
  7. @parts = Array.new(*args)
  8. super @parts
  9. end
  10. # The #encode_with and #to_yaml methods are just implemented
  11. # for the sake of backward compatibility ; the delegator does
  12. # not correctly delegate these calls to the delegated object
  13. 1 def encode_with(coder) # :nodoc:
  14. coder.represent_object(nil, @parts)
  15. end
  16. 1 def to_yaml(options = {}) # :nodoc:
  17. @parts.to_yaml(options)
  18. end
  19. 1 def attachments
  20. Mail::AttachmentsList.new(@parts)
  21. end
  22. 1 def collect
  23. if block_given?
  24. ary = PartsList.new
  25. each { |o| ary << yield(o) }
  26. ary
  27. else
  28. to_a
  29. end
  30. end
  31. 1 alias_method :map, :collect
  32. 1 def map!
  33. raise NoMethodError, "#map! is not defined, please call #collect and create a new PartsList"
  34. end
  35. 1 def collect!
  36. raise NoMethodError, "#collect! is not defined, please call #collect and create a new PartsList"
  37. end
  38. 1 def sort
  39. self.class.new(@parts.sort)
  40. end
  41. 1 def sort!(order)
  42. # stable sort should be used to maintain the relative order as the parts are added
  43. i = 0;
  44. sorted = @parts.sort_by do |a|
  45. # OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a
  46. # single email message... please show me a use case and I'll put more work into this method,
  47. # in the meantime, it works :)
  48. get_order_value(a, order) << (i += 1)
  49. end
  50. @parts.clear
  51. sorted.each { |p| @parts << p }
  52. end
  53. 1 private
  54. 1 def get_order_value(part, order)
  55. is_attachment = part.respond_to?(:attachment?) && part.attachment?
  56. has_content_type = part.respond_to?(:content_type) && !part[:content_type].nil?
  57. [is_attachment ? 1 : 0, (has_content_type ? order.index(part[:content_type].string.downcase) : nil) || 10000]
  58. end
  59. end
  60. end

target/rubygems/gems/mail-2.7.1/lib/mail/utilities.rb

36.94% lines covered

111 relevant lines. 41 lines covered and 70 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 require 'mail/constants'
  4. 1 module Mail
  5. 1 module Utilities
  6. 1 LF = "\n"
  7. 1 CRLF = "\r\n"
  8. 1 include Constants
  9. # Returns true if the string supplied is free from characters not allowed as an ATOM
  10. 1 def atom_safe?( str )
  11. not ATOM_UNSAFE === str
  12. end
  13. # If the string supplied has ATOM unsafe characters in it, will return the string quoted
  14. # in double quotes, otherwise returns the string unmodified
  15. 1 def quote_atom( str )
  16. atom_safe?( str ) ? str : dquote(str)
  17. end
  18. # If the string supplied has PHRASE unsafe characters in it, will return the string quoted
  19. # in double quotes, otherwise returns the string unmodified
  20. 1 def quote_phrase( str )
  21. if str.respond_to?(:force_encoding)
  22. original_encoding = str.encoding
  23. ascii_str = str.to_s.dup.force_encoding('ASCII-8BIT')
  24. if (PHRASE_UNSAFE === ascii_str)
  25. dquote(ascii_str).force_encoding(original_encoding)
  26. else
  27. str
  28. end
  29. else
  30. (PHRASE_UNSAFE === str) ? dquote(str) : str
  31. end
  32. end
  33. # Returns true if the string supplied is free from characters not allowed as a TOKEN
  34. 1 def token_safe?( str )
  35. not TOKEN_UNSAFE === str
  36. end
  37. # If the string supplied has TOKEN unsafe characters in it, will return the string quoted
  38. # in double quotes, otherwise returns the string unmodified
  39. 1 def quote_token( str )
  40. if str.respond_to?(:force_encoding)
  41. original_encoding = str.encoding
  42. ascii_str = str.to_s.dup.force_encoding('ASCII-8BIT')
  43. if token_safe?( ascii_str )
  44. str
  45. else
  46. dquote(ascii_str).force_encoding(original_encoding)
  47. end
  48. else
  49. token_safe?( str ) ? str : dquote(str)
  50. end
  51. end
  52. # Wraps supplied string in double quotes and applies \-escaping as necessary,
  53. # unless it is already wrapped.
  54. #
  55. # Example:
  56. #
  57. # string = 'This is a string'
  58. # dquote(string) #=> '"This is a string"'
  59. #
  60. # string = 'This is "a string"'
  61. # dquote(string #=> '"This is \"a string\"'
  62. 1 def dquote( str )
  63. '"' + unquote(str).gsub(/[\\"]/n) {|s| '\\' + s } + '"'
  64. end
  65. # Unwraps supplied string from inside double quotes and
  66. # removes any \-escaping.
  67. #
  68. # Example:
  69. #
  70. # string = '"This is a string"'
  71. # unquote(string) #=> 'This is a string'
  72. #
  73. # string = '"This is \"a string\""'
  74. # unqoute(string) #=> 'This is "a string"'
  75. 1 def unquote( str )
  76. if str =~ /^"(.*?)"$/
  77. unescape($1)
  78. else
  79. str
  80. end
  81. end
  82. 1 module_function :unquote
  83. # Removes any \-escaping.
  84. #
  85. # Example:
  86. #
  87. # string = 'This is \"a string\"'
  88. # unescape(string) #=> 'This is "a string"'
  89. #
  90. # string = '"This is \"a string\""'
  91. # unescape(string) #=> '"This is "a string""'
  92. 1 def unescape( str )
  93. str.gsub(/\\(.)/, '\1')
  94. end
  95. 1 module_function :unescape
  96. # Wraps a string in parenthesis and escapes any that are in the string itself.
  97. #
  98. # Example:
  99. #
  100. # paren( 'This is a string' ) #=> '(This is a string)'
  101. 1 def paren( str )
  102. RubyVer.paren( str )
  103. end
  104. # Unwraps a string from being wrapped in parenthesis
  105. #
  106. # Example:
  107. #
  108. # str = '(This is a string)'
  109. # unparen( str ) #=> 'This is a string'
  110. 1 def unparen( str )
  111. match = str.match(/^\((.*?)\)$/)
  112. match ? match[1] : str
  113. end
  114. # Wraps a string in angle brackets and escapes any that are in the string itself
  115. #
  116. # Example:
  117. #
  118. # bracket( 'This is a string' ) #=> '<This is a string>'
  119. 1 def bracket( str )
  120. RubyVer.bracket( str )
  121. end
  122. # Unwraps a string from being wrapped in parenthesis
  123. #
  124. # Example:
  125. #
  126. # str = '<This is a string>'
  127. # unbracket( str ) #=> 'This is a string'
  128. 1 def unbracket( str )
  129. match = str.match(/^\<(.*?)\>$/)
  130. match ? match[1] : str
  131. end
  132. # Escape parenthesies in a string
  133. #
  134. # Example:
  135. #
  136. # str = 'This is (a) string'
  137. # escape_paren( str ) #=> 'This is \(a\) string'
  138. 1 def escape_paren( str )
  139. RubyVer.escape_paren( str )
  140. end
  141. 1 def uri_escape( str )
  142. uri_parser.escape(str)
  143. end
  144. 1 def uri_unescape( str )
  145. uri_parser.unescape(str)
  146. end
  147. 1 def uri_parser
  148. @uri_parser ||= URI.const_defined?(:Parser) ? URI::Parser.new : URI
  149. end
  150. # Matches two objects with their to_s values case insensitively
  151. #
  152. # Example:
  153. #
  154. # obj2 = "This_is_An_object"
  155. # obj1 = :this_IS_an_object
  156. # match_to_s( obj1, obj2 ) #=> true
  157. 1 def match_to_s( obj1, obj2 )
  158. obj1.to_s.casecmp(obj2.to_s) == 0
  159. end
  160. # Capitalizes a string that is joined by hyphens correctly.
  161. #
  162. # Example:
  163. #
  164. # string = 'resent-from-field'
  165. # capitalize_field( string ) #=> 'Resent-From-Field'
  166. 1 def capitalize_field( str )
  167. str.to_s.split("-").map { |v| v.capitalize }.join("-")
  168. end
  169. # Takes an underscored word and turns it into a class name
  170. #
  171. # Example:
  172. #
  173. # constantize("hello") #=> "Hello"
  174. # constantize("hello-there") #=> "HelloThere"
  175. # constantize("hello-there-mate") #=> "HelloThereMate"
  176. 1 def constantize( str )
  177. str.to_s.split(/[-_]/).map { |v| v.capitalize }.to_s
  178. end
  179. # Swaps out all underscores (_) for hyphens (-) good for stringing from symbols
  180. # a field name.
  181. #
  182. # Example:
  183. #
  184. # string = :resent_from_field
  185. # dasherize( string ) #=> 'resent-from-field'
  186. 1 def dasherize( str )
  187. str.to_s.tr(UNDERSCORE, HYPHEN)
  188. end
  189. # Swaps out all hyphens (-) for underscores (_) good for stringing to symbols
  190. # a field name.
  191. #
  192. # Example:
  193. #
  194. # string = :resent_from_field
  195. # underscoreize ( string ) #=> 'resent_from_field'
  196. 1 def underscoreize( str )
  197. 8 str.to_s.downcase.tr(HYPHEN, UNDERSCORE)
  198. end
  199. 1 if RUBY_VERSION <= '1.8.6'
  200. def map_lines( str, &block )
  201. results = []
  202. str.each_line do |line|
  203. results << yield(line)
  204. end
  205. results
  206. end
  207. def map_with_index( enum, &block )
  208. results = []
  209. enum.each_with_index do |token, i|
  210. results[i] = yield(token, i)
  211. end
  212. results
  213. end
  214. else
  215. 1 def map_lines( str, &block )
  216. str.each_line.map(&block)
  217. end
  218. 1 def map_with_index( enum, &block )
  219. enum.each_with_index.map(&block)
  220. end
  221. end
  222. 1 def self.binary_unsafe_to_lf(string) #:nodoc:
  223. string.gsub(/\r\n|\r/, LF)
  224. end
  225. TO_CRLF_REGEX =
  226. if RUBY_VERSION >= '1.9'
  227. # This 1.9 only regex can save a reasonable amount of time (~20%)
  228. # by not matching "\r\n" so the string is returned unchanged in
  229. # the common case.
  230. 1 Regexp.new("(?<!\r)\n|\r(?!\n)")
  231. else
  232. /\n|\r\n|\r/
  233. end
  234. 1 def self.binary_unsafe_to_crlf(string) #:nodoc:
  235. string.gsub(TO_CRLF_REGEX, CRLF)
  236. end
  237. 1 if RUBY_VERSION < '1.9'
  238. def self.safe_for_line_ending_conversion?(string) #:nodoc:
  239. string.ascii_only?
  240. end
  241. else
  242. 1 def self.safe_for_line_ending_conversion?(string) #:nodoc:
  243. if string.encoding == Encoding::BINARY
  244. string.ascii_only?
  245. else
  246. string.valid_encoding?
  247. end
  248. end
  249. end
  250. # Convert line endings to \n unless the string is binary. Used for
  251. # sendmail delivery and for decoding 8bit Content-Transfer-Encoding.
  252. 1 def self.to_lf(string)
  253. string = string.to_s
  254. if safe_for_line_ending_conversion? string
  255. binary_unsafe_to_lf string
  256. else
  257. string
  258. end
  259. end
  260. # Convert line endings to \r\n unless the string is binary. Used for
  261. # encoding 8bit and base64 Content-Transfer-Encoding and for convenience
  262. # when parsing emails with \n line endings instead of the required \r\n.
  263. 1 def self.to_crlf(string)
  264. string = string.to_s
  265. if safe_for_line_ending_conversion? string
  266. binary_unsafe_to_crlf string
  267. else
  268. string
  269. end
  270. end
  271. # Returns true if the object is considered blank.
  272. # A blank includes things like '', ' ', nil,
  273. # and arrays and hashes that have nothing in them.
  274. #
  275. # This logic is mostly shared with ActiveSupport's blank?
  276. 1 def self.blank?(value)
  277. if value.kind_of?(NilClass)
  278. true
  279. elsif value.kind_of?(String)
  280. value !~ /\S/
  281. else
  282. value.respond_to?(:empty?) ? value.empty? : !value
  283. end
  284. end
  285. end
  286. end

target/rubygems/gems/mail-2.7.1/lib/mail/version.rb

88.89% lines covered

9 relevant lines. 8 lines covered and 1 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Mail
  3. 1 module VERSION
  4. 1 MAJOR = 2
  5. 1 MINOR = 7
  6. 1 PATCH = 1
  7. 1 BUILD = nil
  8. 1 STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
  9. 1 def self.version
  10. STRING
  11. end
  12. end
  13. end

target/rubygems/gems/mail-2.7.1/lib/mail/version_specific/ruby_1_9.rb

26.67% lines covered

135 relevant lines. 36 lines covered and 99 lines missed.
    
  1. # encoding: utf-8
  2. # frozen_string_literal: true
  3. 1 module Mail
  4. 1 class Ruby19
  5. 1 class StrictCharsetEncoder
  6. 1 def encode(string, charset)
  7. case charset
  8. when /utf-?7/i
  9. Mail::Ruby19.decode_utf7(string)
  10. else
  11. string.force_encoding(Mail::Ruby19.pick_encoding(charset))
  12. end
  13. end
  14. end
  15. 1 class BestEffortCharsetEncoder
  16. 1 def encode(string, charset)
  17. case charset
  18. when /utf-?7/i
  19. Mail::Ruby19.decode_utf7(string)
  20. else
  21. string.force_encoding(pick_encoding(charset))
  22. end
  23. end
  24. 1 private
  25. 1 def pick_encoding(charset)
  26. charset = case charset
  27. when /ansi_x3.110-1983/
  28. 'ISO-8859-1'
  29. when /Windows-?1258/i # Windows-1258 is similar to 1252
  30. "Windows-1252"
  31. else
  32. charset
  33. end
  34. Mail::Ruby19.pick_encoding(charset)
  35. end
  36. end
  37. 1 class << self
  38. 1 attr_accessor :charset_encoder
  39. end
  40. 1 self.charset_encoder = BestEffortCharsetEncoder.new
  41. # Escapes any parenthesis in a string that are unescaped this uses
  42. # a Ruby 1.9.1 regexp feature of negative look behind
  43. 1 def Ruby19.escape_paren( str )
  44. re = /(?<!\\)([\(\)])/ # Only match unescaped parens
  45. str.gsub(re) { |s| '\\' + s }
  46. end
  47. 1 def Ruby19.paren( str )
  48. str = $1 if str =~ /^\((.*)?\)$/
  49. str = escape_paren( str )
  50. '(' + str + ')'
  51. end
  52. 1 def Ruby19.escape_bracket( str )
  53. re = /(?<!\\)([\<\>])/ # Only match unescaped brackets
  54. str.gsub(re) { |s| '\\' + s }
  55. end
  56. 1 def Ruby19.bracket( str )
  57. str = $1 if str =~ /^\<(.*)?\>$/
  58. str = escape_bracket( str )
  59. '<' + str + '>'
  60. end
  61. 1 def Ruby19.decode_base64(str)
  62. if !str.end_with?("=") && str.length % 4 != 0
  63. str = str.ljust((str.length + 3) & ~3, "=")
  64. end
  65. str.unpack( 'm' ).first
  66. end
  67. 1 def Ruby19.encode_base64(str)
  68. [str].pack( 'm' )
  69. end
  70. 1 def Ruby19.has_constant?(klass, string)
  71. klass.const_defined?( string, false )
  72. end
  73. 1 def Ruby19.get_constant(klass, string)
  74. klass.const_get( string )
  75. end
  76. 1 def Ruby19.transcode_charset(str, from_encoding, to_encoding = Encoding::UTF_8)
  77. to_encoding = to_encoding.to_s if RUBY_VERSION < '1.9.3'
  78. to_encoding = Encoding.find(to_encoding)
  79. replacement_char = to_encoding == Encoding::UTF_8 ? '���' : '?'
  80. charset_encoder.encode(str.dup, from_encoding).encode(to_encoding, :undef => :replace, :invalid => :replace, :replace => replacement_char)
  81. end
  82. # From Ruby stdlib Net::IMAP
  83. 1 def Ruby19.encode_utf7(string)
  84. string.gsub(/(&)|[^\x20-\x7e]+/) do
  85. if $1
  86. "&-"
  87. else
  88. base64 = [$&.encode(Encoding::UTF_16BE)].pack("m0")
  89. "&" + base64.delete("=").tr("/", ",") + "-"
  90. end
  91. end.force_encoding(Encoding::ASCII_8BIT)
  92. end
  93. 1 def Ruby19.decode_utf7(utf7)
  94. utf7.gsub(/&([^-]+)?-/n) do
  95. if $1
  96. ($1.tr(",", "/") + "===").unpack("m")[0].encode(Encoding::UTF_8, Encoding::UTF_16BE)
  97. else
  98. "&"
  99. end
  100. end
  101. end
  102. 1 def Ruby19.b_value_encode(str, encoding = nil)
  103. encoding = str.encoding.to_s
  104. [Ruby19.encode_base64(str), encoding]
  105. end
  106. 1 def Ruby19.b_value_decode(str)
  107. match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m)
  108. if match
  109. charset = match[1]
  110. str = Ruby19.decode_base64(match[2])
  111. str = charset_encoder.encode(str, charset)
  112. end
  113. transcode_to_scrubbed_utf8(str)
  114. rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
  115. warn "Encoding conversion failed #{$!}"
  116. str.dup.force_encoding(Encoding::UTF_8)
  117. end
  118. 1 def Ruby19.q_value_encode(str, encoding = nil)
  119. encoding = str.encoding.to_s
  120. [Encodings::QuotedPrintable.encode(str), encoding]
  121. end
  122. 1 def Ruby19.q_value_decode(str)
  123. match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
  124. if match
  125. charset = match[1]
  126. string = match[2].gsub(/_/, '=20')
  127. # Remove trailing = if it exists in a Q encoding
  128. string = string.sub(/\=$/, '')
  129. str = Encodings::QuotedPrintable.decode(string)
  130. str = charset_encoder.encode(str, charset)
  131. # We assume that binary strings hold utf-8 directly to work around
  132. # jruby/jruby#829 which subtly changes String#encode semantics.
  133. str.force_encoding(Encoding::UTF_8) if str.encoding == Encoding::ASCII_8BIT
  134. end
  135. transcode_to_scrubbed_utf8(str)
  136. rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
  137. warn "Encoding conversion failed #{$!}"
  138. str.dup.force_encoding(Encoding::UTF_8)
  139. end
  140. 1 def Ruby19.param_decode(str, encoding)
  141. str = uri_parser.unescape(str)
  142. str = charset_encoder.encode(str, encoding) if encoding
  143. transcode_to_scrubbed_utf8(str)
  144. rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
  145. warn "Encoding conversion failed #{$!}"
  146. str.dup.force_encoding(Encoding::UTF_8)
  147. end
  148. 1 def Ruby19.param_encode(str)
  149. encoding = str.encoding.to_s.downcase
  150. language = Configuration.instance.param_encode_language
  151. "#{encoding}'#{language}'#{uri_parser.escape(str)}"
  152. end
  153. 1 def Ruby19.uri_parser
  154. @uri_parser ||= URI::Parser.new
  155. end
  156. # Pick a Ruby encoding corresponding to the message charset. Most
  157. # charsets have a Ruby encoding, but some need manual aliasing here.
  158. #
  159. # TODO: add this as a test somewhere:
  160. # Encoding.list.map { |e| [e.to_s.upcase == pick_encoding(e.to_s.downcase.gsub("-", "")), e.to_s] }.select {|a,b| !b}
  161. # Encoding.list.map { |e| [e.to_s == pick_encoding(e.to_s), e.to_s] }.select {|a,b| !b}
  162. 1 def Ruby19.pick_encoding(charset)
  163. charset = charset.to_s
  164. encoding = case charset.downcase
  165. # ISO-8859-8-I etc. http://en.wikipedia.org/wiki/ISO-8859-8-I
  166. when /^iso[-_]?8859-(\d+)(-i)?$/
  167. "ISO-8859-#{$1}"
  168. # ISO-8859-15, ISO-2022-JP and alike
  169. when /^iso[-_]?(\d{4})-?(\w{1,2})$/
  170. "ISO-#{$1}-#{$2}"
  171. # "ISO-2022-JP-KDDI" and alike
  172. when /^iso[-_]?(\d{4})-?(\w{1,2})-?(\w*)$/
  173. "ISO-#{$1}-#{$2}-#{$3}"
  174. # UTF-8, UTF-32BE and alike
  175. when /^utf[\-_]?(\d{1,2})?(\w{1,2})$/
  176. "UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
  177. # Windows-1252 and alike
  178. when /^windows-?(.*)$/
  179. "Windows-#{$1}"
  180. when '8bit'
  181. Encoding::ASCII_8BIT
  182. # alternatives/misspellings of us-ascii seen in the wild
  183. when /^iso[-_]?646(-us)?$/, 'us=ascii'
  184. Encoding::ASCII
  185. # Microsoft-specific alias for MACROMAN
  186. when 'macintosh'
  187. Encoding::MACROMAN
  188. # Microsoft-specific alias for CP949 (Korean)
  189. when 'ks_c_5601-1987'
  190. Encoding::CP949
  191. # Wrongly written Shift_JIS (Japanese)
  192. when 'shift-jis'
  193. Encoding::Shift_JIS
  194. # GB2312 (Chinese charset) is a subset of GB18030 (its replacement)
  195. when 'gb2312'
  196. Encoding::GB18030
  197. when 'cp-850'
  198. Encoding::CP850
  199. when 'latin2'
  200. Encoding::ISO_8859_2
  201. else
  202. charset
  203. end
  204. convert_to_encoding(encoding)
  205. end
  206. 1 if "string".respond_to?(:byteslice)
  207. 1 def Ruby19.string_byteslice(str, *args)
  208. str.byteslice(*args)
  209. end
  210. else
  211. def Ruby19.string_byteslice(str, *args)
  212. str.unpack('C*').slice(*args).pack('C*').force_encoding(str.encoding)
  213. end
  214. end
  215. 1 class << self
  216. 1 private
  217. 1 def convert_to_encoding(encoding)
  218. if encoding.is_a?(Encoding)
  219. encoding
  220. else
  221. # Fall back to ASCII for charsets that Ruby doesn't recognize
  222. begin
  223. Encoding.find(encoding)
  224. rescue ArgumentError
  225. Encoding::BINARY
  226. end
  227. end
  228. end
  229. 1 def transcode_to_scrubbed_utf8(str)
  230. decoded = str.encode(Encoding::UTF_8, :undef => :replace, :invalid => :replace, :replace => "���")
  231. decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "���").encode(Encoding::UTF_8)
  232. end
  233. end
  234. end
  235. end

target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime.rb

37.5% lines covered

96 relevant lines. 36 lines covered and 60 lines missed.
    
  1. 1 require "mini_mime/version"
  2. 1 require "thread"
  3. 1 module MiniMime
  4. 1 def self.lookup_by_filename(filename)
  5. Db.lookup_by_filename(filename)
  6. end
  7. 1 def self.lookup_by_extension(extension)
  8. Db.lookup_by_extension(extension)
  9. end
  10. 1 def self.lookup_by_content_type(mime)
  11. Db.lookup_by_content_type(mime)
  12. end
  13. 1 module Configuration
  14. 1 class << self
  15. 1 attr_accessor :ext_db_path
  16. 1 attr_accessor :content_type_db_path
  17. end
  18. 1 self.ext_db_path = File.expand_path("../db/ext_mime.db", __FILE__)
  19. 1 self.content_type_db_path = File.expand_path("../db/content_type_mime.db", __FILE__)
  20. end
  21. 1 class Info
  22. 1 BINARY_ENCODINGS = %w(base64 8bit)
  23. 1 attr_accessor :extension, :content_type, :encoding
  24. 1 def initialize(buffer)
  25. @extension, @content_type, @encoding = buffer.split(/\s+/).map!(&:freeze)
  26. end
  27. 1 def [](idx)
  28. if idx == 0
  29. @extension
  30. elsif idx == 1
  31. @content_type
  32. elsif idx == 2
  33. @encoding
  34. end
  35. end
  36. 1 def binary?
  37. BINARY_ENCODINGS.include?(encoding)
  38. end
  39. end
  40. 1 class Db
  41. 1 LOCK = Mutex.new
  42. 1 def self.lookup_by_filename(filename)
  43. extension = File.extname(filename)
  44. return if extension.empty?
  45. extension = extension[1..-1]
  46. extension.downcase!
  47. lookup_by_extension(extension)
  48. end
  49. 1 def self.lookup_by_extension(extension)
  50. LOCK.synchronize do
  51. @db ||= new
  52. @db.lookup_by_extension(extension)
  53. end
  54. end
  55. 1 def self.lookup_by_content_type(content_type)
  56. LOCK.synchronize do
  57. @db ||= new
  58. @db.lookup_by_content_type(content_type)
  59. end
  60. end
  61. 1 class Cache
  62. 1 def initialize(size)
  63. @size = size
  64. @hash = {}
  65. end
  66. 1 def []=(key, val)
  67. rval = @hash[key] = val
  68. @hash.shift if @hash.length > @size
  69. rval
  70. end
  71. 1 def fetch(key, &blk)
  72. @hash.fetch(key, &blk)
  73. end
  74. end
  75. 1 class RandomAccessDb
  76. 1 MAX_CACHED = 100
  77. 1 def initialize(path, sort_order)
  78. @path = path
  79. @file = File.open(@path)
  80. @row_length = @file.readline.length
  81. @file_length = File.size(@path)
  82. @rows = @file_length / @row_length
  83. @hit_cache = Cache.new(MAX_CACHED)
  84. @miss_cache = Cache.new(MAX_CACHED)
  85. @sort_order = sort_order
  86. end
  87. 1 def lookup(val)
  88. @hit_cache.fetch(val) do
  89. @miss_cache.fetch(val) do
  90. data = lookup_uncached(val)
  91. if data
  92. @hit_cache[val] = data
  93. else
  94. @miss_cache[val] = nil
  95. end
  96. data
  97. end
  98. end
  99. end
  100. # lifted from marcandre/backports
  101. 1 def lookup_uncached(val)
  102. from = 0
  103. to = @rows - 1
  104. result = nil
  105. while from <= to do
  106. midpoint = from + (to-from).div(2)
  107. current = resolve(midpoint)
  108. data = current[@sort_order]
  109. if data > val
  110. to = midpoint - 1
  111. elsif data < val
  112. from = midpoint + 1
  113. else
  114. result = current
  115. break
  116. end
  117. end
  118. result
  119. end
  120. 1 def resolve(row)
  121. @file.seek(row*@row_length)
  122. Info.new(@file.readline)
  123. end
  124. end
  125. 1 def initialize
  126. @ext_db = RandomAccessDb.new(Configuration.ext_db_path, 0)
  127. @content_type_db = RandomAccessDb.new(Configuration.content_type_db_path, 1)
  128. end
  129. 1 def lookup_by_extension(extension)
  130. @ext_db.lookup(extension)
  131. end
  132. 1 def lookup_by_content_type(content_type)
  133. @content_type_db.lookup(content_type)
  134. end
  135. end
  136. end

target/rubygems/gems/mini_mime-1.0.2/lib/mini_mime/version.rb

100.0% lines covered

2 relevant lines. 2 lines covered and 0 lines missed.
    
  1. 1 module MiniMime
  2. 1 VERSION = "1.0.2"
  3. end

target/rubygems/gems/minitest-5.11.3/lib/minitest/pride_plugin.rb

37.93% lines covered

58 relevant lines. 22 lines covered and 36 lines missed.
    
  1. 1 require "minitest"
  2. 1 module Minitest
  3. 1 def self.plugin_pride_options opts, _options # :nodoc:
  4. 1 opts.on "-p", "--pride", "Pride. Show your testing pride!" do
  5. PrideIO.pride!
  6. end
  7. end
  8. 1 def self.plugin_pride_init options # :nodoc:
  9. 1 if PrideIO.pride? then
  10. klass = ENV["TERM"] =~ /^xterm|-256color$/ ? PrideLOL : PrideIO
  11. io = klass.new options[:io]
  12. self.reporter.reporters.grep(Minitest::Reporter).each do |rep|
  13. rep.io = io if rep.io.tty?
  14. end
  15. end
  16. end
  17. ##
  18. # Show your testing pride!
  19. 1 class PrideIO
  20. ##
  21. # Activate the pride plugin. Called from both -p option and minitest/pride
  22. 1 def self.pride!
  23. @pride = true
  24. end
  25. ##
  26. # Are we showing our testing pride?
  27. 1 def self.pride?
  28. 1 @pride ||= false
  29. end
  30. # Start an escape sequence
  31. 1 ESC = "\e["
  32. # End the escape sequence
  33. 1 NND = "#{ESC}0m"
  34. # The IO we're going to pipe through.
  35. 1 attr_reader :io
  36. 1 def initialize io # :nodoc:
  37. @io = io
  38. # stolen from /System/Library/Perl/5.10.0/Term/ANSIColor.pm
  39. # also reference http://en.wikipedia.org/wiki/ANSI_escape_code
  40. @colors ||= (31..36).to_a
  41. @size = @colors.size
  42. @index = 0
  43. end
  44. ##
  45. # Wrap print to colorize the output.
  46. 1 def print o
  47. case o
  48. when "." then
  49. io.print pride o
  50. when "E", "F" then
  51. io.print "#{ESC}41m#{ESC}37m#{o}#{NND}"
  52. when "S" then
  53. io.print pride o
  54. else
  55. io.print o
  56. end
  57. end
  58. 1 def puts *o # :nodoc:
  59. o.map! { |s|
  60. s.to_s.sub(/Finished/) {
  61. @index = 0
  62. "Fabulous run".split(//).map { |c|
  63. pride(c)
  64. }.join
  65. }
  66. }
  67. io.puts(*o)
  68. end
  69. ##
  70. # Color a string.
  71. 1 def pride string
  72. string = "*" if string == "."
  73. c = @colors[@index % @size]
  74. @index += 1
  75. "#{ESC}#{c}m#{string}#{NND}"
  76. end
  77. 1 def method_missing msg, *args # :nodoc:
  78. io.send(msg, *args)
  79. end
  80. end
  81. ##
  82. # If you thought the PrideIO was colorful...
  83. #
  84. # (Inspired by lolcat, but with clean math)
  85. 1 class PrideLOL < PrideIO
  86. 1 PI_3 = Math::PI / 3 # :nodoc:
  87. 1 def initialize io # :nodoc:
  88. # walk red, green, and blue around a circle separated by equal thirds.
  89. #
  90. # To visualize, type this into wolfram-alpha:
  91. #
  92. # plot (3*sin(x)+3), (3*sin(x+2*pi/3)+3), (3*sin(x+4*pi/3)+3)
  93. # 6 has wide pretty gradients. 3 == lolcat, about half the width
  94. @colors = (0...(6 * 7)).map { |n|
  95. n *= 1.0 / 6
  96. r = (3 * Math.sin(n ) + 3).to_i
  97. g = (3 * Math.sin(n + 2 * PI_3) + 3).to_i
  98. b = (3 * Math.sin(n + 4 * PI_3) + 3).to_i
  99. # Then we take rgb and encode them in a single number using base 6.
  100. # For some mysterious reason, we add 16... to clear the bottom 4 bits?
  101. # Yes... they're ugly.
  102. 36 * r + 6 * g + b + 16
  103. }
  104. super
  105. end
  106. ##
  107. # Make the string even more colorful. Damnit.
  108. 1 def pride string
  109. c = @colors[@index % @size]
  110. @index += 1
  111. "#{ESC}38;5;#{c}m#{string}#{NND}"
  112. end
  113. end
  114. end

target/rubygems/gems/rack-2.0.7/lib/rack/conditional_get.rb

57.14% lines covered

35 relevant lines. 20 lines covered and 15 lines missed.
    
  1. 1 require 'rack/utils'
  2. 1 module Rack
  3. # Middleware that enables conditional GET using If-None-Match and
  4. # If-Modified-Since. The application should set either or both of the
  5. # Last-Modified or Etag response headers according to RFC 2616. When
  6. # either of the conditions is met, the response body is set to be zero
  7. # length and the response status is set to 304 Not Modified.
  8. #
  9. # Applications that defer response body generation until the body's each
  10. # message is received will avoid response body generation completely when
  11. # a conditional GET matches.
  12. #
  13. # Adapted from Michael Klishin's Merb implementation:
  14. # https://github.com/wycats/merb/blob/master/merb-core/lib/merb-core/rack/middleware/conditional_get.rb
  15. 1 class ConditionalGet
  16. 1 def initialize(app)
  17. 1 @app = app
  18. end
  19. 1 def call(env)
  20. 3 case env[REQUEST_METHOD]
  21. when "GET", "HEAD"
  22. 1 status, headers, body = @app.call(env)
  23. 1 headers = Utils::HeaderHash.new(headers)
  24. 1 if status == 200 && fresh?(env, headers)
  25. status = 304
  26. headers.delete(CONTENT_TYPE)
  27. headers.delete(CONTENT_LENGTH)
  28. original_body = body
  29. body = Rack::BodyProxy.new([]) do
  30. original_body.close if original_body.respond_to?(:close)
  31. end
  32. end
  33. 1 [status, headers, body]
  34. else
  35. 2 @app.call(env)
  36. end
  37. end
  38. 1 private
  39. 1 def fresh?(env, headers)
  40. 1 modified_since = env['HTTP_IF_MODIFIED_SINCE']
  41. 1 none_match = env['HTTP_IF_NONE_MATCH']
  42. 1 return false unless modified_since || none_match
  43. success = true
  44. success &&= modified_since?(to_rfc2822(modified_since), headers) if modified_since
  45. success &&= etag_matches?(none_match, headers) if none_match
  46. success
  47. end
  48. 1 def etag_matches?(none_match, headers)
  49. etag = headers['ETag'] and etag == none_match
  50. end
  51. 1 def modified_since?(modified_since, headers)
  52. last_modified = to_rfc2822(headers['Last-Modified']) and
  53. modified_since and
  54. modified_since >= last_modified
  55. end
  56. 1 def to_rfc2822(since)
  57. # shortest possible valid date is the obsolete: 1 Nov 97 09:55 A
  58. # anything shorter is invalid, this avoids exceptions for common cases
  59. # most common being the empty string
  60. if since && since.length >= 16
  61. # NOTE: there is no trivial way to write this in a non execption way
  62. # _rfc2822 returns a hash but is not that usable
  63. Time.rfc2822(since) rescue nil
  64. else
  65. nil
  66. end
  67. end
  68. end
  69. end

target/rubygems/gems/rack-2.0.7/lib/rack/etag.rb

97.37% lines covered

38 relevant lines. 37 lines covered and 1 lines missed.
    
  1. 1 require 'rack'
  2. 1 require 'digest/sha2'
  3. 1 module Rack
  4. # Automatically sets the ETag header on all String bodies.
  5. #
  6. # The ETag header is skipped if ETag or Last-Modified headers are sent or if
  7. # a sendfile body (body.responds_to :to_path) is given (since such cases
  8. # should be handled by apache/nginx).
  9. #
  10. # On initialization, you can pass two parameters: a Cache-Control directive
  11. # used when Etag is absent and a directive when it is present. The first
  12. # defaults to nil, while the second defaults to "max-age=0, private, must-revalidate"
  13. 1 class ETag
  14. 1 ETAG_STRING = Rack::ETAG
  15. 1 DEFAULT_CACHE_CONTROL = "max-age=0, private, must-revalidate".freeze
  16. 1 def initialize(app, no_cache_control = nil, cache_control = DEFAULT_CACHE_CONTROL)
  17. 1 @app = app
  18. 1 @cache_control = cache_control
  19. 1 @no_cache_control = no_cache_control
  20. end
  21. 1 def call(env)
  22. 3 status, headers, body = @app.call(env)
  23. 3 if etag_status?(status) && etag_body?(body) && !skip_caching?(headers)
  24. 1 original_body = body
  25. 1 digest, new_body = digest_body(body)
  26. 1 body = Rack::BodyProxy.new(new_body) do
  27. 1 original_body.close if original_body.respond_to?(:close)
  28. end
  29. 1 headers[ETAG_STRING] = %(W/"#{digest}") if digest
  30. end
  31. 3 unless headers[CACHE_CONTROL]
  32. 3 if digest
  33. 1 headers[CACHE_CONTROL] = @cache_control if @cache_control
  34. else
  35. 2 headers[CACHE_CONTROL] = @no_cache_control if @no_cache_control
  36. end
  37. end
  38. 3 [status, headers, body]
  39. end
  40. 1 private
  41. 1 def etag_status?(status)
  42. 3 status == 200 || status == 201
  43. end
  44. 1 def etag_body?(body)
  45. 1 !body.respond_to?(:to_path)
  46. end
  47. 1 def skip_caching?(headers)
  48. 1 (headers[CACHE_CONTROL] && headers[CACHE_CONTROL].include?('no-cache')) ||
  49. headers.key?(ETAG_STRING) || headers.key?('Last-Modified')
  50. end
  51. 1 def digest_body(body)
  52. 1 parts = []
  53. 1 digest = nil
  54. 1 body.each do |part|
  55. 1 parts << part
  56. 1 (digest ||= Digest::SHA256.new) << part unless part.empty?
  57. end
  58. 1 [digest && digest.hexdigest.byteslice(0, 32), parts]
  59. end
  60. end
  61. end

target/rubygems/gems/rack-2.0.7/lib/rack/file.rb

33.71% lines covered

89 relevant lines. 30 lines covered and 59 lines missed.
    
  1. 1 require 'time'
  2. 1 require 'rack/utils'
  3. 1 require 'rack/mime'
  4. 1 require 'rack/request'
  5. 1 require 'rack/head'
  6. 1 module Rack
  7. # Rack::File serves files below the +root+ directory given, according to the
  8. # path info of the Rack request.
  9. # e.g. when Rack::File.new("/etc") is used, you can access 'passwd' file
  10. # as http://localhost:9292/passwd
  11. #
  12. # Handlers can detect if bodies are a Rack::File, and use mechanisms
  13. # like sendfile on the +path+.
  14. 1 class File
  15. 1 ALLOWED_VERBS = %w[GET HEAD OPTIONS]
  16. 1 ALLOW_HEADER = ALLOWED_VERBS.join(', ')
  17. 1 attr_reader :root
  18. 1 def initialize(root, headers={}, default_mime = 'text/plain')
  19. 1 @root = root
  20. 1 @headers = headers
  21. 1 @default_mime = default_mime
  22. 1 @head = Rack::Head.new(lambda { |env| get env })
  23. end
  24. 1 def call(env)
  25. # HEAD requests drop the response body, including 4xx error messages.
  26. @head.call env
  27. end
  28. 1 def get(env)
  29. request = Rack::Request.new env
  30. unless ALLOWED_VERBS.include? request.request_method
  31. return fail(405, "Method Not Allowed", {'Allow' => ALLOW_HEADER})
  32. end
  33. path_info = Utils.unescape_path request.path_info
  34. return fail(400, "Bad Request") unless Utils.valid_path?(path_info)
  35. clean_path_info = Utils.clean_path_info(path_info)
  36. path = ::File.join(@root, clean_path_info)
  37. available = begin
  38. ::File.file?(path) && ::File.readable?(path)
  39. rescue SystemCallError
  40. false
  41. end
  42. if available
  43. serving(request, path)
  44. else
  45. fail(404, "File not found: #{path_info}")
  46. end
  47. end
  48. 1 def serving(request, path)
  49. if request.options?
  50. return [200, {'Allow' => ALLOW_HEADER, CONTENT_LENGTH => '0'}, []]
  51. end
  52. last_modified = ::File.mtime(path).httpdate
  53. return [304, {}, []] if request.get_header('HTTP_IF_MODIFIED_SINCE') == last_modified
  54. headers = { "Last-Modified" => last_modified }
  55. mime_type = mime_type path, @default_mime
  56. headers[CONTENT_TYPE] = mime_type if mime_type
  57. # Set custom headers
  58. @headers.each { |field, content| headers[field] = content } if @headers
  59. response = [ 200, headers ]
  60. size = filesize path
  61. range = nil
  62. ranges = Rack::Utils.get_byte_ranges(request.get_header('HTTP_RANGE'), size)
  63. if ranges.nil? || ranges.length > 1
  64. # No ranges, or multiple ranges (which we don't support):
  65. # TODO: Support multiple byte-ranges
  66. response[0] = 200
  67. range = 0..size-1
  68. elsif ranges.empty?
  69. # Unsatisfiable. Return error, and file size:
  70. response = fail(416, "Byte range unsatisfiable")
  71. response[1]["Content-Range"] = "bytes */#{size}"
  72. return response
  73. else
  74. # Partial content:
  75. range = ranges[0]
  76. response[0] = 206
  77. response[1]["Content-Range"] = "bytes #{range.begin}-#{range.end}/#{size}"
  78. size = range.end - range.begin + 1
  79. end
  80. response[2] = [response_body] unless response_body.nil?
  81. response[1][CONTENT_LENGTH] = size.to_s
  82. response[2] = make_body request, path, range
  83. response
  84. end
  85. 1 class Iterator
  86. 1 attr_reader :path, :range
  87. 1 alias :to_path :path
  88. 1 def initialize path, range
  89. @path = path
  90. @range = range
  91. end
  92. 1 def each
  93. ::File.open(path, "rb") do |file|
  94. file.seek(range.begin)
  95. remaining_len = range.end-range.begin+1
  96. while remaining_len > 0
  97. part = file.read([8192, remaining_len].min)
  98. break unless part
  99. remaining_len -= part.length
  100. yield part
  101. end
  102. end
  103. end
  104. 1 def close; end
  105. end
  106. 1 private
  107. 1 def make_body request, path, range
  108. if request.head?
  109. []
  110. else
  111. Iterator.new path, range
  112. end
  113. end
  114. 1 def fail(status, body, headers = {})
  115. body += "\n"
  116. [
  117. status,
  118. {
  119. CONTENT_TYPE => "text/plain",
  120. CONTENT_LENGTH => body.size.to_s,
  121. "X-Cascade" => "pass"
  122. }.merge!(headers),
  123. [body]
  124. ]
  125. end
  126. # The MIME type for the contents of the file located at @path
  127. 1 def mime_type path, default_mime
  128. Mime.mime_type(::File.extname(path), default_mime)
  129. end
  130. 1 def filesize path
  131. # If response_body is present, use its size.
  132. return response_body.bytesize if response_body
  133. # We check via File::size? whether this file provides size info
  134. # via stat (e.g. /proc files often don't), otherwise we have to
  135. # figure it out by reading the whole file into memory.
  136. ::File.size?(path) || ::File.read(path).bytesize
  137. end
  138. # By default, the response body for file requests is nil.
  139. # In this case, the response body will be generated later
  140. # from the file at @path
  141. 1 def response_body
  142. nil
  143. end
  144. end
  145. end

target/rubygems/gems/rack-2.0.7/lib/rack/head.rb

81.82% lines covered

11 relevant lines. 9 lines covered and 2 lines missed.
    
  1. 1 require 'rack/body_proxy'
  2. 1 module Rack
  3. # Rack::Head returns an empty body for all HEAD requests. It leaves
  4. # all other requests unchanged.
  5. 1 class Head
  6. 1 def initialize(app)
  7. 2 @app = app
  8. end
  9. 1 def call(env)
  10. 3 status, headers, body = @app.call(env)
  11. 3 if env[REQUEST_METHOD] == HEAD
  12. [
  13. status, headers, Rack::BodyProxy.new([]) do
  14. body.close if body.respond_to? :close
  15. end
  16. ]
  17. else
  18. 3 [status, headers, body]
  19. end
  20. end
  21. end
  22. end

target/rubygems/gems/rack-2.0.7/lib/rack/method_override.rb

82.76% lines covered

29 relevant lines. 24 lines covered and 5 lines missed.
    
  1. 1 module Rack
  2. 1 class MethodOverride
  3. 1 HTTP_METHODS = %w[GET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINK]
  4. 1 METHOD_OVERRIDE_PARAM_KEY = "_method".freeze
  5. 1 HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE".freeze
  6. 1 ALLOWED_METHODS = %w[POST]
  7. 1 def initialize(app)
  8. 1 @app = app
  9. end
  10. 1 def call(env)
  11. 3 if allowed_methods.include?(env[REQUEST_METHOD])
  12. 2 method = method_override(env)
  13. 2 if HTTP_METHODS.include?(method)
  14. env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
  15. env[REQUEST_METHOD] = method
  16. end
  17. end
  18. 3 @app.call(env)
  19. end
  20. 1 def method_override(env)
  21. 2 req = Request.new(env)
  22. 2 method = method_override_param(req) ||
  23. 1 env[HTTP_METHOD_OVERRIDE_HEADER]
  24. 2 begin
  25. 2 method.to_s.upcase
  26. rescue ArgumentError
  27. env[RACK_ERRORS].puts "Invalid string for method"
  28. end
  29. end
  30. 1 private
  31. 1 def allowed_methods
  32. 3 ALLOWED_METHODS
  33. end
  34. 1 def method_override_param(req)
  35. 2 req.POST[METHOD_OVERRIDE_PARAM_KEY]
  36. rescue Utils::InvalidParameterError, Utils::ParameterTypeError
  37. req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params"
  38. rescue EOFError
  39. req.get_header(RACK_ERRORS).puts "Bad request content body"
  40. end
  41. end
  42. end

target/rubygems/gems/rack-2.0.7/lib/rack/mime.rb

63.64% lines covered

11 relevant lines. 7 lines covered and 4 lines missed.
    
  1. 1 module Rack
  2. 1 module Mime
  3. # Returns String with mime type if found, otherwise use +fallback+.
  4. # +ext+ should be filename extension in the '.ext' format that
  5. # File.extname(file) returns.
  6. # +fallback+ may be any object
  7. #
  8. # Also see the documentation for MIME_TYPES
  9. #
  10. # Usage:
  11. # Rack::Mime.mime_type('.foo')
  12. #
  13. # This is a shortcut for:
  14. # Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')
  15. 1 def mime_type(ext, fallback='application/octet-stream')
  16. MIME_TYPES.fetch(ext.to_s.downcase, fallback)
  17. end
  18. 1 module_function :mime_type
  19. # Returns true if the given value is a mime match for the given mime match
  20. # specification, false otherwise.
  21. #
  22. # Rack::Mime.match?('text/html', 'text/*') => true
  23. # Rack::Mime.match?('text/plain', '*') => true
  24. # Rack::Mime.match?('text/html', 'application/json') => false
  25. 1 def match?(value, matcher)
  26. v1, v2 = value.split('/', 2)
  27. m1, m2 = matcher.split('/', 2)
  28. (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
  29. end
  30. 1 module_function :match?
  31. # List of most common mime-types, selected various sources
  32. # according to their usefulness in a webserving scope for Ruby
  33. # users.
  34. #
  35. # To amend this list with your local mime.types list you can use:
  36. #
  37. # require 'webrick/httputils'
  38. # list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
  39. # Rack::Mime::MIME_TYPES.merge!(list)
  40. #
  41. # N.B. On Ubuntu the mime.types file does not include the leading period, so
  42. # users may need to modify the data before merging into the hash.
  43. 1 MIME_TYPES = {
  44. ".123" => "application/vnd.lotus-1-2-3",
  45. ".3dml" => "text/vnd.in3d.3dml",
  46. ".3g2" => "video/3gpp2",
  47. ".3gp" => "video/3gpp",
  48. ".a" => "application/octet-stream",
  49. ".acc" => "application/vnd.americandynamics.acc",
  50. ".ace" => "application/x-ace-compressed",
  51. ".acu" => "application/vnd.acucobol",
  52. ".aep" => "application/vnd.audiograph",
  53. ".afp" => "application/vnd.ibm.modcap",
  54. ".ai" => "application/postscript",
  55. ".aif" => "audio/x-aiff",
  56. ".aiff" => "audio/x-aiff",
  57. ".ami" => "application/vnd.amiga.ami",
  58. ".appcache" => "text/cache-manifest",
  59. ".apr" => "application/vnd.lotus-approach",
  60. ".asc" => "application/pgp-signature",
  61. ".asf" => "video/x-ms-asf",
  62. ".asm" => "text/x-asm",
  63. ".aso" => "application/vnd.accpac.simply.aso",
  64. ".asx" => "video/x-ms-asf",
  65. ".atc" => "application/vnd.acucorp",
  66. ".atom" => "application/atom+xml",
  67. ".atomcat" => "application/atomcat+xml",
  68. ".atomsvc" => "application/atomsvc+xml",
  69. ".atx" => "application/vnd.antix.game-component",
  70. ".au" => "audio/basic",
  71. ".avi" => "video/x-msvideo",
  72. ".bat" => "application/x-msdownload",
  73. ".bcpio" => "application/x-bcpio",
  74. ".bdm" => "application/vnd.syncml.dm+wbxml",
  75. ".bh2" => "application/vnd.fujitsu.oasysprs",
  76. ".bin" => "application/octet-stream",
  77. ".bmi" => "application/vnd.bmi",
  78. ".bmp" => "image/bmp",
  79. ".box" => "application/vnd.previewsystems.box",
  80. ".btif" => "image/prs.btif",
  81. ".bz" => "application/x-bzip",
  82. ".bz2" => "application/x-bzip2",
  83. ".c" => "text/x-c",
  84. ".c4g" => "application/vnd.clonk.c4group",
  85. ".cab" => "application/vnd.ms-cab-compressed",
  86. ".cc" => "text/x-c",
  87. ".ccxml" => "application/ccxml+xml",
  88. ".cdbcmsg" => "application/vnd.contact.cmsg",
  89. ".cdkey" => "application/vnd.mediastation.cdkey",
  90. ".cdx" => "chemical/x-cdx",
  91. ".cdxml" => "application/vnd.chemdraw+xml",
  92. ".cdy" => "application/vnd.cinderella",
  93. ".cer" => "application/pkix-cert",
  94. ".cgm" => "image/cgm",
  95. ".chat" => "application/x-chat",
  96. ".chm" => "application/vnd.ms-htmlhelp",
  97. ".chrt" => "application/vnd.kde.kchart",
  98. ".cif" => "chemical/x-cif",
  99. ".cii" => "application/vnd.anser-web-certificate-issue-initiation",
  100. ".cil" => "application/vnd.ms-artgalry",
  101. ".cla" => "application/vnd.claymore",
  102. ".class" => "application/octet-stream",
  103. ".clkk" => "application/vnd.crick.clicker.keyboard",
  104. ".clkp" => "application/vnd.crick.clicker.palette",
  105. ".clkt" => "application/vnd.crick.clicker.template",
  106. ".clkw" => "application/vnd.crick.clicker.wordbank",
  107. ".clkx" => "application/vnd.crick.clicker",
  108. ".clp" => "application/x-msclip",
  109. ".cmc" => "application/vnd.cosmocaller",
  110. ".cmdf" => "chemical/x-cmdf",
  111. ".cml" => "chemical/x-cml",
  112. ".cmp" => "application/vnd.yellowriver-custom-menu",
  113. ".cmx" => "image/x-cmx",
  114. ".com" => "application/x-msdownload",
  115. ".conf" => "text/plain",
  116. ".cpio" => "application/x-cpio",
  117. ".cpp" => "text/x-c",
  118. ".cpt" => "application/mac-compactpro",
  119. ".crd" => "application/x-mscardfile",
  120. ".crl" => "application/pkix-crl",
  121. ".crt" => "application/x-x509-ca-cert",
  122. ".csh" => "application/x-csh",
  123. ".csml" => "chemical/x-csml",
  124. ".csp" => "application/vnd.commonspace",
  125. ".css" => "text/css",
  126. ".csv" => "text/csv",
  127. ".curl" => "application/vnd.curl",
  128. ".cww" => "application/prs.cww",
  129. ".cxx" => "text/x-c",
  130. ".daf" => "application/vnd.mobius.daf",
  131. ".davmount" => "application/davmount+xml",
  132. ".dcr" => "application/x-director",
  133. ".dd2" => "application/vnd.oma.dd2+xml",
  134. ".ddd" => "application/vnd.fujixerox.ddd",
  135. ".deb" => "application/x-debian-package",
  136. ".der" => "application/x-x509-ca-cert",
  137. ".dfac" => "application/vnd.dreamfactory",
  138. ".diff" => "text/x-diff",
  139. ".dis" => "application/vnd.mobius.dis",
  140. ".djv" => "image/vnd.djvu",
  141. ".djvu" => "image/vnd.djvu",
  142. ".dll" => "application/x-msdownload",
  143. ".dmg" => "application/octet-stream",
  144. ".dna" => "application/vnd.dna",
  145. ".doc" => "application/msword",
  146. ".docm" => "application/vnd.ms-word.document.macroEnabled.12",
  147. ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  148. ".dot" => "application/msword",
  149. ".dotm" => "application/vnd.ms-word.template.macroEnabled.12",
  150. ".dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
  151. ".dp" => "application/vnd.osgi.dp",
  152. ".dpg" => "application/vnd.dpgraph",
  153. ".dsc" => "text/prs.lines.tag",
  154. ".dtd" => "application/xml-dtd",
  155. ".dts" => "audio/vnd.dts",
  156. ".dtshd" => "audio/vnd.dts.hd",
  157. ".dv" => "video/x-dv",
  158. ".dvi" => "application/x-dvi",
  159. ".dwf" => "model/vnd.dwf",
  160. ".dwg" => "image/vnd.dwg",
  161. ".dxf" => "image/vnd.dxf",
  162. ".dxp" => "application/vnd.spotfire.dxp",
  163. ".ear" => "application/java-archive",
  164. ".ecelp4800" => "audio/vnd.nuera.ecelp4800",
  165. ".ecelp7470" => "audio/vnd.nuera.ecelp7470",
  166. ".ecelp9600" => "audio/vnd.nuera.ecelp9600",
  167. ".ecma" => "application/ecmascript",
  168. ".edm" => "application/vnd.novadigm.edm",
  169. ".edx" => "application/vnd.novadigm.edx",
  170. ".efif" => "application/vnd.picsel",
  171. ".ei6" => "application/vnd.pg.osasli",
  172. ".eml" => "message/rfc822",
  173. ".eol" => "audio/vnd.digital-winds",
  174. ".eot" => "application/vnd.ms-fontobject",
  175. ".eps" => "application/postscript",
  176. ".es3" => "application/vnd.eszigno3+xml",
  177. ".esf" => "application/vnd.epson.esf",
  178. ".etx" => "text/x-setext",
  179. ".exe" => "application/x-msdownload",
  180. ".ext" => "application/vnd.novadigm.ext",
  181. ".ez" => "application/andrew-inset",
  182. ".ez2" => "application/vnd.ezpix-album",
  183. ".ez3" => "application/vnd.ezpix-package",
  184. ".f" => "text/x-fortran",
  185. ".f77" => "text/x-fortran",
  186. ".f90" => "text/x-fortran",
  187. ".fbs" => "image/vnd.fastbidsheet",
  188. ".fdf" => "application/vnd.fdf",
  189. ".fe_launch" => "application/vnd.denovo.fcselayout-link",
  190. ".fg5" => "application/vnd.fujitsu.oasysgp",
  191. ".fli" => "video/x-fli",
  192. ".flo" => "application/vnd.micrografx.flo",
  193. ".flv" => "video/x-flv",
  194. ".flw" => "application/vnd.kde.kivio",
  195. ".flx" => "text/vnd.fmi.flexstor",
  196. ".fly" => "text/vnd.fly",
  197. ".fm" => "application/vnd.framemaker",
  198. ".fnc" => "application/vnd.frogans.fnc",
  199. ".for" => "text/x-fortran",
  200. ".fpx" => "image/vnd.fpx",
  201. ".fsc" => "application/vnd.fsc.weblaunch",
  202. ".fst" => "image/vnd.fst",
  203. ".ftc" => "application/vnd.fluxtime.clip",
  204. ".fti" => "application/vnd.anser-web-funds-transfer-initiation",
  205. ".fvt" => "video/vnd.fvt",
  206. ".fzs" => "application/vnd.fuzzysheet",
  207. ".g3" => "image/g3fax",
  208. ".gac" => "application/vnd.groove-account",
  209. ".gdl" => "model/vnd.gdl",
  210. ".gem" => "application/octet-stream",
  211. ".gemspec" => "text/x-script.ruby",
  212. ".ghf" => "application/vnd.groove-help",
  213. ".gif" => "image/gif",
  214. ".gim" => "application/vnd.groove-identity-message",
  215. ".gmx" => "application/vnd.gmx",
  216. ".gph" => "application/vnd.flographit",
  217. ".gqf" => "application/vnd.grafeq",
  218. ".gram" => "application/srgs",
  219. ".grv" => "application/vnd.groove-injector",
  220. ".grxml" => "application/srgs+xml",
  221. ".gtar" => "application/x-gtar",
  222. ".gtm" => "application/vnd.groove-tool-message",
  223. ".gtw" => "model/vnd.gtw",
  224. ".gv" => "text/vnd.graphviz",
  225. ".gz" => "application/x-gzip",
  226. ".h" => "text/x-c",
  227. ".h261" => "video/h261",
  228. ".h263" => "video/h263",
  229. ".h264" => "video/h264",
  230. ".hbci" => "application/vnd.hbci",
  231. ".hdf" => "application/x-hdf",
  232. ".hh" => "text/x-c",
  233. ".hlp" => "application/winhlp",
  234. ".hpgl" => "application/vnd.hp-hpgl",
  235. ".hpid" => "application/vnd.hp-hpid",
  236. ".hps" => "application/vnd.hp-hps",
  237. ".hqx" => "application/mac-binhex40",
  238. ".htc" => "text/x-component",
  239. ".htke" => "application/vnd.kenameaapp",
  240. ".htm" => "text/html",
  241. ".html" => "text/html",
  242. ".hvd" => "application/vnd.yamaha.hv-dic",
  243. ".hvp" => "application/vnd.yamaha.hv-voice",
  244. ".hvs" => "application/vnd.yamaha.hv-script",
  245. ".icc" => "application/vnd.iccprofile",
  246. ".ice" => "x-conference/x-cooltalk",
  247. ".ico" => "image/vnd.microsoft.icon",
  248. ".ics" => "text/calendar",
  249. ".ief" => "image/ief",
  250. ".ifb" => "text/calendar",
  251. ".ifm" => "application/vnd.shana.informed.formdata",
  252. ".igl" => "application/vnd.igloader",
  253. ".igs" => "model/iges",
  254. ".igx" => "application/vnd.micrografx.igx",
  255. ".iif" => "application/vnd.shana.informed.interchange",
  256. ".imp" => "application/vnd.accpac.simply.imp",
  257. ".ims" => "application/vnd.ms-ims",
  258. ".ipk" => "application/vnd.shana.informed.package",
  259. ".irm" => "application/vnd.ibm.rights-management",
  260. ".irp" => "application/vnd.irepository.package+xml",
  261. ".iso" => "application/octet-stream",
  262. ".itp" => "application/vnd.shana.informed.formtemplate",
  263. ".ivp" => "application/vnd.immervision-ivp",
  264. ".ivu" => "application/vnd.immervision-ivu",
  265. ".jad" => "text/vnd.sun.j2me.app-descriptor",
  266. ".jam" => "application/vnd.jam",
  267. ".jar" => "application/java-archive",
  268. ".java" => "text/x-java-source",
  269. ".jisp" => "application/vnd.jisp",
  270. ".jlt" => "application/vnd.hp-jlyt",
  271. ".jnlp" => "application/x-java-jnlp-file",
  272. ".joda" => "application/vnd.joost.joda-archive",
  273. ".jp2" => "image/jp2",
  274. ".jpeg" => "image/jpeg",
  275. ".jpg" => "image/jpeg",
  276. ".jpgv" => "video/jpeg",
  277. ".jpm" => "video/jpm",
  278. ".js" => "application/javascript",
  279. ".json" => "application/json",
  280. ".karbon" => "application/vnd.kde.karbon",
  281. ".kfo" => "application/vnd.kde.kformula",
  282. ".kia" => "application/vnd.kidspiration",
  283. ".kml" => "application/vnd.google-earth.kml+xml",
  284. ".kmz" => "application/vnd.google-earth.kmz",
  285. ".kne" => "application/vnd.kinar",
  286. ".kon" => "application/vnd.kde.kontour",
  287. ".kpr" => "application/vnd.kde.kpresenter",
  288. ".ksp" => "application/vnd.kde.kspread",
  289. ".ktz" => "application/vnd.kahootz",
  290. ".kwd" => "application/vnd.kde.kword",
  291. ".latex" => "application/x-latex",
  292. ".lbd" => "application/vnd.llamagraphics.life-balance.desktop",
  293. ".lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml",
  294. ".les" => "application/vnd.hhe.lesson-player",
  295. ".link66" => "application/vnd.route66.link66+xml",
  296. ".log" => "text/plain",
  297. ".lostxml" => "application/lost+xml",
  298. ".lrm" => "application/vnd.ms-lrm",
  299. ".ltf" => "application/vnd.frogans.ltf",
  300. ".lvp" => "audio/vnd.lucent.voice",
  301. ".lwp" => "application/vnd.lotus-wordpro",
  302. ".m3u" => "audio/x-mpegurl",
  303. ".m4a" => "audio/mp4a-latm",
  304. ".m4v" => "video/mp4",
  305. ".ma" => "application/mathematica",
  306. ".mag" => "application/vnd.ecowin.chart",
  307. ".man" => "text/troff",
  308. ".manifest" => "text/cache-manifest",
  309. ".mathml" => "application/mathml+xml",
  310. ".mbk" => "application/vnd.mobius.mbk",
  311. ".mbox" => "application/mbox",
  312. ".mc1" => "application/vnd.medcalcdata",
  313. ".mcd" => "application/vnd.mcd",
  314. ".mdb" => "application/x-msaccess",
  315. ".mdi" => "image/vnd.ms-modi",
  316. ".mdoc" => "text/troff",
  317. ".me" => "text/troff",
  318. ".mfm" => "application/vnd.mfmp",
  319. ".mgz" => "application/vnd.proteus.magazine",
  320. ".mid" => "audio/midi",
  321. ".midi" => "audio/midi",
  322. ".mif" => "application/vnd.mif",
  323. ".mime" => "message/rfc822",
  324. ".mj2" => "video/mj2",
  325. ".mlp" => "application/vnd.dolby.mlp",
  326. ".mmd" => "application/vnd.chipnuts.karaoke-mmd",
  327. ".mmf" => "application/vnd.smaf",
  328. ".mml" => "application/mathml+xml",
  329. ".mmr" => "image/vnd.fujixerox.edmics-mmr",
  330. ".mng" => "video/x-mng",
  331. ".mny" => "application/x-msmoney",
  332. ".mov" => "video/quicktime",
  333. ".movie" => "video/x-sgi-movie",
  334. ".mp3" => "audio/mpeg",
  335. ".mp4" => "video/mp4",
  336. ".mp4a" => "audio/mp4",
  337. ".mp4s" => "application/mp4",
  338. ".mp4v" => "video/mp4",
  339. ".mpc" => "application/vnd.mophun.certificate",
  340. ".mpeg" => "video/mpeg",
  341. ".mpg" => "video/mpeg",
  342. ".mpga" => "audio/mpeg",
  343. ".mpkg" => "application/vnd.apple.installer+xml",
  344. ".mpm" => "application/vnd.blueice.multipass",
  345. ".mpn" => "application/vnd.mophun.application",
  346. ".mpp" => "application/vnd.ms-project",
  347. ".mpy" => "application/vnd.ibm.minipay",
  348. ".mqy" => "application/vnd.mobius.mqy",
  349. ".mrc" => "application/marc",
  350. ".ms" => "text/troff",
  351. ".mscml" => "application/mediaservercontrol+xml",
  352. ".mseq" => "application/vnd.mseq",
  353. ".msf" => "application/vnd.epson.msf",
  354. ".msh" => "model/mesh",
  355. ".msi" => "application/x-msdownload",
  356. ".msl" => "application/vnd.mobius.msl",
  357. ".msty" => "application/vnd.muvee.style",
  358. ".mts" => "model/vnd.mts",
  359. ".mus" => "application/vnd.musician",
  360. ".mvb" => "application/x-msmediaview",
  361. ".mwf" => "application/vnd.mfer",
  362. ".mxf" => "application/mxf",
  363. ".mxl" => "application/vnd.recordare.musicxml",
  364. ".mxml" => "application/xv+xml",
  365. ".mxs" => "application/vnd.triscape.mxs",
  366. ".mxu" => "video/vnd.mpegurl",
  367. ".n" => "application/vnd.nokia.n-gage.symbian.install",
  368. ".nc" => "application/x-netcdf",
  369. ".ngdat" => "application/vnd.nokia.n-gage.data",
  370. ".nlu" => "application/vnd.neurolanguage.nlu",
  371. ".nml" => "application/vnd.enliven",
  372. ".nnd" => "application/vnd.noblenet-directory",
  373. ".nns" => "application/vnd.noblenet-sealer",
  374. ".nnw" => "application/vnd.noblenet-web",
  375. ".npx" => "image/vnd.net-fpx",
  376. ".nsf" => "application/vnd.lotus-notes",
  377. ".oa2" => "application/vnd.fujitsu.oasys2",
  378. ".oa3" => "application/vnd.fujitsu.oasys3",
  379. ".oas" => "application/vnd.fujitsu.oasys",
  380. ".obd" => "application/x-msbinder",
  381. ".oda" => "application/oda",
  382. ".odc" => "application/vnd.oasis.opendocument.chart",
  383. ".odf" => "application/vnd.oasis.opendocument.formula",
  384. ".odg" => "application/vnd.oasis.opendocument.graphics",
  385. ".odi" => "application/vnd.oasis.opendocument.image",
  386. ".odp" => "application/vnd.oasis.opendocument.presentation",
  387. ".ods" => "application/vnd.oasis.opendocument.spreadsheet",
  388. ".odt" => "application/vnd.oasis.opendocument.text",
  389. ".oga" => "audio/ogg",
  390. ".ogg" => "application/ogg",
  391. ".ogv" => "video/ogg",
  392. ".ogx" => "application/ogg",
  393. ".org" => "application/vnd.lotus-organizer",
  394. ".otc" => "application/vnd.oasis.opendocument.chart-template",
  395. ".otf" => "application/vnd.oasis.opendocument.formula-template",
  396. ".otg" => "application/vnd.oasis.opendocument.graphics-template",
  397. ".oth" => "application/vnd.oasis.opendocument.text-web",
  398. ".oti" => "application/vnd.oasis.opendocument.image-template",
  399. ".otm" => "application/vnd.oasis.opendocument.text-master",
  400. ".ots" => "application/vnd.oasis.opendocument.spreadsheet-template",
  401. ".ott" => "application/vnd.oasis.opendocument.text-template",
  402. ".oxt" => "application/vnd.openofficeorg.extension",
  403. ".p" => "text/x-pascal",
  404. ".p10" => "application/pkcs10",
  405. ".p12" => "application/x-pkcs12",
  406. ".p7b" => "application/x-pkcs7-certificates",
  407. ".p7m" => "application/pkcs7-mime",
  408. ".p7r" => "application/x-pkcs7-certreqresp",
  409. ".p7s" => "application/pkcs7-signature",
  410. ".pas" => "text/x-pascal",
  411. ".pbd" => "application/vnd.powerbuilder6",
  412. ".pbm" => "image/x-portable-bitmap",
  413. ".pcl" => "application/vnd.hp-pcl",
  414. ".pclxl" => "application/vnd.hp-pclxl",
  415. ".pcx" => "image/x-pcx",
  416. ".pdb" => "chemical/x-pdb",
  417. ".pdf" => "application/pdf",
  418. ".pem" => "application/x-x509-ca-cert",
  419. ".pfr" => "application/font-tdpfr",
  420. ".pgm" => "image/x-portable-graymap",
  421. ".pgn" => "application/x-chess-pgn",
  422. ".pgp" => "application/pgp-encrypted",
  423. ".pic" => "image/x-pict",
  424. ".pict" => "image/pict",
  425. ".pkg" => "application/octet-stream",
  426. ".pki" => "application/pkixcmp",
  427. ".pkipath" => "application/pkix-pkipath",
  428. ".pl" => "text/x-script.perl",
  429. ".plb" => "application/vnd.3gpp.pic-bw-large",
  430. ".plc" => "application/vnd.mobius.plc",
  431. ".plf" => "application/vnd.pocketlearn",
  432. ".pls" => "application/pls+xml",
  433. ".pm" => "text/x-script.perl-module",
  434. ".pml" => "application/vnd.ctc-posml",
  435. ".png" => "image/png",
  436. ".pnm" => "image/x-portable-anymap",
  437. ".pntg" => "image/x-macpaint",
  438. ".portpkg" => "application/vnd.macports.portpkg",
  439. ".pot" => "application/vnd.ms-powerpoint",
  440. ".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12",
  441. ".potx" => "application/vnd.openxmlformats-officedocument.presentationml.template",
  442. ".ppa" => "application/vnd.ms-powerpoint",
  443. ".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12",
  444. ".ppd" => "application/vnd.cups-ppd",
  445. ".ppm" => "image/x-portable-pixmap",
  446. ".pps" => "application/vnd.ms-powerpoint",
  447. ".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
  448. ".ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
  449. ".ppt" => "application/vnd.ms-powerpoint",
  450. ".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
  451. ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  452. ".prc" => "application/vnd.palm",
  453. ".pre" => "application/vnd.lotus-freelance",
  454. ".prf" => "application/pics-rules",
  455. ".ps" => "application/postscript",
  456. ".psb" => "application/vnd.3gpp.pic-bw-small",
  457. ".psd" => "image/vnd.adobe.photoshop",
  458. ".ptid" => "application/vnd.pvi.ptid1",
  459. ".pub" => "application/x-mspublisher",
  460. ".pvb" => "application/vnd.3gpp.pic-bw-var",
  461. ".pwn" => "application/vnd.3m.post-it-notes",
  462. ".py" => "text/x-script.python",
  463. ".pya" => "audio/vnd.ms-playready.media.pya",
  464. ".pyv" => "video/vnd.ms-playready.media.pyv",
  465. ".qam" => "application/vnd.epson.quickanime",
  466. ".qbo" => "application/vnd.intu.qbo",
  467. ".qfx" => "application/vnd.intu.qfx",
  468. ".qps" => "application/vnd.publishare-delta-tree",
  469. ".qt" => "video/quicktime",
  470. ".qtif" => "image/x-quicktime",
  471. ".qxd" => "application/vnd.quark.quarkxpress",
  472. ".ra" => "audio/x-pn-realaudio",
  473. ".rake" => "text/x-script.ruby",
  474. ".ram" => "audio/x-pn-realaudio",
  475. ".rar" => "application/x-rar-compressed",
  476. ".ras" => "image/x-cmu-raster",
  477. ".rb" => "text/x-script.ruby",
  478. ".rcprofile" => "application/vnd.ipunplugged.rcprofile",
  479. ".rdf" => "application/rdf+xml",
  480. ".rdz" => "application/vnd.data-vision.rdz",
  481. ".rep" => "application/vnd.businessobjects",
  482. ".rgb" => "image/x-rgb",
  483. ".rif" => "application/reginfo+xml",
  484. ".rl" => "application/resource-lists+xml",
  485. ".rlc" => "image/vnd.fujixerox.edmics-rlc",
  486. ".rld" => "application/resource-lists-diff+xml",
  487. ".rm" => "application/vnd.rn-realmedia",
  488. ".rmp" => "audio/x-pn-realaudio-plugin",
  489. ".rms" => "application/vnd.jcp.javame.midlet-rms",
  490. ".rnc" => "application/relax-ng-compact-syntax",
  491. ".roff" => "text/troff",
  492. ".rpm" => "application/x-redhat-package-manager",
  493. ".rpss" => "application/vnd.nokia.radio-presets",
  494. ".rpst" => "application/vnd.nokia.radio-preset",
  495. ".rq" => "application/sparql-query",
  496. ".rs" => "application/rls-services+xml",
  497. ".rsd" => "application/rsd+xml",
  498. ".rss" => "application/rss+xml",
  499. ".rtf" => "application/rtf",
  500. ".rtx" => "text/richtext",
  501. ".ru" => "text/x-script.ruby",
  502. ".s" => "text/x-asm",
  503. ".saf" => "application/vnd.yamaha.smaf-audio",
  504. ".sbml" => "application/sbml+xml",
  505. ".sc" => "application/vnd.ibm.secure-container",
  506. ".scd" => "application/x-msschedule",
  507. ".scm" => "application/vnd.lotus-screencam",
  508. ".scq" => "application/scvp-cv-request",
  509. ".scs" => "application/scvp-cv-response",
  510. ".sdkm" => "application/vnd.solent.sdkm+xml",
  511. ".sdp" => "application/sdp",
  512. ".see" => "application/vnd.seemail",
  513. ".sema" => "application/vnd.sema",
  514. ".semd" => "application/vnd.semd",
  515. ".semf" => "application/vnd.semf",
  516. ".setpay" => "application/set-payment-initiation",
  517. ".setreg" => "application/set-registration-initiation",
  518. ".sfd" => "application/vnd.hydrostatix.sof-data",
  519. ".sfs" => "application/vnd.spotfire.sfs",
  520. ".sgm" => "text/sgml",
  521. ".sgml" => "text/sgml",
  522. ".sh" => "application/x-sh",
  523. ".shar" => "application/x-shar",
  524. ".shf" => "application/shf+xml",
  525. ".sig" => "application/pgp-signature",
  526. ".sit" => "application/x-stuffit",
  527. ".sitx" => "application/x-stuffitx",
  528. ".skp" => "application/vnd.koan",
  529. ".slt" => "application/vnd.epson.salt",
  530. ".smi" => "application/smil+xml",
  531. ".snd" => "audio/basic",
  532. ".so" => "application/octet-stream",
  533. ".spf" => "application/vnd.yamaha.smaf-phrase",
  534. ".spl" => "application/x-futuresplash",
  535. ".spot" => "text/vnd.in3d.spot",
  536. ".spp" => "application/scvp-vp-response",
  537. ".spq" => "application/scvp-vp-request",
  538. ".src" => "application/x-wais-source",
  539. ".srx" => "application/sparql-results+xml",
  540. ".sse" => "application/vnd.kodak-descriptor",
  541. ".ssf" => "application/vnd.epson.ssf",
  542. ".ssml" => "application/ssml+xml",
  543. ".stf" => "application/vnd.wt.stf",
  544. ".stk" => "application/hyperstudio",
  545. ".str" => "application/vnd.pg.format",
  546. ".sus" => "application/vnd.sus-calendar",
  547. ".sv4cpio" => "application/x-sv4cpio",
  548. ".sv4crc" => "application/x-sv4crc",
  549. ".svd" => "application/vnd.svd",
  550. ".svg" => "image/svg+xml",
  551. ".svgz" => "image/svg+xml",
  552. ".swf" => "application/x-shockwave-flash",
  553. ".swi" => "application/vnd.arastra.swi",
  554. ".t" => "text/troff",
  555. ".tao" => "application/vnd.tao.intent-module-archive",
  556. ".tar" => "application/x-tar",
  557. ".tbz" => "application/x-bzip-compressed-tar",
  558. ".tcap" => "application/vnd.3gpp2.tcap",
  559. ".tcl" => "application/x-tcl",
  560. ".tex" => "application/x-tex",
  561. ".texi" => "application/x-texinfo",
  562. ".texinfo" => "application/x-texinfo",
  563. ".text" => "text/plain",
  564. ".tif" => "image/tiff",
  565. ".tiff" => "image/tiff",
  566. ".tmo" => "application/vnd.tmobile-livetv",
  567. ".torrent" => "application/x-bittorrent",
  568. ".tpl" => "application/vnd.groove-tool-template",
  569. ".tpt" => "application/vnd.trid.tpt",
  570. ".tr" => "text/troff",
  571. ".tra" => "application/vnd.trueapp",
  572. ".trm" => "application/x-msterminal",
  573. ".tsv" => "text/tab-separated-values",
  574. ".ttf" => "application/octet-stream",
  575. ".twd" => "application/vnd.simtech-mindmapper",
  576. ".txd" => "application/vnd.genomatix.tuxedo",
  577. ".txf" => "application/vnd.mobius.txf",
  578. ".txt" => "text/plain",
  579. ".ufd" => "application/vnd.ufdl",
  580. ".umj" => "application/vnd.umajin",
  581. ".unityweb" => "application/vnd.unity",
  582. ".uoml" => "application/vnd.uoml+xml",
  583. ".uri" => "text/uri-list",
  584. ".ustar" => "application/x-ustar",
  585. ".utz" => "application/vnd.uiq.theme",
  586. ".uu" => "text/x-uuencode",
  587. ".vcd" => "application/x-cdlink",
  588. ".vcf" => "text/x-vcard",
  589. ".vcg" => "application/vnd.groove-vcard",
  590. ".vcs" => "text/x-vcalendar",
  591. ".vcx" => "application/vnd.vcx",
  592. ".vis" => "application/vnd.visionary",
  593. ".viv" => "video/vnd.vivo",
  594. ".vrml" => "model/vrml",
  595. ".vsd" => "application/vnd.visio",
  596. ".vsf" => "application/vnd.vsf",
  597. ".vtu" => "model/vnd.vtu",
  598. ".vxml" => "application/voicexml+xml",
  599. ".war" => "application/java-archive",
  600. ".wav" => "audio/x-wav",
  601. ".wax" => "audio/x-ms-wax",
  602. ".wbmp" => "image/vnd.wap.wbmp",
  603. ".wbs" => "application/vnd.criticaltools.wbs+xml",
  604. ".wbxml" => "application/vnd.wap.wbxml",
  605. ".webm" => "video/webm",
  606. ".wm" => "video/x-ms-wm",
  607. ".wma" => "audio/x-ms-wma",
  608. ".wmd" => "application/x-ms-wmd",
  609. ".wmf" => "application/x-msmetafile",
  610. ".wml" => "text/vnd.wap.wml",
  611. ".wmlc" => "application/vnd.wap.wmlc",
  612. ".wmls" => "text/vnd.wap.wmlscript",
  613. ".wmlsc" => "application/vnd.wap.wmlscriptc",
  614. ".wmv" => "video/x-ms-wmv",
  615. ".wmx" => "video/x-ms-wmx",
  616. ".wmz" => "application/x-ms-wmz",
  617. ".woff" => "application/font-woff",
  618. ".woff2" => "application/font-woff2",
  619. ".wpd" => "application/vnd.wordperfect",
  620. ".wpl" => "application/vnd.ms-wpl",
  621. ".wps" => "application/vnd.ms-works",
  622. ".wqd" => "application/vnd.wqd",
  623. ".wri" => "application/x-mswrite",
  624. ".wrl" => "model/vrml",
  625. ".wsdl" => "application/wsdl+xml",
  626. ".wspolicy" => "application/wspolicy+xml",
  627. ".wtb" => "application/vnd.webturbo",
  628. ".wvx" => "video/x-ms-wvx",
  629. ".x3d" => "application/vnd.hzn-3d-crossword",
  630. ".xar" => "application/vnd.xara",
  631. ".xbd" => "application/vnd.fujixerox.docuworks.binder",
  632. ".xbm" => "image/x-xbitmap",
  633. ".xdm" => "application/vnd.syncml.dm+xml",
  634. ".xdp" => "application/vnd.adobe.xdp+xml",
  635. ".xdw" => "application/vnd.fujixerox.docuworks",
  636. ".xenc" => "application/xenc+xml",
  637. ".xer" => "application/patch-ops-error+xml",
  638. ".xfdf" => "application/vnd.adobe.xfdf",
  639. ".xfdl" => "application/vnd.xfdl",
  640. ".xhtml" => "application/xhtml+xml",
  641. ".xif" => "image/vnd.xiff",
  642. ".xla" => "application/vnd.ms-excel",
  643. ".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12",
  644. ".xls" => "application/vnd.ms-excel",
  645. ".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
  646. ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  647. ".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12",
  648. ".xlt" => "application/vnd.ms-excel",
  649. ".xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
  650. ".xml" => "application/xml",
  651. ".xo" => "application/vnd.olpc-sugar",
  652. ".xop" => "application/xop+xml",
  653. ".xpm" => "image/x-xpixmap",
  654. ".xpr" => "application/vnd.is-xpr",
  655. ".xps" => "application/vnd.ms-xpsdocument",
  656. ".xpw" => "application/vnd.intercon.formnet",
  657. ".xsl" => "application/xml",
  658. ".xslt" => "application/xslt+xml",
  659. ".xsm" => "application/vnd.syncml+xml",
  660. ".xspf" => "application/xspf+xml",
  661. ".xul" => "application/vnd.mozilla.xul+xml",
  662. ".xwd" => "image/x-xwindowdump",
  663. ".xyz" => "chemical/x-xyz",
  664. ".yaml" => "text/yaml",
  665. ".yml" => "text/yaml",
  666. ".zaz" => "application/vnd.zzazz.deck+xml",
  667. ".zip" => "application/zip",
  668. ".zmm" => "application/vnd.handheld-entertainment+xml",
  669. }
  670. end
  671. end

target/rubygems/gems/rack-2.0.7/lib/rack/multipart.rb

95.56% lines covered

45 relevant lines. 43 lines covered and 2 lines missed.
    
  1. 1 require 'rack/multipart/parser'
  2. 1 module Rack
  3. # A multipart form data parser, adapted from IOWA.
  4. #
  5. # Usually, Rack::Request#POST takes care of calling this.
  6. 1 module Multipart
  7. 1 autoload :UploadedFile, 'rack/multipart/uploaded_file'
  8. 1 autoload :Generator, 'rack/multipart/generator'
  9. 1 EOL = "\r\n"
  10. 1 MULTIPART_BOUNDARY = "AaB03x"
  11. 1 MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
  12. 1 TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
  13. 1 CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
  14. 1 VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
  15. 1 BROKEN_QUOTED = /^#{CONDISP}.*;\sfilename="(.*?)"(?:\s*$|\s*;\s*#{TOKEN}=)/i
  16. 1 BROKEN_UNQUOTED = /^#{CONDISP}.*;\sfilename=(#{TOKEN})/i
  17. 1 MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
  18. 1 MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:.*\s+name=(#{VALUE})/ni
  19. 1 MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
  20. # Updated definitions from RFC 2231
  21. 1 ATTRIBUTE_CHAR = %r{[^ \t\v\n\r)(><@,;:\\"/\[\]?='*%]}
  22. 1 ATTRIBUTE = /#{ATTRIBUTE_CHAR}+/
  23. 1 SECTION = /\*[0-9]+/
  24. 1 REGULAR_PARAMETER_NAME = /#{ATTRIBUTE}#{SECTION}?/
  25. 1 REGULAR_PARAMETER = /(#{REGULAR_PARAMETER_NAME})=(#{VALUE})/
  26. 1 EXTENDED_OTHER_NAME = /#{ATTRIBUTE}\*[1-9][0-9]*\*/
  27. 1 EXTENDED_OTHER_VALUE = /%[0-9a-fA-F]{2}|#{ATTRIBUTE_CHAR}/
  28. 1 EXTENDED_OTHER_PARAMETER = /(#{EXTENDED_OTHER_NAME})=(#{EXTENDED_OTHER_VALUE}*)/
  29. 1 EXTENDED_INITIAL_NAME = /#{ATTRIBUTE}(?:\*0)?\*/
  30. 1 EXTENDED_INITIAL_VALUE = /[a-zA-Z0-9\-]*'[a-zA-Z0-9\-]*'#{EXTENDED_OTHER_VALUE}*/
  31. 1 EXTENDED_INITIAL_PARAMETER = /(#{EXTENDED_INITIAL_NAME})=(#{EXTENDED_INITIAL_VALUE})/
  32. 1 EXTENDED_PARAMETER = /#{EXTENDED_INITIAL_PARAMETER}|#{EXTENDED_OTHER_PARAMETER}/
  33. 1 DISPPARM = /;\s*(?:#{REGULAR_PARAMETER}|#{EXTENDED_PARAMETER})\s*/
  34. 1 RFC2183 = /^#{CONDISP}(#{DISPPARM})+$/i
  35. 1 class << self
  36. 1 def parse_multipart(env, params = Rack::Utils.default_query_parser)
  37. extract_multipart Rack::Request.new(env), params
  38. end
  39. 1 def extract_multipart(req, params = Rack::Utils.default_query_parser)
  40. 2 io = req.get_header(RACK_INPUT)
  41. 2 io.rewind
  42. 2 content_length = req.content_length
  43. 2 content_length = content_length.to_i if content_length
  44. 2 tempfile = req.get_header(RACK_MULTIPART_TEMPFILE_FACTORY) || Parser::TEMPFILE_FACTORY
  45. 2 bufsize = req.get_header(RACK_MULTIPART_BUFFER_SIZE) || Parser::BUFSIZE
  46. 2 info = Parser.parse io, content_length, req.get_header('CONTENT_TYPE'), tempfile, bufsize, params
  47. 2 req.set_header(RACK_TEMPFILES, info.tmp_files)
  48. 2 info.params
  49. end
  50. 1 def build_multipart(params, first = true)
  51. Generator.new(params, first).dump
  52. end
  53. end
  54. end
  55. end

target/rubygems/gems/rack-2.0.7/lib/rack/multipart/parser.rb

27.32% lines covered

205 relevant lines. 56 lines covered and 149 lines missed.
    
  1. 1 require 'rack/utils'
  2. 1 module Rack
  3. 1 module Multipart
  4. 1 class MultipartPartLimitError < Errno::EMFILE; end
  5. 1 class Parser
  6. 1 BUFSIZE = 16384
  7. 1 TEXT_PLAIN = "text/plain"
  8. 1 TEMPFILE_FACTORY = lambda { |filename, content_type|
  9. Tempfile.new(["RackMultipart", ::File.extname(filename.gsub("\0".freeze, '%00'.freeze))])
  10. }
  11. 1 class BoundedIO # :nodoc:
  12. 1 def initialize(io, content_length)
  13. @io = io
  14. @content_length = content_length
  15. @cursor = 0
  16. end
  17. 1 def read(size)
  18. return if @cursor >= @content_length
  19. left = @content_length - @cursor
  20. str = if left < size
  21. @io.read left
  22. else
  23. @io.read size
  24. end
  25. if str
  26. @cursor += str.bytesize
  27. else
  28. # Raise an error for mismatching Content-Length and actual contents
  29. raise EOFError, "bad content body"
  30. end
  31. str
  32. end
  33. 1 def rewind
  34. @io.rewind
  35. end
  36. end
  37. 1 MultipartInfo = Struct.new :params, :tmp_files
  38. 1 EMPTY = MultipartInfo.new(nil, [])
  39. 1 def self.parse_boundary(content_type)
  40. 2 return unless content_type
  41. 2 data = content_type.match(MULTIPART)
  42. 2 return unless data
  43. data[1]
  44. end
  45. 1 def self.parse(io, content_length, content_type, tmpfile, bufsize, qp)
  46. 2 return EMPTY if 0 == content_length
  47. 2 boundary = parse_boundary content_type
  48. 2 return EMPTY unless boundary
  49. io = BoundedIO.new(io, content_length) if content_length
  50. parser = new(boundary, tmpfile, bufsize, qp)
  51. parser.on_read io.read(bufsize)
  52. loop do
  53. break if parser.state == :DONE
  54. parser.on_read io.read(bufsize)
  55. end
  56. io.rewind
  57. parser.result
  58. end
  59. 1 class Collector
  60. 1 class MimePart < Struct.new(:body, :head, :filename, :content_type, :name)
  61. 1 def get_data
  62. data = body
  63. if filename == ""
  64. # filename is blank which means no file has been selected
  65. return
  66. elsif filename
  67. body.rewind if body.respond_to?(:rewind)
  68. # Take the basename of the upload's original filename.
  69. # This handles the full Windows paths given by Internet Explorer
  70. # (and perhaps other broken user agents) without affecting
  71. # those which give the lone filename.
  72. fn = filename.split(/[\/\\]/).last
  73. data = {:filename => fn, :type => content_type,
  74. :name => name, :tempfile => body, :head => head}
  75. elsif !filename && content_type && body.is_a?(IO)
  76. body.rewind
  77. # Generic multipart cases, not coming from a form
  78. data = {:type => content_type,
  79. :name => name, :tempfile => body, :head => head}
  80. end
  81. yield data
  82. end
  83. end
  84. 1 class BufferPart < MimePart
  85. 1 def file?; false; end
  86. 1 def close; end
  87. end
  88. 1 class TempfilePart < MimePart
  89. 1 def file?; true; end
  90. 1 def close; body.close; end
  91. end
  92. 1 include Enumerable
  93. 1 def initialize tempfile
  94. @tempfile = tempfile
  95. @mime_parts = []
  96. @open_files = 0
  97. end
  98. 1 def each
  99. @mime_parts.each { |part| yield part }
  100. end
  101. 1 def on_mime_head mime_index, head, filename, content_type, name
  102. if filename
  103. body = @tempfile.call(filename, content_type)
  104. body.binmode if body.respond_to?(:binmode)
  105. klass = TempfilePart
  106. @open_files += 1
  107. else
  108. body = String.new
  109. klass = BufferPart
  110. end
  111. @mime_parts[mime_index] = klass.new(body, head, filename, content_type, name)
  112. check_open_files
  113. end
  114. 1 def on_mime_body mime_index, content
  115. @mime_parts[mime_index].body << content
  116. end
  117. 1 def on_mime_finish mime_index
  118. end
  119. 1 private
  120. 1 def check_open_files
  121. if Utils.multipart_part_limit > 0
  122. if @open_files >= Utils.multipart_part_limit
  123. @mime_parts.each(&:close)
  124. raise MultipartPartLimitError, 'Maximum file multiparts in content reached'
  125. end
  126. end
  127. end
  128. end
  129. 1 attr_reader :state
  130. 1 def initialize(boundary, tempfile, bufsize, query_parser)
  131. @buf = String.new
  132. @query_parser = query_parser
  133. @params = query_parser.make_params
  134. @boundary = "--#{boundary}"
  135. @bufsize = bufsize
  136. @rx = /(?:#{EOL})?#{Regexp.quote(@boundary)}(#{EOL}|--)/n
  137. @rx_max_size = EOL.size + @boundary.bytesize + [EOL.size, '--'.size].max
  138. @full_boundary = @boundary
  139. @end_boundary = @boundary + '--'
  140. @state = :FAST_FORWARD
  141. @mime_index = 0
  142. @collector = Collector.new tempfile
  143. end
  144. 1 def on_read content
  145. handle_empty_content!(content)
  146. @buf << content
  147. run_parser
  148. end
  149. 1 def result
  150. @collector.each do |part|
  151. part.get_data do |data|
  152. tag_multipart_encoding(part.filename, part.content_type, part.name, data)
  153. @query_parser.normalize_params(@params, part.name, data, @query_parser.param_depth_limit)
  154. end
  155. end
  156. MultipartInfo.new @params.to_params_hash, @collector.find_all(&:file?).map(&:body)
  157. end
  158. 1 private
  159. 1 def run_parser
  160. loop do
  161. case @state
  162. when :FAST_FORWARD
  163. break if handle_fast_forward == :want_read
  164. when :CONSUME_TOKEN
  165. break if handle_consume_token == :want_read
  166. when :MIME_HEAD
  167. break if handle_mime_head == :want_read
  168. when :MIME_BODY
  169. break if handle_mime_body == :want_read
  170. when :DONE
  171. break
  172. end
  173. end
  174. end
  175. 1 def handle_fast_forward
  176. if consume_boundary
  177. @state = :MIME_HEAD
  178. else
  179. raise EOFError, "bad content body" if @buf.bytesize >= @bufsize
  180. :want_read
  181. end
  182. end
  183. 1 def handle_consume_token
  184. tok = consume_boundary
  185. # break if we're at the end of a buffer, but not if it is the end of a field
  186. if tok == :END_BOUNDARY || (@buf.empty? && tok != :BOUNDARY)
  187. @state = :DONE
  188. else
  189. @state = :MIME_HEAD
  190. end
  191. end
  192. 1 def handle_mime_head
  193. if @buf.index(EOL + EOL)
  194. i = @buf.index(EOL+EOL)
  195. head = @buf.slice!(0, i+2) # First \r\n
  196. @buf.slice!(0, 2) # Second \r\n
  197. content_type = head[MULTIPART_CONTENT_TYPE, 1]
  198. if name = head[MULTIPART_CONTENT_DISPOSITION, 1]
  199. name = Rack::Auth::Digest::Params::dequote(name)
  200. else
  201. name = head[MULTIPART_CONTENT_ID, 1]
  202. end
  203. filename = get_filename(head)
  204. if name.nil? || name.empty?
  205. name = filename || "#{content_type || TEXT_PLAIN}[]"
  206. end
  207. @collector.on_mime_head @mime_index, head, filename, content_type, name
  208. @state = :MIME_BODY
  209. else
  210. :want_read
  211. end
  212. end
  213. 1 def handle_mime_body
  214. if i = @buf.index(rx)
  215. # Save the rest.
  216. @collector.on_mime_body @mime_index, @buf.slice!(0, i)
  217. @buf.slice!(0, 2) # Remove \r\n after the content
  218. @state = :CONSUME_TOKEN
  219. @mime_index += 1
  220. else
  221. # Save the read body part.
  222. if @rx_max_size < @buf.size
  223. @collector.on_mime_body @mime_index, @buf.slice!(0, @buf.size - @rx_max_size)
  224. end
  225. :want_read
  226. end
  227. end
  228. 1 def full_boundary; @full_boundary; end
  229. 1 def rx; @rx; end
  230. 1 def consume_boundary
  231. while @buf.gsub!(/\A([^\n]*(?:\n|\Z))/, '')
  232. read_buffer = $1
  233. case read_buffer.strip
  234. when full_boundary then return :BOUNDARY
  235. when @end_boundary then return :END_BOUNDARY
  236. end
  237. return if @buf.empty?
  238. end
  239. end
  240. 1 def get_filename(head)
  241. filename = nil
  242. case head
  243. when RFC2183
  244. params = Hash[*head.scan(DISPPARM).flat_map(&:compact)]
  245. if filename = params['filename']
  246. filename = $1 if filename =~ /^"(.*)"$/
  247. elsif filename = params['filename*']
  248. encoding, _, filename = filename.split("'", 3)
  249. end
  250. when BROKEN_QUOTED, BROKEN_UNQUOTED
  251. filename = $1
  252. end
  253. return unless filename
  254. if filename.scan(/%.?.?/).all? { |s| s =~ /%[0-9a-fA-F]{2}/ }
  255. filename = Utils.unescape(filename)
  256. end
  257. filename.scrub!
  258. if filename !~ /\\[^\\"]/
  259. filename = filename.gsub(/\\(.)/, '\1')
  260. end
  261. if encoding
  262. filename.force_encoding ::Encoding.find(encoding)
  263. end
  264. filename
  265. end
  266. 1 CHARSET = "charset"
  267. 1 def tag_multipart_encoding(filename, content_type, name, body)
  268. name = name.to_s
  269. encoding = Encoding::UTF_8
  270. name.force_encoding(encoding)
  271. return if filename
  272. if content_type
  273. list = content_type.split(';')
  274. type_subtype = list.first
  275. type_subtype.strip!
  276. if TEXT_PLAIN == type_subtype
  277. rest = list.drop 1
  278. rest.each do |param|
  279. k,v = param.split('=', 2)
  280. k.strip!
  281. v.strip!
  282. v = v[1..-2] if v[0] == '"' && v[-1] == '"'
  283. encoding = Encoding.find v if k == CHARSET
  284. end
  285. end
  286. end
  287. name.force_encoding(encoding)
  288. body.force_encoding(encoding)
  289. end
  290. 1 def handle_empty_content!(content)
  291. if content.nil? || content.empty?
  292. raise EOFError
  293. end
  294. end
  295. end
  296. end
  297. end

target/rubygems/gems/rack-2.0.7/lib/rack/runtime.rb

100.0% lines covered

16 relevant lines. 16 lines covered and 0 lines missed.
    
  1. 1 require 'rack/utils'
  2. 1 module Rack
  3. # Sets an "X-Runtime" response header, indicating the response
  4. # time of the request, in seconds
  5. #
  6. # You can put it right before the application to see the processing
  7. # time, or before all the other middlewares to include time for them,
  8. # too.
  9. 1 class Runtime
  10. 1 FORMAT_STRING = "%0.6f".freeze # :nodoc:
  11. 1 HEADER_NAME = "X-Runtime".freeze # :nodoc:
  12. 1 def initialize(app, name = nil)
  13. 1 @app = app
  14. 1 @header_name = HEADER_NAME
  15. 1 @header_name += "-#{name}" if name
  16. end
  17. 1 def call(env)
  18. 3 start_time = Utils.clock_time
  19. 3 status, headers, body = @app.call(env)
  20. 3 request_time = Utils.clock_time - start_time
  21. 3 unless headers.has_key?(@header_name)
  22. 3 headers[@header_name] = FORMAT_STRING % request_time
  23. end
  24. 3 [status, headers, body]
  25. end
  26. end
  27. end

target/rubygems/gems/rack-2.0.7/lib/rack/sendfile.rb

40.54% lines covered

37 relevant lines. 15 lines covered and 22 lines missed.
    
  1. 1 require 'rack/file'
  2. 1 require 'rack/body_proxy'
  3. 1 module Rack
  4. # = Sendfile
  5. #
  6. # The Sendfile middleware intercepts responses whose body is being
  7. # served from a file and replaces it with a server specific X-Sendfile
  8. # header. The web server is then responsible for writing the file contents
  9. # to the client. This can dramatically reduce the amount of work required
  10. # by the Ruby backend and takes advantage of the web server's optimized file
  11. # delivery code.
  12. #
  13. # In order to take advantage of this middleware, the response body must
  14. # respond to +to_path+ and the request must include an X-Sendfile-Type
  15. # header. Rack::File and other components implement +to_path+ so there's
  16. # rarely anything you need to do in your application. The X-Sendfile-Type
  17. # header is typically set in your web servers configuration. The following
  18. # sections attempt to document
  19. #
  20. # === Nginx
  21. #
  22. # Nginx supports the X-Accel-Redirect header. This is similar to X-Sendfile
  23. # but requires parts of the filesystem to be mapped into a private URL
  24. # hierarchy.
  25. #
  26. # The following example shows the Nginx configuration required to create
  27. # a private "/files/" area, enable X-Accel-Redirect, and pass the special
  28. # X-Sendfile-Type and X-Accel-Mapping headers to the backend:
  29. #
  30. # location ~ /files/(.*) {
  31. # internal;
  32. # alias /var/www/$1;
  33. # }
  34. #
  35. # location / {
  36. # proxy_redirect off;
  37. #
  38. # proxy_set_header Host $host;
  39. # proxy_set_header X-Real-IP $remote_addr;
  40. # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  41. #
  42. # proxy_set_header X-Sendfile-Type X-Accel-Redirect;
  43. # proxy_set_header X-Accel-Mapping /var/www/=/files/;
  44. #
  45. # proxy_pass http://127.0.0.1:8080/;
  46. # }
  47. #
  48. # Note that the X-Sendfile-Type header must be set exactly as shown above.
  49. # The X-Accel-Mapping header should specify the location on the file system,
  50. # followed by an equals sign (=), followed name of the private URL pattern
  51. # that it maps to. The middleware performs a simple substitution on the
  52. # resulting path.
  53. #
  54. # See Also: http://wiki.codemongers.com/NginxXSendfile
  55. #
  56. # === lighttpd
  57. #
  58. # Lighttpd has supported some variation of the X-Sendfile header for some
  59. # time, although only recent version support X-Sendfile in a reverse proxy
  60. # configuration.
  61. #
  62. # $HTTP["host"] == "example.com" {
  63. # proxy-core.protocol = "http"
  64. # proxy-core.balancer = "round-robin"
  65. # proxy-core.backends = (
  66. # "127.0.0.1:8000",
  67. # "127.0.0.1:8001",
  68. # ...
  69. # )
  70. #
  71. # proxy-core.allow-x-sendfile = "enable"
  72. # proxy-core.rewrite-request = (
  73. # "X-Sendfile-Type" => (".*" => "X-Sendfile")
  74. # )
  75. # }
  76. #
  77. # See Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore
  78. #
  79. # === Apache
  80. #
  81. # X-Sendfile is supported under Apache 2.x using a separate module:
  82. #
  83. # https://tn123.org/mod_xsendfile/
  84. #
  85. # Once the module is compiled and installed, you can enable it using
  86. # XSendFile config directive:
  87. #
  88. # RequestHeader Set X-Sendfile-Type X-Sendfile
  89. # ProxyPassReverse / http://localhost:8001/
  90. # XSendFile on
  91. #
  92. # === Mapping parameter
  93. #
  94. # The third parameter allows for an overriding extension of the
  95. # X-Accel-Mapping header. Mappings should be provided in tuples of internal to
  96. # external. The internal values may contain regular expression syntax, they
  97. # will be matched with case indifference.
  98. 1 class Sendfile
  99. 1 def initialize(app, variation=nil, mappings=[])
  100. 1 @app = app
  101. 1 @variation = variation
  102. 1 @mappings = mappings.map do |internal, external|
  103. [/^#{internal}/i, external]
  104. end
  105. end
  106. 1 def call(env)
  107. 3 status, headers, body = @app.call(env)
  108. 3 if body.respond_to?(:to_path)
  109. case type = variation(env)
  110. when 'X-Accel-Redirect'
  111. path = ::File.expand_path(body.to_path)
  112. if url = map_accel_path(env, path)
  113. headers[CONTENT_LENGTH] = '0'
  114. headers[type] = url
  115. obody = body
  116. body = Rack::BodyProxy.new([]) do
  117. obody.close if obody.respond_to?(:close)
  118. end
  119. else
  120. env[RACK_ERRORS].puts "X-Accel-Mapping header missing"
  121. end
  122. when 'X-Sendfile', 'X-Lighttpd-Send-File'
  123. path = ::File.expand_path(body.to_path)
  124. headers[CONTENT_LENGTH] = '0'
  125. headers[type] = path
  126. obody = body
  127. body = Rack::BodyProxy.new([]) do
  128. obody.close if obody.respond_to?(:close)
  129. end
  130. when '', nil
  131. else
  132. env[RACK_ERRORS].puts "Unknown x-sendfile variation: '#{type}'.\n"
  133. end
  134. end
  135. 3 [status, headers, body]
  136. end
  137. 1 private
  138. 1 def variation(env)
  139. @variation ||
  140. env['sendfile.type'] ||
  141. env['HTTP_X_SENDFILE_TYPE']
  142. end
  143. 1 def map_accel_path(env, path)
  144. if mapping = @mappings.find { |internal,_| internal =~ path }
  145. path.sub(*mapping)
  146. elsif mapping = env['HTTP_X_ACCEL_MAPPING']
  147. internal, external = mapping.split('=', 2).map(&:strip)
  148. path.sub(/^#{internal}/i, external)
  149. end
  150. end
  151. end
  152. end

target/rubygems/gems/rack-2.0.7/lib/rack/session/cookie.rb

42.86% lines covered

84 relevant lines. 36 lines covered and 48 lines missed.
    
  1. 1 require 'openssl'
  2. 1 require 'zlib'
  3. 1 require 'rack/request'
  4. 1 require 'rack/response'
  5. 1 require 'rack/session/abstract/id'
  6. 1 require 'json'
  7. 1 module Rack
  8. 1 module Session
  9. # Rack::Session::Cookie provides simple cookie based session management.
  10. # By default, the session is a Ruby Hash stored as base64 encoded marshalled
  11. # data set to :key (default: rack.session). The object that encodes the
  12. # session data is configurable and must respond to +encode+ and +decode+.
  13. # Both methods must take a string and return a string.
  14. #
  15. # When the secret key is set, cookie data is checked for data integrity.
  16. # The old secret key is also accepted and allows graceful secret rotation.
  17. #
  18. # Example:
  19. #
  20. # use Rack::Session::Cookie, :key => 'rack.session',
  21. # :domain => 'foo.com',
  22. # :path => '/',
  23. # :expire_after => 2592000,
  24. # :secret => 'change_me',
  25. # :old_secret => 'also_change_me'
  26. #
  27. # All parameters are optional.
  28. #
  29. # Example of a cookie with no encoding:
  30. #
  31. # Rack::Session::Cookie.new(application, {
  32. # :coder => Rack::Session::Cookie::Identity.new
  33. # })
  34. #
  35. # Example of a cookie with custom encoding:
  36. #
  37. # Rack::Session::Cookie.new(application, {
  38. # :coder => Class.new {
  39. # def encode(str); str.reverse; end
  40. # def decode(str); str.reverse; end
  41. # }.new
  42. # })
  43. #
  44. 1 class Cookie < Abstract::Persisted
  45. # Encode session cookies as Base64
  46. 1 class Base64
  47. 1 def encode(str)
  48. [str].pack('m')
  49. end
  50. 1 def decode(str)
  51. str.unpack('m').first
  52. end
  53. # Encode session cookies as Marshaled Base64 data
  54. 1 class Marshal < Base64
  55. 1 def encode(str)
  56. super(::Marshal.dump(str))
  57. end
  58. 1 def decode(str)
  59. return unless str
  60. ::Marshal.load(super(str)) rescue nil
  61. end
  62. end
  63. # N.B. Unlike other encoding methods, the contained objects must be a
  64. # valid JSON composite type, either a Hash or an Array.
  65. 1 class JSON < Base64
  66. 1 def encode(obj)
  67. super(::JSON.dump(obj))
  68. end
  69. 1 def decode(str)
  70. return unless str
  71. ::JSON.parse(super(str)) rescue nil
  72. end
  73. end
  74. 1 class ZipJSON < Base64
  75. 1 def encode(obj)
  76. super(Zlib::Deflate.deflate(::JSON.dump(obj)))
  77. end
  78. 1 def decode(str)
  79. return unless str
  80. ::JSON.parse(Zlib::Inflate.inflate(super(str)))
  81. rescue
  82. nil
  83. end
  84. end
  85. end
  86. # Use no encoding for session cookies
  87. 1 class Identity
  88. 1 def encode(str); str; end
  89. 1 def decode(str); str; end
  90. end
  91. 1 attr_reader :coder
  92. 1 def initialize(app, options={})
  93. @secrets = options.values_at(:secret, :old_secret).compact
  94. @hmac = options.fetch(:hmac, OpenSSL::Digest::SHA1)
  95. warn <<-MSG unless secure?(options)
  96. SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
  97. This poses a security threat. It is strongly recommended that you
  98. provide a secret to prevent exploits that may be possible from crafted
  99. cookies. This will not be supported in future versions of Rack, and
  100. future versions will even invalidate your existing user cookies.
  101. Called from: #{caller[0]}.
  102. MSG
  103. @coder = options[:coder] ||= Base64::Marshal.new
  104. super(app, options.merge!(:cookie_only => true))
  105. end
  106. 1 private
  107. 1 def find_session(req, sid)
  108. data = unpacked_cookie_data(req)
  109. data = persistent_session_id!(data)
  110. [data["session_id"], data]
  111. end
  112. 1 def extract_session_id(request)
  113. unpacked_cookie_data(request)["session_id"]
  114. end
  115. 1 def unpacked_cookie_data(request)
  116. request.fetch_header(RACK_SESSION_UNPACKED_COOKIE_DATA) do |k|
  117. session_data = request.cookies[@key]
  118. if @secrets.size > 0 && session_data
  119. digest, session_data = session_data.reverse.split("--", 2)
  120. digest.reverse! if digest
  121. session_data.reverse! if session_data
  122. session_data = nil unless digest_match?(session_data, digest)
  123. end
  124. request.set_header(k, coder.decode(session_data) || {})
  125. end
  126. end
  127. 1 def persistent_session_id!(data, sid=nil)
  128. data ||= {}
  129. data["session_id"] ||= sid || generate_sid
  130. data
  131. end
  132. 1 def write_session(req, session_id, session, options)
  133. session = session.merge("session_id" => session_id)
  134. session_data = coder.encode(session)
  135. if @secrets.first
  136. session_data << "--#{generate_hmac(session_data, @secrets.first)}"
  137. end
  138. if session_data.size > (4096 - @key.size)
  139. req.get_header(RACK_ERRORS).puts("Warning! Rack::Session::Cookie data size exceeds 4K.")
  140. nil
  141. else
  142. session_data
  143. end
  144. end
  145. 1 def delete_session(req, session_id, options)
  146. # Nothing to do here, data is in the client
  147. generate_sid unless options[:drop]
  148. end
  149. 1 def digest_match?(data, digest)
  150. return unless data && digest
  151. @secrets.any? do |secret|
  152. Rack::Utils.secure_compare(digest, generate_hmac(data, secret))
  153. end
  154. end
  155. 1 def generate_hmac(data, secret)
  156. OpenSSL::HMAC.hexdigest(@hmac.new, secret, data)
  157. end
  158. 1 def secure?(options)
  159. @secrets.size >= 1 ||
  160. (options[:coder] && options[:let_coder_handle_secure_encoding])
  161. end
  162. end
  163. end
  164. end

target/rubygems/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb

100.0% lines covered

11 relevant lines. 11 lines covered and 0 lines missed.
    
  1. 1 require 'rack/body_proxy'
  2. 1 module Rack
  3. # Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart)
  4. # Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter
  5. # https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ
  6. 1 class TempfileReaper
  7. 1 def initialize(app)
  8. 1 @app = app
  9. end
  10. 1 def call(env)
  11. 3 env[RACK_TEMPFILES] ||= []
  12. 3 status, headers, body = @app.call(env)
  13. 3 body_proxy = BodyProxy.new(body) do
  14. 3 env[RACK_TEMPFILES].each(&:close!) unless env[RACK_TEMPFILES].nil?
  15. end
  16. 3 [status, headers, body_proxy]
  17. end
  18. end
  19. end

target/rubygems/gems/railties-5.2.3/lib/minitest/rails_plugin.rb

86.67% lines covered

30 relevant lines. 26 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/attribute_accessors"
  3. 1 require "rails/test_unit/reporter"
  4. 1 require "rails/test_unit/runner"
  5. 1 module Minitest
  6. 1 class SuppressedSummaryReporter < SummaryReporter
  7. # Disable extra failure output after a run if output is inline.
  8. 1 def aggregated_results(*)
  9. 1 super unless options[:output_inline]
  10. end
  11. end
  12. 1 def self.plugin_rails_options(opts, options)
  13. 1 ::Rails::TestUnit::Runner.attach_before_load_options(opts)
  14. 1 opts.on("-b", "--backtrace", "Show the complete backtrace") do
  15. options[:full_backtrace] = true
  16. end
  17. 1 opts.on("-d", "--defer-output", "Output test failures and errors after the test run") do
  18. options[:output_inline] = false
  19. end
  20. 1 opts.on("-f", "--fail-fast", "Abort test run on first failure or error") do
  21. options[:fail_fast] = true
  22. end
  23. 1 opts.on("-c", "--[no-]color", "Enable color in the output") do |value|
  24. options[:color] = value
  25. end
  26. 1 options[:color] = true
  27. 1 options[:output_inline] = true
  28. end
  29. # Owes great inspiration to test runner trailblazers like RSpec,
  30. # minitest-reporters, maxitest and others.
  31. 1 def self.plugin_rails_init(options)
  32. 1 unless options[:full_backtrace] || ENV["BACKTRACE"]
  33. # Plugin can run without Rails loaded, check before filtering.
  34. 1 Minitest.backtrace_filter = ::Rails.backtrace_cleaner if ::Rails.respond_to?(:backtrace_cleaner)
  35. end
  36. 1 self.plugin_rails_replace_reporters(reporter, options)
  37. end
  38. 1 def self.plugin_rails_replace_reporters(minitest_reporter, options)
  39. 1 return unless minitest_reporter.kind_of?(Minitest::CompositeReporter)
  40. # Replace progress reporter for colors.
  41. 3 if minitest_reporter.reporters.reject! { |reporter| reporter.kind_of?(SummaryReporter) } != nil
  42. 1 minitest_reporter << SuppressedSummaryReporter.new(options[:io], options)
  43. end
  44. 3 if minitest_reporter.reporters.reject! { |reporter| reporter.kind_of?(ProgressReporter) } != nil
  45. 1 minitest_reporter << ::Rails::TestUnitReporter.new(options[:io], options)
  46. end
  47. end
  48. # Backwardscompatibility with Rails 5.0 generated plugin test scripts
  49. 1 mattr_reader :run_via, default: {}
  50. end

target/rubygems/gems/railties-5.2.3/lib/rails/application/bootstrap.rb

80.43% lines covered

46 relevant lines. 37 lines covered and 9 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "fileutils"
  3. 1 require "active_support/notifications"
  4. 1 require "active_support/dependencies"
  5. 1 require "active_support/descendants_tracker"
  6. 1 require "rails/secrets"
  7. 1 module Rails
  8. 1 class Application
  9. 1 module Bootstrap
  10. 1 include Initializable
  11. 1 initializer :load_environment_hook, group: :all do end
  12. 1 initializer :load_active_support, group: :all do
  13. 1 require "active_support/all" unless config.active_support.bare
  14. end
  15. 1 initializer :set_eager_load, group: :all do
  16. 1 if config.eager_load.nil?
  17. warn <<-INFO
  18. config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
  19. * development - set it to false
  20. * test - set it to false (unless you use a tool that preloads your test environment)
  21. * production - set it to true
  22. INFO
  23. config.eager_load = config.cache_classes
  24. end
  25. end
  26. # Initialize the logger early in the stack in case we need to log some deprecation.
  27. 1 initializer :initialize_logger, group: :all do
  28. 1 Rails.logger ||= config.logger || begin
  29. 1 path = config.paths["log"].first
  30. 1 unless File.exist? File.dirname path
  31. FileUtils.mkdir_p File.dirname path
  32. end
  33. 1 f = File.open path, "a"
  34. 1 f.binmode
  35. 1 f.sync = config.autoflush_log # if true make sure every write flushes
  36. 1 logger = ActiveSupport::Logger.new f
  37. 1 logger.formatter = config.log_formatter
  38. 1 logger = ActiveSupport::TaggedLogging.new(logger)
  39. 1 logger
  40. rescue StandardError
  41. logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDERR))
  42. logger.level = ActiveSupport::Logger::WARN
  43. logger.warn(
  44. "Rails Error: Unable to access log file. Please ensure that #{path} exists and is writable " \
  45. "(ie, make it writable for user and group: chmod 0664 #{path}). " \
  46. "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."
  47. )
  48. logger
  49. end
  50. 1 Rails.logger.level = ActiveSupport::Logger.const_get(config.log_level.to_s.upcase)
  51. end
  52. # Initialize cache early in the stack so railties can make use of it.
  53. 1 initializer :initialize_cache, group: :all do
  54. 1 unless Rails.cache
  55. 1 Rails.cache = ActiveSupport::Cache.lookup_store(config.cache_store)
  56. 1 if Rails.cache.respond_to?(:middleware)
  57. 1 config.middleware.insert_before(::Rack::Runtime, Rails.cache.middleware)
  58. end
  59. end
  60. end
  61. # Sets the dependency loading mechanism.
  62. 1 initializer :initialize_dependency_mechanism, group: :all do
  63. 1 ActiveSupport::Dependencies.mechanism = config.cache_classes ? :require : :load
  64. end
  65. 1 initializer :bootstrap_hook, group: :all do |app|
  66. 1 ActiveSupport.run_load_hooks(:before_initialize, app)
  67. end
  68. 1 initializer :set_secrets_root, group: :all do
  69. 1 Rails::Secrets.root = root
  70. end
  71. end
  72. end
  73. end

target/rubygems/gems/railties-5.2.3/lib/rails/application/default_middleware_stack.rb

77.19% lines covered

57 relevant lines. 44 lines covered and 13 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Rails
  3. 1 class Application
  4. 1 class DefaultMiddlewareStack
  5. 1 attr_reader :config, :paths, :app
  6. 1 def initialize(app, config, paths)
  7. 1 @app = app
  8. 1 @config = config
  9. 1 @paths = paths
  10. end
  11. 1 def build_stack
  12. 1 ActionDispatch::MiddlewareStack.new do |middleware|
  13. 1 if config.force_ssl
  14. middleware.use ::ActionDispatch::SSL, config.ssl_options
  15. end
  16. 1 middleware.use ::Rack::Sendfile, config.action_dispatch.x_sendfile_header
  17. 1 if config.public_file_server.enabled
  18. 1 headers = config.public_file_server.headers || {}
  19. 1 middleware.use ::ActionDispatch::Static, paths["public"].first, index: config.public_file_server.index_name, headers: headers
  20. end
  21. 1 if rack_cache = load_rack_cache
  22. require "action_dispatch/http/rack_cache"
  23. middleware.use ::Rack::Cache, rack_cache
  24. end
  25. 1 if config.allow_concurrency == false
  26. # User has explicitly opted out of concurrent request
  27. # handling: presumably their code is not threadsafe
  28. middleware.use ::Rack::Lock
  29. end
  30. 1 middleware.use ::ActionDispatch::Executor, app.executor
  31. 1 middleware.use ::Rack::Runtime
  32. 1 middleware.use ::Rack::MethodOverride unless config.api_only
  33. 1 middleware.use ::ActionDispatch::RequestId
  34. 1 middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
  35. 1 middleware.use ::Rails::Rack::Logger, config.log_tags
  36. 1 middleware.use ::ActionDispatch::ShowExceptions, show_exceptions_app
  37. 1 middleware.use ::ActionDispatch::DebugExceptions, app, config.debug_exception_response_format
  38. 1 unless config.cache_classes
  39. middleware.use ::ActionDispatch::Reloader, app.reloader
  40. end
  41. 1 middleware.use ::ActionDispatch::Callbacks
  42. 1 middleware.use ::ActionDispatch::Cookies unless config.api_only
  43. 1 if !config.api_only && config.session_store
  44. 1 if config.force_ssl && config.ssl_options.fetch(:secure_cookies, true) && !config.session_options.key?(:secure)
  45. config.session_options[:secure] = true
  46. end
  47. 1 middleware.use config.session_store, config.session_options
  48. 1 middleware.use ::ActionDispatch::Flash
  49. end
  50. 1 unless config.api_only
  51. 1 middleware.use ::ActionDispatch::ContentSecurityPolicy::Middleware
  52. end
  53. 1 middleware.use ::Rack::Head
  54. 1 middleware.use ::Rack::ConditionalGet
  55. 1 middleware.use ::Rack::ETag, "no-cache"
  56. 1 middleware.use ::Rack::TempfileReaper unless config.api_only
  57. end
  58. end
  59. 1 private
  60. 1 def load_rack_cache
  61. 1 rack_cache = config.action_dispatch.rack_cache
  62. 1 return unless rack_cache
  63. begin
  64. require "rack/cache"
  65. rescue LoadError => error
  66. error.message << " Be sure to add rack-cache to your Gemfile"
  67. raise
  68. end
  69. if rack_cache == true
  70. {
  71. metastore: "rails:/",
  72. entitystore: "rails:/",
  73. verbose: false
  74. }
  75. else
  76. rack_cache
  77. end
  78. end
  79. 1 def show_exceptions_app
  80. 1 config.exceptions_app || ActionDispatch::PublicExceptions.new(Rails.public_path)
  81. end
  82. end
  83. end
  84. end

target/rubygems/gems/railties-5.2.3/lib/rails/application/finisher.rb

67.06% lines covered

85 relevant lines. 57 lines covered and 28 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Rails
  3. 1 class Application
  4. 1 module Finisher
  5. 1 include Initializable
  6. 1 initializer :add_generator_templates do
  7. 1 config.generators.templates.unshift(*paths["lib/templates"].existent)
  8. end
  9. 1 initializer :ensure_autoload_once_paths_as_subset do
  10. 2 extra = ActiveSupport::Dependencies.autoload_once_paths -
  11. ActiveSupport::Dependencies.autoload_paths
  12. 1 unless extra.empty?
  13. abort <<-end_error
  14. autoload_once_paths must be a subset of the autoload_paths.
  15. Extra items in autoload_once_paths: #{extra * ','}
  16. end_error
  17. end
  18. end
  19. 1 initializer :add_builtin_route do |app|
  20. 1 if Rails.env.development?
  21. app.routes.prepend do
  22. get "/rails/info/properties" => "rails/info#properties", internal: true
  23. get "/rails/info/routes" => "rails/info#routes", internal: true
  24. get "/rails/info" => "rails/info#index", internal: true
  25. end
  26. app.routes.append do
  27. get "/" => "rails/welcome#index", internal: true
  28. end
  29. end
  30. end
  31. # Setup default session store if not already set in config/application.rb
  32. 1 initializer :setup_default_session_store, before: :build_middleware_stack do |app|
  33. 1 unless app.config.session_store?
  34. 1 app_name = app.class.name ? app.railtie_name.chomp("_application") : ""
  35. 1 app.config.session_store :cookie_store, key: "_#{app_name}_session"
  36. end
  37. end
  38. 1 initializer :build_middleware_stack do
  39. 1 build_middleware_stack
  40. end
  41. 1 initializer :define_main_app_helper do |app|
  42. 1 app.routes.define_mounted_helper(:main_app)
  43. end
  44. 1 initializer :add_to_prepare_blocks do |app|
  45. 1 config.to_prepare_blocks.each do |block|
  46. 1 app.reloader.to_prepare(&block)
  47. end
  48. end
  49. # This needs to happen before eager load so it happens
  50. # in exactly the same point regardless of config.eager_load
  51. 1 initializer :run_prepare_callbacks do |app|
  52. 1 app.reloader.prepare!
  53. end
  54. 1 initializer :eager_load! do
  55. 1 if config.eager_load
  56. 1 ActiveSupport.run_load_hooks(:before_eager_load, self)
  57. 1 config.eager_load_namespaces.each(&:eager_load!)
  58. end
  59. end
  60. # All initialization is done, including eager loading in production
  61. 1 initializer :finisher_hook do
  62. 1 ActiveSupport.run_load_hooks(:after_initialize, self)
  63. end
  64. 1 class MutexHook
  65. 1 def initialize(mutex = Mutex.new)
  66. @mutex = mutex
  67. end
  68. 1 def run
  69. @mutex.lock
  70. end
  71. 1 def complete(_state)
  72. @mutex.unlock
  73. end
  74. end
  75. 1 module InterlockHook
  76. 1 def self.run
  77. ActiveSupport::Dependencies.interlock.start_running
  78. end
  79. 1 def self.complete(_state)
  80. ActiveSupport::Dependencies.interlock.done_running
  81. end
  82. end
  83. 1 initializer :configure_executor_for_concurrency do |app|
  84. 1 if config.allow_concurrency == false
  85. # User has explicitly opted out of concurrent request
  86. # handling: presumably their code is not threadsafe
  87. app.executor.register_hook(MutexHook.new, outer: true)
  88. elsif config.allow_concurrency == :unsafe
  89. # Do nothing, even if we know this is dangerous. This is the
  90. # historical behavior for true.
  91. else
  92. # Default concurrency setting: enabled, but safe
  93. 1 unless config.cache_classes && config.eager_load
  94. # Without cache_classes + eager_load, the load interlock
  95. # is required for proper operation
  96. app.executor.register_hook(InterlockHook, outer: true)
  97. end
  98. end
  99. end
  100. # Set routes reload after the finisher hook to ensure routes added in
  101. # the hook are taken into account.
  102. 1 initializer :set_routes_reloader_hook do |app|
  103. 1 reloader = routes_reloader
  104. 1 reloader.eager_load = app.config.eager_load
  105. 1 reloader.execute
  106. 1 reloaders << reloader
  107. 1 app.reloader.to_run do
  108. # We configure #execute rather than #execute_if_updated because if
  109. # autoloaded constants are cleared we need to reload routes also in
  110. # case any was used there, as in
  111. #
  112. # mount MailPreview => 'mail_view'
  113. #
  114. # This means routes are also reloaded if i18n is updated, which
  115. # might not be necessary, but in order to be more precise we need
  116. # some sort of reloaders dependency support, to be added.
  117. require_unload_lock!
  118. reloader.execute
  119. end
  120. end
  121. # Set clearing dependencies after the finisher hook to ensure paths
  122. # added in the hook are taken into account.
  123. 1 initializer :set_clear_dependencies_hook, group: :all do |app|
  124. 1 callback = lambda do
  125. ActiveSupport::DescendantsTracker.clear
  126. ActiveSupport::Dependencies.clear
  127. end
  128. 1 if config.cache_classes
  129. 1 app.reloader.check = lambda { false }
  130. elsif config.reload_classes_only_on_change
  131. app.reloader.check = lambda do
  132. app.reloaders.map(&:updated?).any?
  133. end
  134. else
  135. app.reloader.check = lambda { true }
  136. end
  137. 1 if config.reload_classes_only_on_change
  138. 1 reloader = config.file_watcher.new(*watchable_args, &callback)
  139. 1 reloaders << reloader
  140. # Prepend this callback to have autoloaded constants cleared before
  141. # any other possible reloading, in case they need to autoload fresh
  142. # constants.
  143. 1 app.reloader.to_run(prepend: true) do
  144. # In addition to changes detected by the file watcher, if routes
  145. # or i18n have been updated we also need to clear constants,
  146. # that's why we run #execute rather than #execute_if_updated, this
  147. # callback has to clear autoloaded constants after any update.
  148. class_unload! do
  149. reloader.execute
  150. end
  151. end
  152. else
  153. app.reloader.to_complete do
  154. class_unload!(&callback)
  155. end
  156. end
  157. end
  158. # Disable dependency loading during request cycle
  159. 1 initializer :disable_dependency_loading do
  160. 1 if config.eager_load && config.cache_classes && !config.enable_dependency_loading
  161. 1 ActiveSupport::Dependencies.unhook!
  162. end
  163. end
  164. end
  165. end
  166. end

target/rubygems/gems/railties-5.2.3/lib/rails/application/routes_reloader.rb

100.0% lines covered

31 relevant lines. 31 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/module/delegation"
  3. 1 module Rails
  4. 1 class Application
  5. 1 class RoutesReloader
  6. 1 attr_reader :route_sets, :paths
  7. 1 attr_accessor :eager_load
  8. 1 delegate :execute_if_updated, :execute, :updated?, to: :updater
  9. 1 def initialize
  10. 1 @paths = []
  11. 1 @route_sets = []
  12. 1 @eager_load = false
  13. end
  14. 1 def reload!
  15. 1 clear!
  16. 1 load_paths
  17. 1 finalize!
  18. 1 route_sets.each(&:eager_load!) if eager_load
  19. ensure
  20. 1 revert
  21. end
  22. 1 private
  23. 1 def updater
  24. 2 @updater ||= ActiveSupport::FileUpdateChecker.new(paths) { reload! }
  25. end
  26. 1 def clear!
  27. 1 route_sets.each do |routes|
  28. 2 routes.disable_clear_and_finalize = true
  29. 2 routes.clear!
  30. end
  31. end
  32. 1 def load_paths
  33. 3 paths.each { |path| load(path) }
  34. end
  35. 1 def finalize!
  36. 1 route_sets.each(&:finalize!)
  37. end
  38. 1 def revert
  39. 1 route_sets.each do |routes|
  40. 2 routes.disable_clear_and_finalize = false
  41. end
  42. end
  43. end
  44. end
  45. end

target/rubygems/gems/railties-5.2.3/lib/rails/backtrace_cleaner.rb

100.0% lines covered

23 relevant lines. 23 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/backtrace_cleaner"
  3. 1 module Rails
  4. 1 class BacktraceCleaner < ActiveSupport::BacktraceCleaner
  5. 1 APP_DIRS_PATTERN = /^\/?(app|config|lib|test|\(\w*\))/
  6. 1 RENDER_TEMPLATE_PATTERN = /:in `_render_template_\w*'/
  7. 1 EMPTY_STRING = "".freeze
  8. 1 SLASH = "/".freeze
  9. 1 DOT_SLASH = "./".freeze
  10. 1 def initialize
  11. 1 super
  12. 1 @root = "#{Rails.root}/".freeze
  13. 1 add_filter { |line| line.sub(@root, EMPTY_STRING) }
  14. 1 add_filter { |line| line.sub(RENDER_TEMPLATE_PATTERN, EMPTY_STRING) }
  15. 1 add_filter { |line| line.sub(DOT_SLASH, SLASH) } # for tests
  16. 1 add_gem_filters
  17. 1 add_silencer { |line| !APP_DIRS_PATTERN.match?(line) }
  18. end
  19. 1 private
  20. 1 def add_gem_filters
  21. 6 gems_paths = (Gem.path | [Gem.default_dir]).map { |p| Regexp.escape(p) }
  22. 1 return if gems_paths.empty?
  23. 1 gems_regexp = %r{(#{gems_paths.join('|')})/gems/([^/]+)-([\w.]+)/(.*)}
  24. 1 gems_result = '\2 (\3) \4'.freeze
  25. 1 add_filter { |line| line.sub(gems_regexp, gems_result) }
  26. end
  27. end
  28. end

target/rubygems/gems/railties-5.2.3/lib/rails/generators/test_case.rb

100.0% lines covered

13 relevant lines. 13 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "rails/generators"
  3. 1 require "rails/generators/testing/behaviour"
  4. 1 require "rails/generators/testing/setup_and_teardown"
  5. 1 require "rails/generators/testing/assertions"
  6. 1 require "fileutils"
  7. 1 module Rails
  8. 1 module Generators
  9. # Disable color in output. Easier to debug.
  10. 1 no_color!
  11. # This class provides a TestCase for testing generators. To setup, you need
  12. # just to configure the destination and set which generator is being tested:
  13. #
  14. # class AppGeneratorTest < Rails::Generators::TestCase
  15. # tests AppGenerator
  16. # destination File.expand_path("../tmp", __dir__)
  17. # end
  18. #
  19. # If you want to ensure your destination root is clean before running each test,
  20. # you can set a setup callback:
  21. #
  22. # class AppGeneratorTest < Rails::Generators::TestCase
  23. # tests AppGenerator
  24. # destination File.expand_path("../tmp", __dir__)
  25. # setup :prepare_destination
  26. # end
  27. 1 class TestCase < ActiveSupport::TestCase
  28. 1 include Rails::Generators::Testing::Behaviour
  29. 1 include Rails::Generators::Testing::SetupAndTeardown
  30. 1 include Rails::Generators::Testing::Assertions
  31. 1 include FileUtils
  32. end
  33. end
  34. end

target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/assertions.rb

40.54% lines covered

37 relevant lines. 15 lines covered and 22 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Rails
  3. 1 module Generators
  4. 1 module Testing
  5. 1 module Assertions
  6. # Asserts a given file exists. You need to supply an absolute path or a path relative
  7. # to the configured destination:
  8. #
  9. # assert_file "config/environment.rb"
  10. #
  11. # You can also give extra arguments. If the argument is a regexp, it will check if the
  12. # regular expression matches the given file content. If it's a string, it compares the
  13. # file with the given string:
  14. #
  15. # assert_file "config/environment.rb", /initialize/
  16. #
  17. # Finally, when a block is given, it yields the file content:
  18. #
  19. # assert_file "app/controllers/products_controller.rb" do |controller|
  20. # assert_instance_method :index, controller do |index|
  21. # assert_match(/Product\.all/, index)
  22. # end
  23. # end
  24. 1 def assert_file(relative, *contents)
  25. absolute = File.expand_path(relative, destination_root)
  26. assert File.exist?(absolute), "Expected file #{relative.inspect} to exist, but does not"
  27. read = File.read(absolute) if block_given? || !contents.empty?
  28. yield read if block_given?
  29. contents.each do |content|
  30. case content
  31. when String
  32. assert_equal content, read
  33. when Regexp
  34. assert_match content, read
  35. end
  36. end
  37. end
  38. 1 alias :assert_directory :assert_file
  39. # Asserts a given file does not exist. You need to supply an absolute path or a
  40. # path relative to the configured destination:
  41. #
  42. # assert_no_file "config/random.rb"
  43. 1 def assert_no_file(relative)
  44. absolute = File.expand_path(relative, destination_root)
  45. assert !File.exist?(absolute), "Expected file #{relative.inspect} to not exist, but does"
  46. end
  47. 1 alias :assert_no_directory :assert_no_file
  48. # Asserts a given migration exists. You need to supply an absolute path or a
  49. # path relative to the configured destination:
  50. #
  51. # assert_migration "db/migrate/create_products.rb"
  52. #
  53. # This method manipulates the given path and tries to find any migration which
  54. # matches the migration name. For example, the call above is converted to:
  55. #
  56. # assert_file "db/migrate/003_create_products.rb"
  57. #
  58. # Consequently, assert_migration accepts the same arguments has assert_file.
  59. 1 def assert_migration(relative, *contents, &block)
  60. file_name = migration_file_name(relative)
  61. assert file_name, "Expected migration #{relative} to exist, but was not found"
  62. assert_file file_name, *contents, &block
  63. end
  64. # Asserts a given migration does not exist. You need to supply an absolute path or a
  65. # path relative to the configured destination:
  66. #
  67. # assert_no_migration "db/migrate/create_products.rb"
  68. 1 def assert_no_migration(relative)
  69. file_name = migration_file_name(relative)
  70. assert_nil file_name, "Expected migration #{relative} to not exist, but found #{file_name}"
  71. end
  72. # Asserts the given class method exists in the given content. This method does not detect
  73. # class methods inside (class << self), only class methods which starts with "self.".
  74. # When a block is given, it yields the content of the method.
  75. #
  76. # assert_migration "db/migrate/create_products.rb" do |migration|
  77. # assert_class_method :up, migration do |up|
  78. # assert_match(/create_table/, up)
  79. # end
  80. # end
  81. 1 def assert_class_method(method, content, &block)
  82. assert_instance_method "self.#{method}", content, &block
  83. end
  84. # Asserts the given method exists in the given content. When a block is given,
  85. # it yields the content of the method.
  86. #
  87. # assert_file "app/controllers/products_controller.rb" do |controller|
  88. # assert_instance_method :index, controller do |index|
  89. # assert_match(/Product\.all/, index)
  90. # end
  91. # end
  92. 1 def assert_instance_method(method, content)
  93. assert content =~ /(\s+)def #{method}(\(.+\))?(.*?)\n\1end/m, "Expected to have method #{method}"
  94. yield $3.strip if block_given?
  95. end
  96. 1 alias :assert_method :assert_instance_method
  97. # Asserts the given attribute type gets translated to a field type
  98. # properly:
  99. #
  100. # assert_field_type :date, :date_select
  101. 1 def assert_field_type(attribute_type, field_type)
  102. assert_equal(field_type, create_generated_attribute(attribute_type).field_type)
  103. end
  104. # Asserts the given attribute type gets a proper default value:
  105. #
  106. # assert_field_default_value :string, "MyString"
  107. 1 def assert_field_default_value(attribute_type, value)
  108. if value.nil?
  109. assert_nil(create_generated_attribute(attribute_type).default)
  110. else
  111. assert_equal(value, create_generated_attribute(attribute_type).default)
  112. end
  113. end
  114. end
  115. end
  116. end
  117. end

target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/behaviour.rb

66.67% lines covered

45 relevant lines. 30 lines covered and 15 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/class/attribute"
  3. 1 require "active_support/core_ext/module/delegation"
  4. 1 require "active_support/core_ext/hash/reverse_merge"
  5. 1 require "active_support/core_ext/kernel/reporting"
  6. 1 require "active_support/testing/stream"
  7. 1 require "active_support/concern"
  8. 1 require "rails/generators"
  9. 1 module Rails
  10. 1 module Generators
  11. 1 module Testing
  12. 1 module Behaviour
  13. 1 extend ActiveSupport::Concern
  14. 1 include ActiveSupport::Testing::Stream
  15. 1 included do
  16. # Generators frequently change the current path using +FileUtils.cd+.
  17. # So we need to store the path at file load and revert back to it after each test.
  18. 1 class_attribute :current_path, default: File.expand_path(Dir.pwd)
  19. 1 class_attribute :default_arguments, default: []
  20. 1 class_attribute :destination_root
  21. 1 class_attribute :generator_class
  22. end
  23. 1 module ClassMethods
  24. # Sets which generator should be tested:
  25. #
  26. # tests AppGenerator
  27. 1 def tests(klass)
  28. self.generator_class = klass
  29. end
  30. # Sets default arguments on generator invocation. This can be overwritten when
  31. # invoking it.
  32. #
  33. # arguments %w(app_name --skip-active-record)
  34. 1 def arguments(array)
  35. self.default_arguments = array
  36. end
  37. # Sets the destination of generator files:
  38. #
  39. # destination File.expand_path("../tmp", __dir__)
  40. 1 def destination(path)
  41. self.destination_root = path
  42. end
  43. end
  44. # Runs the generator configured for this class. The first argument is an array like
  45. # command line arguments:
  46. #
  47. # class AppGeneratorTest < Rails::Generators::TestCase
  48. # tests AppGenerator
  49. # destination File.expand_path("../tmp", __dir__)
  50. # setup :prepare_destination
  51. #
  52. # test "database.yml is not created when skipping Active Record" do
  53. # run_generator %w(myapp --skip-active-record)
  54. # assert_no_file "config/database.yml"
  55. # end
  56. # end
  57. #
  58. # You can provide a configuration hash as second argument. This method returns the output
  59. # printed by the generator.
  60. 1 def run_generator(args = default_arguments, config = {})
  61. capture(:stdout) do
  62. args += ["--skip-bundle"] unless args.include? "--dev"
  63. generator_class.start(args, config.reverse_merge(destination_root: destination_root))
  64. end
  65. end
  66. # Instantiate the generator.
  67. 1 def generator(args = default_arguments, options = {}, config = {})
  68. @generator ||= generator_class.new(args, options, config.reverse_merge(destination_root: destination_root))
  69. end
  70. # Create a Rails::Generators::GeneratedAttribute by supplying the
  71. # attribute type and, optionally, the attribute name:
  72. #
  73. # create_generated_attribute(:string, 'name')
  74. 1 def create_generated_attribute(attribute_type, name = "test", index = nil)
  75. Rails::Generators::GeneratedAttribute.parse([name, attribute_type, index].compact.join(":"))
  76. end
  77. 1 private
  78. 1 def destination_root_is_set?
  79. raise "You need to configure your Rails::Generators::TestCase destination root." unless destination_root
  80. end
  81. 1 def ensure_current_path
  82. cd current_path
  83. end
  84. # Clears all files and directories in destination.
  85. 1 def prepare_destination # :doc:
  86. rm_rf(destination_root)
  87. mkdir_p(destination_root)
  88. end
  89. 1 def migration_file_name(relative)
  90. absolute = File.expand_path(relative, destination_root)
  91. dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, "")
  92. Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first
  93. end
  94. end
  95. end
  96. end
  97. end

target/rubygems/gems/railties-5.2.3/lib/rails/generators/testing/setup_and_teardown.rb

54.55% lines covered

11 relevant lines. 6 lines covered and 5 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 module Rails
  3. 1 module Generators
  4. 1 module Testing
  5. 1 module SetupAndTeardown
  6. 1 def setup # :nodoc:
  7. destination_root_is_set?
  8. ensure_current_path
  9. super
  10. end
  11. 1 def teardown # :nodoc:
  12. ensure_current_path
  13. super
  14. end
  15. end
  16. end
  17. end
  18. end

target/rubygems/gems/railties-5.2.3/lib/rails/rack/logger.rb

84.09% lines covered

44 relevant lines. 37 lines covered and 7 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/time/conversions"
  3. 1 require "active_support/core_ext/object/blank"
  4. 1 require "active_support/log_subscriber"
  5. 1 require "action_dispatch/http/request"
  6. 1 require "rack/body_proxy"
  7. 1 module Rails
  8. 1 module Rack
  9. # Sets log tags, logs the request, calls the app, and flushes the logs.
  10. #
  11. # Log tags (+taggers+) can be an Array containing: methods that the +request+
  12. # object responds to, objects that respond to +to_s+ or Proc objects that accept
  13. # an instance of the +request+ object.
  14. 1 class Logger < ActiveSupport::LogSubscriber
  15. 1 def initialize(app, taggers = nil)
  16. 1 @app = app
  17. 1 @taggers = taggers || []
  18. end
  19. 1 def call(env)
  20. 3 request = ActionDispatch::Request.new(env)
  21. 3 if logger.respond_to?(:tagged)
  22. 6 logger.tagged(compute_tags(request)) { call_app(request, env) }
  23. else
  24. call_app(request, env)
  25. end
  26. end
  27. 1 private
  28. 1 def call_app(request, env) # :doc:
  29. 3 instrumenter = ActiveSupport::Notifications.instrumenter
  30. 3 instrumenter.start "request.action_dispatch", request: request
  31. 6 logger.info { started_request_message(request) }
  32. 3 status, headers, body = @app.call(env)
  33. 6 body = ::Rack::BodyProxy.new(body) { finish(request) }
  34. 3 [status, headers, body]
  35. rescue Exception
  36. finish(request)
  37. raise
  38. ensure
  39. 3 ActiveSupport::LogSubscriber.flush_all!
  40. end
  41. # Started GET "/session/new" for 127.0.0.1 at 2012-09-26 14:51:42 -0700
  42. 1 def started_request_message(request) # :doc:
  43. 3 'Started %s "%s" for %s at %s' % [
  44. 2 request.request_method,
  45. 2 request.filtered_path,
  46. 2 request.remote_ip,
  47. 2 Time.now.to_default_s ]
  48. end
  49. 1 def compute_tags(request) # :doc:
  50. 3 @taggers.collect do |tag|
  51. case tag
  52. when Proc
  53. tag.call(request)
  54. when Symbol
  55. request.send(tag)
  56. else
  57. tag
  58. end
  59. end
  60. end
  61. 1 def finish(request)
  62. 3 instrumenter = ActiveSupport::Notifications.instrumenter
  63. 3 instrumenter.finish "request.action_dispatch", request: request
  64. end
  65. 1 def logger
  66. 9 Rails.logger
  67. end
  68. end
  69. end
  70. end

target/rubygems/gems/railties-5.2.3/lib/rails/test_help.rb

84.62% lines covered

26 relevant lines. 22 lines covered and 4 lines missed.
    
  1. # frozen_string_literal: true
  2. # Make double-sure the RAILS_ENV is not set to production,
  3. # so fixtures aren't loaded into that environment
  4. 1 abort("Abort testing: Your Rails environment is running in production mode!") if Rails.env.production?
  5. 1 require "active_support/test_case"
  6. 1 require "action_controller"
  7. 1 require "action_controller/test_case"
  8. 1 require "action_dispatch/testing/integration"
  9. 1 require "rails/generators/test_case"
  10. 1 require "active_support/testing/autorun"
  11. 1 if defined?(ActiveRecord::Base)
  12. 1 begin
  13. 1 ActiveRecord::Migration.maintain_test_schema!
  14. rescue ActiveRecord::PendingMigrationError => e
  15. puts e.to_s.strip
  16. exit 1
  17. end
  18. 1 module ActiveSupport
  19. 1 class TestCase
  20. 1 include ActiveRecord::TestFixtures
  21. 1 self.fixture_path = "#{Rails.root}/test/fixtures/"
  22. 1 self.file_fixture_path = fixture_path + "files"
  23. end
  24. end
  25. 1 ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
  26. end
  27. # :enddoc:
  28. 1 class ActionController::TestCase
  29. 1 def before_setup # :nodoc:
  30. @routes = Rails.application.routes
  31. super
  32. end
  33. end
  34. 1 class ActionDispatch::IntegrationTest
  35. 1 def before_setup # :nodoc:
  36. 3 @routes = Rails.application.routes
  37. 3 super
  38. end
  39. end

target/rubygems/gems/railties-5.2.3/lib/rails/test_unit/reporter.rb

65.63% lines covered

64 relevant lines. 42 lines covered and 22 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require "active_support/core_ext/class/attribute"
  3. 1 require "minitest"
  4. 1 module Rails
  5. 1 class TestUnitReporter < Minitest::StatisticsReporter
  6. 1 class_attribute :executable, default: "bin/rails test"
  7. 1 def record(result)
  8. 7 super
  9. 7 if options[:verbose]
  10. io.puts color_output(format_line(result), by: result)
  11. else
  12. 7 io.print color_output(result.result_code, by: result)
  13. end
  14. 7 if output_inline? && result.failure && (!result.skipped? || options[:verbose])
  15. 1 io.puts
  16. 1 io.puts
  17. 1 io.puts color_output(result, by: result)
  18. 1 io.puts
  19. 1 io.puts format_rerun_snippet(result)
  20. 1 io.puts
  21. end
  22. 7 if fail_fast? && result.failure && !result.skipped?
  23. raise Interrupt
  24. end
  25. end
  26. 1 def report
  27. 1 return if output_inline? || filtered_results.empty?
  28. io.puts
  29. io.puts "Failed tests:"
  30. io.puts
  31. io.puts aggregated_results
  32. end
  33. 1 def aggregated_results # :nodoc:
  34. filtered_results.map { |result| format_rerun_snippet(result) }.join "\n"
  35. end
  36. 1 def filtered_results
  37. if options[:verbose]
  38. results
  39. else
  40. results.reject(&:skipped?)
  41. end
  42. end
  43. 1 def relative_path_for(file)
  44. 1 file.sub(/^#{app_root}\/?/, "")
  45. end
  46. 1 private
  47. 1 def output_inline?
  48. 8 options[:output_inline]
  49. end
  50. 1 def fail_fast?
  51. 7 options[:fail_fast]
  52. end
  53. 1 def format_line(result)
  54. klass = result.respond_to?(:klass) ? result.klass : result.class
  55. "%s#%s = %.2f s = %s" % [klass, result.name, result.time, result.result_code]
  56. end
  57. 1 def format_rerun_snippet(result)
  58. 1 location, line = if result.respond_to?(:source_location)
  59. 1 result.source_location
  60. else
  61. result.method(result.name).source_location
  62. end
  63. 1 "#{executable} #{relative_path_for(location)}:#{line}"
  64. end
  65. 1 def app_root
  66. 1 @app_root ||=
  67. if defined?(ENGINE_ROOT)
  68. ENGINE_ROOT
  69. elsif Rails.respond_to?(:root)
  70. 1 Rails.root
  71. end
  72. end
  73. 1 def colored_output?
  74. 8 options[:color] && io.respond_to?(:tty?) && io.tty?
  75. end
  76. 1 codes = { red: 31, green: 32, yellow: 33 }
  77. COLOR_BY_RESULT_CODE = {
  78. "." => codes[:green],
  79. "E" => codes[:red],
  80. "F" => codes[:red],
  81. "S" => codes[:yellow]
  82. }
  83. 1 def color_output(string, by:)
  84. 8 if colored_output?
  85. "\e[#{COLOR_BY_RESULT_CODE[by.result_code]}m#{string}\e[0m"
  86. else
  87. 8 string
  88. end
  89. end
  90. end
  91. end

target/rubygems/gems/sprockets-3.7.2/lib/sprockets/autoload/sass.rb

100.0% lines covered

4 relevant lines. 4 lines covered and 0 lines missed.
    
  1. 1 require 'sass'
  2. 1 module Sprockets
  3. 1 module Autoload
  4. 1 Sass = ::Sass
  5. end
  6. end

target/rubygems/gems/sprockets-3.7.2/lib/sprockets/cache/file_store.rb

31.65% lines covered

79 relevant lines. 25 lines covered and 54 lines missed.
    
  1. 1 require 'fileutils'
  2. 1 require 'logger'
  3. 1 require 'sprockets/encoding_utils'
  4. 1 require 'sprockets/path_utils'
  5. 1 require 'zlib'
  6. 1 module Sprockets
  7. 1 class Cache
  8. # Public: A file system cache store that automatically cleans up old keys.
  9. #
  10. # Assign the instance to the Environment#cache.
  11. #
  12. # environment.cache = Sprockets::Cache::FileStore.new("/tmp")
  13. #
  14. # See Also
  15. #
  16. # ActiveSupport::Cache::FileStore
  17. #
  18. 1 class FileStore
  19. # Internal: Default key limit for store.
  20. 1 DEFAULT_MAX_SIZE = 25 * 1024 * 1024
  21. # Internal: Default standard error fatal logger.
  22. #
  23. # Returns a Logger.
  24. 1 def self.default_logger
  25. logger = Logger.new($stderr)
  26. logger.level = Logger::FATAL
  27. logger
  28. end
  29. # Public: Initialize the cache store.
  30. #
  31. # root - A String path to a directory to persist cached values to.
  32. # max_size - A Integer of the maximum number of keys the store will hold.
  33. # (default: 1000).
  34. 1 def initialize(root, max_size = DEFAULT_MAX_SIZE, logger = self.class.default_logger)
  35. 1 @root = root
  36. 1 @max_size = max_size
  37. 1 @gc_size = max_size * 0.75
  38. 1 @logger = logger
  39. end
  40. # Public: Retrieve value from cache.
  41. #
  42. # This API should not be used directly, but via the Cache wrapper API.
  43. #
  44. # key - String cache key.
  45. #
  46. # Returns Object or nil or the value is not set.
  47. 1 def get(key)
  48. path = File.join(@root, "#{key}.cache")
  49. value = safe_open(path) do |f|
  50. begin
  51. EncodingUtils.unmarshaled_deflated(f.read, Zlib::MAX_WBITS)
  52. rescue Exception => e
  53. @logger.error do
  54. "#{self.class}[#{path}] could not be unmarshaled: " +
  55. "#{e.class}: #{e.message}"
  56. end
  57. nil
  58. end
  59. end
  60. if value
  61. FileUtils.touch(path)
  62. value
  63. end
  64. end
  65. # Public: Set a key and value in the cache.
  66. #
  67. # This API should not be used directly, but via the Cache wrapper API.
  68. #
  69. # key - String cache key.
  70. # value - Object value.
  71. #
  72. # Returns Object value.
  73. 1 def set(key, value)
  74. path = File.join(@root, "#{key}.cache")
  75. # Ensure directory exists
  76. FileUtils.mkdir_p File.dirname(path)
  77. # Check if cache exists before writing
  78. exists = File.exist?(path)
  79. # Serialize value
  80. marshaled = Marshal.dump(value)
  81. # Compress if larger than 4KB
  82. if marshaled.bytesize > 4 * 1024
  83. deflater = Zlib::Deflate.new(
  84. Zlib::BEST_COMPRESSION,
  85. Zlib::MAX_WBITS,
  86. Zlib::MAX_MEM_LEVEL,
  87. Zlib::DEFAULT_STRATEGY
  88. )
  89. deflater << marshaled
  90. raw = deflater.finish
  91. else
  92. raw = marshaled
  93. end
  94. # Write data
  95. PathUtils.atomic_write(path) do |f|
  96. f.write(raw)
  97. @size = size + f.size unless exists
  98. end
  99. # GC if necessary
  100. gc! if size > @max_size
  101. value
  102. end
  103. # Public: Pretty inspect
  104. #
  105. # Returns String.
  106. 1 def inspect
  107. "#<#{self.class} size=#{size}/#{@max_size}>"
  108. end
  109. 1 private
  110. # Internal: Get all cache files along with stats.
  111. #
  112. # Returns an Array of [String filename, File::Stat] pairs sorted by
  113. # mtime.
  114. 1 def find_caches
  115. Dir.glob(File.join(@root, '**/*.cache')).reduce([]) { |stats, filename|
  116. stat = safe_stat(filename)
  117. # stat maybe nil if file was removed between the time we called
  118. # dir.glob and the next stat
  119. stats << [filename, stat] if stat
  120. stats
  121. }.sort_by { |_, stat| stat.mtime.to_i }
  122. end
  123. 1 def size
  124. @size ||= compute_size(find_caches)
  125. end
  126. 1 def compute_size(caches)
  127. caches.inject(0) { |sum, (_, stat)| sum + stat.size }
  128. end
  129. 1 def safe_stat(fn)
  130. File.stat(fn)
  131. rescue Errno::ENOENT
  132. nil
  133. end
  134. 1 def safe_open(path, &block)
  135. if File.exist?(path)
  136. File.open(path, 'rb', &block)
  137. end
  138. rescue Errno::ENOENT
  139. end
  140. 1 def gc!
  141. start_time = Time.now
  142. caches = find_caches
  143. size = compute_size(caches)
  144. delete_caches, keep_caches = caches.partition { |filename, stat|
  145. deleted = size > @gc_size
  146. size -= stat.size
  147. deleted
  148. }
  149. return if delete_caches.empty?
  150. FileUtils.remove(delete_caches.map(&:first), force: true)
  151. @size = compute_size(keep_caches)
  152. @logger.warn do
  153. secs = Time.now.to_f - start_time.to_f
  154. "#{self.class}[#{@root}] garbage collected " +
  155. "#{delete_caches.size} files (#{(secs * 1000).to_i}ms)"
  156. end
  157. end
  158. end
  159. end
  160. end

target/rubygems/gems/thor-0.20.3/lib/thor/shell/basic.rb

20.83% lines covered

216 relevant lines. 45 lines covered and 171 lines missed.
    
  1. 1 class Thor
  2. 1 module Shell
  3. 1 class Basic
  4. 1 DEFAULT_TERMINAL_WIDTH = 80
  5. 1 attr_accessor :base
  6. 1 attr_reader :padding
  7. # Initialize base, mute and padding to nil.
  8. #
  9. 1 def initialize #:nodoc:
  10. @base = nil
  11. @mute = false
  12. @padding = 0
  13. @always_force = false
  14. end
  15. # Mute everything that's inside given block
  16. #
  17. 1 def mute
  18. @mute = true
  19. yield
  20. ensure
  21. @mute = false
  22. end
  23. # Check if base is muted
  24. #
  25. 1 def mute?
  26. @mute
  27. end
  28. # Sets the output padding, not allowing less than zero values.
  29. #
  30. 1 def padding=(value)
  31. @padding = [0, value].max
  32. end
  33. # Sets the output padding while executing a block and resets it.
  34. #
  35. 1 def indent(count = 1)
  36. orig_padding = padding
  37. self.padding = padding + count
  38. yield
  39. self.padding = orig_padding
  40. end
  41. # Asks something to the user and receives a response.
  42. #
  43. # If a default value is specified it will be presented to the user
  44. # and allows them to select that value with an empty response. This
  45. # option is ignored when limited answers are supplied.
  46. #
  47. # If asked to limit the correct responses, you can pass in an
  48. # array of acceptable answers. If one of those is not supplied,
  49. # they will be shown a message stating that one of those answers
  50. # must be given and re-asked the question.
  51. #
  52. # If asking for sensitive information, the :echo option can be set
  53. # to false to mask user input from $stdin.
  54. #
  55. # If the required input is a path, then set the path option to
  56. # true. This will enable tab completion for file paths relative
  57. # to the current working directory on systems that support
  58. # Readline.
  59. #
  60. # ==== Example
  61. # ask("What is your name?")
  62. #
  63. # ask("What is the planet furthest from the sun?", :default => "Pluto")
  64. #
  65. # ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
  66. #
  67. # ask("What is your password?", :echo => false)
  68. #
  69. # ask("Where should the file be saved?", :path => true)
  70. #
  71. 1 def ask(statement, *args)
  72. options = args.last.is_a?(Hash) ? args.pop : {}
  73. color = args.first
  74. if options[:limited_to]
  75. ask_filtered(statement, color, options)
  76. else
  77. ask_simply(statement, color, options)
  78. end
  79. end
  80. # Say (print) something to the user. If the sentence ends with a whitespace
  81. # or tab character, a new line is not appended (print + flush). Otherwise
  82. # are passed straight to puts (behavior got from Highline).
  83. #
  84. # ==== Example
  85. # say("I know you knew that.")
  86. #
  87. 1 def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
  88. buffer = prepare_message(message, *color)
  89. buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
  90. stdout.print(buffer)
  91. stdout.flush
  92. end
  93. # Say a status with the given color and appends the message. Since this
  94. # method is used frequently by actions, it allows nil or false to be given
  95. # in log_status, avoiding the message from being shown. If a Symbol is
  96. # given in log_status, it's used as the color.
  97. #
  98. 1 def say_status(status, message, log_status = true)
  99. return if quiet? || log_status == false
  100. spaces = " " * (padding + 1)
  101. color = log_status.is_a?(Symbol) ? log_status : :green
  102. status = status.to_s.rjust(12)
  103. status = set_color status, color, true if color
  104. buffer = "#{status}#{spaces}#{message}"
  105. buffer = "#{buffer}\n" unless buffer.end_with?("\n")
  106. stdout.print(buffer)
  107. stdout.flush
  108. end
  109. # Make a question the to user and returns true if the user replies "y" or
  110. # "yes".
  111. #
  112. 1 def yes?(statement, color = nil)
  113. !!(ask(statement, color, :add_to_history => false) =~ is?(:yes))
  114. end
  115. # Make a question the to user and returns true if the user replies "n" or
  116. # "no".
  117. #
  118. 1 def no?(statement, color = nil)
  119. !!(ask(statement, color, :add_to_history => false) =~ is?(:no))
  120. end
  121. # Prints values in columns
  122. #
  123. # ==== Parameters
  124. # Array[String, String, ...]
  125. #
  126. 1 def print_in_columns(array)
  127. return if array.empty?
  128. colwidth = (array.map { |el| el.to_s.size }.max || 0) + 2
  129. array.each_with_index do |value, index|
  130. # Don't output trailing spaces when printing the last column
  131. if ((((index + 1) % (terminal_width / colwidth))).zero? && !index.zero?) || index + 1 == array.length
  132. stdout.puts value
  133. else
  134. stdout.printf("%-#{colwidth}s", value)
  135. end
  136. end
  137. end
  138. # Prints a table.
  139. #
  140. # ==== Parameters
  141. # Array[Array[String, String, ...]]
  142. #
  143. # ==== Options
  144. # indent<Integer>:: Indent the first column by indent value.
  145. # colwidth<Integer>:: Force the first column to colwidth spaces wide.
  146. #
  147. 1 def print_table(array, options = {}) # rubocop:disable MethodLength
  148. return if array.empty?
  149. formats = []
  150. indent = options[:indent].to_i
  151. colwidth = options[:colwidth]
  152. options[:truncate] = terminal_width if options[:truncate] == true
  153. formats << "%-#{colwidth + 2}s".dup if colwidth
  154. start = colwidth ? 1 : 0
  155. colcount = array.max { |a, b| a.size <=> b.size }.size
  156. maximas = []
  157. start.upto(colcount - 1) do |index|
  158. maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max
  159. maximas << maxima
  160. formats << if index == colcount - 1
  161. # Don't output 2 trailing spaces when printing the last column
  162. "%-s".dup
  163. else
  164. "%-#{maxima + 2}s".dup
  165. end
  166. end
  167. formats[0] = formats[0].insert(0, " " * indent)
  168. formats << "%s"
  169. array.each do |row|
  170. sentence = "".dup
  171. row.each_with_index do |column, index|
  172. maxima = maximas[index]
  173. f = if column.is_a?(Numeric)
  174. if index == row.size - 1
  175. # Don't output 2 trailing spaces when printing the last column
  176. "%#{maxima}s"
  177. else
  178. "%#{maxima}s "
  179. end
  180. else
  181. formats[index]
  182. end
  183. sentence << f % column.to_s
  184. end
  185. sentence = truncate(sentence, options[:truncate]) if options[:truncate]
  186. stdout.puts sentence
  187. end
  188. end
  189. # Prints a long string, word-wrapping the text to the current width of the
  190. # terminal display. Ideal for printing heredocs.
  191. #
  192. # ==== Parameters
  193. # String
  194. #
  195. # ==== Options
  196. # indent<Integer>:: Indent each line of the printed paragraph by indent value.
  197. #
  198. 1 def print_wrapped(message, options = {})
  199. indent = options[:indent] || 0
  200. width = terminal_width - indent
  201. paras = message.split("\n\n")
  202. paras.map! do |unwrapped|
  203. counter = 0
  204. unwrapped.split(" ").inject do |memo, word|
  205. word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
  206. counter = 0 if word.include? "\n"
  207. if (counter + word.length + 1) < width
  208. memo = "#{memo} #{word}"
  209. counter += (word.length + 1)
  210. else
  211. memo = "#{memo}\n#{word}"
  212. counter = word.length
  213. end
  214. memo
  215. end
  216. end.compact!
  217. paras.each do |para|
  218. para.split("\n").each do |line|
  219. stdout.puts line.insert(0, " " * indent)
  220. end
  221. stdout.puts unless para == paras.last
  222. end
  223. end
  224. # Deals with file collision and returns true if the file should be
  225. # overwritten and false otherwise. If a block is given, it uses the block
  226. # response as the content for the diff.
  227. #
  228. # ==== Parameters
  229. # destination<String>:: the destination file to solve conflicts
  230. # block<Proc>:: an optional block that returns the value to be used in diff and merge
  231. #
  232. 1 def file_collision(destination)
  233. return true if @always_force
  234. options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"
  235. loop do
  236. answer = ask(
  237. %[Overwrite #{destination}? (enter "h" for help) #{options}],
  238. :add_to_history => false
  239. )
  240. case answer
  241. when nil
  242. say ""
  243. return true
  244. when is?(:yes), is?(:force), ""
  245. return true
  246. when is?(:no), is?(:skip)
  247. return false
  248. when is?(:always)
  249. return @always_force = true
  250. when is?(:quit)
  251. say "Aborting..."
  252. raise SystemExit
  253. when is?(:diff)
  254. show_diff(destination, yield) if block_given?
  255. say "Retrying..."
  256. when is?(:merge)
  257. if block_given? && !merge_tool.empty?
  258. merge(destination, yield)
  259. return nil
  260. end
  261. say "Please specify merge tool to `THOR_MERGE` env."
  262. else
  263. say file_collision_help
  264. end
  265. end
  266. end
  267. # This code was copied from Rake, available under MIT-LICENSE
  268. # Copyright (c) 2003, 2004 Jim Weirich
  269. 1 def terminal_width
  270. result = if ENV["THOR_COLUMNS"]
  271. ENV["THOR_COLUMNS"].to_i
  272. else
  273. unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
  274. end
  275. result < 10 ? DEFAULT_TERMINAL_WIDTH : result
  276. rescue
  277. DEFAULT_TERMINAL_WIDTH
  278. end
  279. # Called if something goes wrong during the execution. This is used by Thor
  280. # internally and should not be used inside your scripts. If something went
  281. # wrong, you can always raise an exception. If you raise a Thor::Error, it
  282. # will be rescued and wrapped in the method below.
  283. #
  284. 1 def error(statement)
  285. stderr.puts statement
  286. end
  287. # Apply color to the given string with optional bold. Disabled in the
  288. # Thor::Shell::Basic class.
  289. #
  290. 1 def set_color(string, *) #:nodoc:
  291. string
  292. end
  293. 1 protected
  294. 1 def prepare_message(message, *color)
  295. spaces = " " * padding
  296. spaces + set_color(message.to_s, *color)
  297. end
  298. 1 def can_display_colors?
  299. false
  300. end
  301. 1 def lookup_color(color)
  302. return color unless color.is_a?(Symbol)
  303. self.class.const_get(color.to_s.upcase)
  304. end
  305. 1 def stdout
  306. $stdout
  307. end
  308. 1 def stderr
  309. $stderr
  310. end
  311. 1 def is?(value) #:nodoc:
  312. value = value.to_s
  313. if value.size == 1
  314. /\A#{value}\z/i
  315. else
  316. /\A(#{value}|#{value[0, 1]})\z/i
  317. end
  318. end
  319. 1 def file_collision_help #:nodoc:
  320. <<-HELP
  321. Y - yes, overwrite
  322. n - no, do not overwrite
  323. a - all, overwrite this and all others
  324. q - quit, abort
  325. d - diff, show the differences between the old and the new
  326. h - help, show this help
  327. m - merge, run merge tool
  328. HELP
  329. end
  330. 1 def show_diff(destination, content) #:nodoc:
  331. diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"
  332. require "tempfile"
  333. Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
  334. temp.write content
  335. temp.rewind
  336. system %(#{diff_cmd} "#{destination}" "#{temp.path}")
  337. end
  338. end
  339. 1 def quiet? #:nodoc:
  340. mute? || (base && base.options[:quiet])
  341. end
  342. # Calculate the dynamic width of the terminal
  343. 1 def dynamic_width
  344. @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
  345. end
  346. 1 def dynamic_width_stty
  347. `stty size 2>/dev/null`.split[1].to_i
  348. end
  349. 1 def dynamic_width_tput
  350. `tput cols 2>/dev/null`.to_i
  351. end
  352. 1 def unix?
  353. RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
  354. end
  355. 1 def truncate(string, width)
  356. as_unicode do
  357. chars = string.chars.to_a
  358. if chars.length <= width
  359. chars.join
  360. else
  361. chars[0, width - 3].join + "..."
  362. end
  363. end
  364. end
  365. 1 if "".respond_to?(:encode)
  366. 1 def as_unicode
  367. yield
  368. end
  369. else
  370. def as_unicode
  371. old = $KCODE
  372. $KCODE = "U"
  373. yield
  374. ensure
  375. $KCODE = old
  376. end
  377. end
  378. 1 def ask_simply(statement, color, options)
  379. default = options[:default]
  380. message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
  381. message = prepare_message(message, *color)
  382. result = Thor::LineEditor.readline(message, options)
  383. return unless result
  384. result = result.strip
  385. if default && result == ""
  386. default
  387. else
  388. result
  389. end
  390. end
  391. 1 def ask_filtered(statement, color, options)
  392. answer_set = options[:limited_to]
  393. correct_answer = nil
  394. until correct_answer
  395. answers = answer_set.join(", ")
  396. answer = ask_simply("#{statement} [#{answers}]", color, options)
  397. correct_answer = answer_set.include?(answer) ? answer : nil
  398. say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
  399. end
  400. correct_answer
  401. end
  402. 1 def merge(destination, content) #:nodoc:
  403. require "tempfile"
  404. Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
  405. temp.write content
  406. temp.rewind
  407. system %(#{merge_tool} "#{temp.path}" "#{destination}")
  408. end
  409. end
  410. 1 def merge_tool #:nodoc:
  411. @merge_tool ||= ENV["THOR_MERGE"] || git_merge_tool
  412. end
  413. 1 def git_merge_tool #:nodoc:
  414. `git config merge.tool`.rstrip rescue ""
  415. end
  416. end
  417. end
  418. end

target/rubygems/gems/tzinfo-data-1.2019.2/lib/tzinfo/data/definitions/Etc/UTC.rb

100.0% lines covered

8 relevant lines. 8 lines covered and 0 lines missed.
    
  1. # encoding: UTF-8
  2. # This file contains data derived from the IANA Time Zone Database
  3. # (http://www.iana.org/time-zones).
  4. 1 module TZInfo
  5. 1 module Data
  6. 1 module Definitions
  7. 1 module Etc
  8. 1 module UTC
  9. 1 include TimezoneDefinition
  10. 1 timezone 'Etc/UTC' do |tz|
  11. 1 tz.offset :o0, 0, 0, :UTC
  12. end
  13. end
  14. end
  15. end
  16. end
  17. end